Page MenuHomeFreeBSD

D12870.diff
No OneTemporary

D12870.diff

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

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)

Event Timeline