Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140684532
D12870.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D12870.diff
View Options
Index: head/sys/dev/ena/ena.h
===================================================================
--- head/sys/dev/ena/ena.h
+++ head/sys/dev/ena/ena.h
@@ -103,6 +103,8 @@
#define RX_IRQ_INTERVAL 20
#define TX_IRQ_INTERVAL 50
+#define ENA_MIN_MTU 128
+
#define ENA_TSO_MAXSIZE 65536
#define ENA_MMIO_DISABLE_REG_READ BIT(0)
@@ -325,6 +327,8 @@
bus_dma_tag_t tx_buf_tag;
bus_dma_tag_t rx_buf_tag;
int dma_width;
+
+ uint32_t max_mtu;
uint16_t max_tx_sgl_size;
uint16_t max_rx_sgl_size;
Index: head/sys/dev/ena/ena.c
===================================================================
--- head/sys/dev/ena/ena.c
+++ head/sys/dev/ena/ena.c
@@ -351,39 +351,25 @@
ena_change_mtu(if_t ifp, int new_mtu)
{
struct ena_adapter *adapter = if_getsoftc(ifp);
- struct ena_com_dev_get_features_ctx get_feat_ctx;
- int rc, old_mtu, max_frame;
+ int rc;
- rc = ena_com_get_dev_attr_feat(adapter->ena_dev, &get_feat_ctx);
- if (unlikely(rc != 0)) {
- device_printf(adapter->pdev,
- "Cannot get attribute for ena device\n");
- return (ENXIO);
- }
-
- /* Save old MTU in case of fail */
- old_mtu = if_getmtu(ifp);
-
- /* Change MTU and calculate max frame */
- if_setmtu(ifp, new_mtu);
- max_frame = ETHER_MAX_FRAME(ifp, ETHERTYPE_VLAN, 1);
-
- if (unlikely((new_mtu < ENA_MIN_FRAME_LEN) ||
- (new_mtu > get_feat_ctx.dev_attr.max_mtu) ||
- (max_frame > ENA_MAX_FRAME_LEN))) {
+ if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
device_printf(adapter->pdev, "Invalid MTU setting. "
- "new_mtu: %d\n", new_mtu);
- goto error;
+ "new_mtu: %d max mtu: %d min mtu: %d\n",
+ new_mtu, adapter->max_mtu, ENA_MIN_MTU);
+ return (EINVAL);
}
rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
- if (rc != 0)
- goto error;
+ if (likely(rc == 0)) {
+ ena_trace(ENA_DBG, "set MTU to %d\n", new_mtu);
+ if_setmtu(ifp, new_mtu);
+ } else {
+ device_printf(adapter->pdev, "Failed to set MTU to %d\n",
+ new_mtu);
+ }
- return (0);
-error:
- if_setmtu(ifp, old_mtu);
- return (EINVAL);
+ return (rc);
}
static inline void
@@ -3703,6 +3689,8 @@
ENA_ASSERT(io_queue_num > 0, "Invalid queue number: %d\n",
io_queue_num);
adapter->num_queues = io_queue_num;
+
+ adapter->max_mtu = get_feat_ctx.dev_attr.max_mtu;
/* calculatre ring sizes */
queue_size = ena_calc_queue_size(adapter,&tx_sgl_size,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Dec 27, 9:05 PM (14 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27312828
Default Alt Text
D12870.diff (2 KB)
Attached To
Mode
D12870: Read max MTU from the ENA device
Attached
Detach File
Event Timeline
Log In to Comment