diff options
author | David S. Miller <davem@davemloft.net> | 2014-07-22 22:53:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-22 22:53:55 -0400 |
commit | 2dbe82d0d11836279703dcf2679e711e18c23eec (patch) | |
tree | f68f7322365a1af4acc7354672466edd76e627e2 | |
parent | 7861f12bfd9f63e346b33a2b9841136f541dfbe3 (diff) | |
parent | ea1c1af1396cac9f8a1160acdac17f80e4b4f2c4 (diff) |
Merge branch 'mlx4-next'
Amir Vadai says:
====================
Mellanox driver update Jul-22-2014
This patchset contains a fix by Eyal to fix a bug in mlx4_en with bonding
alb/tlb mode.
The second patch, by me, is an ethtool private flag that enable turning off the
BlueFlame hardware feature.
The last two patches, introduce a new low memory profile for mlx4_en and
mlx4_core. This mode is useful when running from a limited resources
environment, like kdump. This will reduce the memory consumed by both drivers
from more than 100M to ~30M.
This patchset was applied and tested on commit 575a193 ("net: mvpp2: Fix error
return code in mvpp2_probe")
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 57 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_main.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_rx.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_tx.c | 13 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 28 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 6 | ||||
-rw-r--r-- | include/linux/mlx4/device.h | 7 |
8 files changed, 113 insertions, 11 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c index 68d763d2d030..50e85cc1d61f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | |||
@@ -98,6 +98,10 @@ mlx4_en_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *drvinfo) | |||
98 | drvinfo->eedump_len = 0; | 98 | drvinfo->eedump_len = 0; |
99 | } | 99 | } |
100 | 100 | ||
101 | static const char mlx4_en_priv_flags[][ETH_GSTRING_LEN] = { | ||
102 | "blueflame", | ||
103 | }; | ||
104 | |||
101 | static const char main_strings[][ETH_GSTRING_LEN] = { | 105 | static const char main_strings[][ETH_GSTRING_LEN] = { |
102 | "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors", | 106 | "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors", |
103 | "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions", | 107 | "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions", |
@@ -235,6 +239,8 @@ static int mlx4_en_get_sset_count(struct net_device *dev, int sset) | |||
235 | case ETH_SS_TEST: | 239 | case ETH_SS_TEST: |
236 | return MLX4_EN_NUM_SELF_TEST - !(priv->mdev->dev->caps.flags | 240 | return MLX4_EN_NUM_SELF_TEST - !(priv->mdev->dev->caps.flags |
237 | & MLX4_DEV_CAP_FLAG_UC_LOOPBACK) * 2; | 241 | & MLX4_DEV_CAP_FLAG_UC_LOOPBACK) * 2; |
242 | case ETH_SS_PRIV_FLAGS: | ||
243 | return ARRAY_SIZE(mlx4_en_priv_flags); | ||
238 | default: | 244 | default: |
239 | return -EOPNOTSUPP; | 245 | return -EOPNOTSUPP; |
240 | } | 246 | } |
@@ -358,6 +364,12 @@ static void mlx4_en_get_strings(struct net_device *dev, | |||
358 | #endif | 364 | #endif |
359 | } | 365 | } |
360 | break; | 366 | break; |
367 | case ETH_SS_PRIV_FLAGS: | ||
368 | for (i = 0; i < ARRAY_SIZE(mlx4_en_priv_flags); i++) | ||
369 | strcpy(data + i * ETH_GSTRING_LEN, | ||
370 | mlx4_en_priv_flags[i]); | ||
371 | break; | ||
372 | |||
361 | } | 373 | } |
362 | } | 374 | } |
363 | 375 | ||
@@ -1209,6 +1221,49 @@ static int mlx4_en_get_ts_info(struct net_device *dev, | |||
1209 | return ret; | 1221 | return ret; |
1210 | } | 1222 | } |
1211 | 1223 | ||
1224 | int mlx4_en_set_priv_flags(struct net_device *dev, u32 flags) | ||
1225 | { | ||
1226 | struct mlx4_en_priv *priv = netdev_priv(dev); | ||
1227 | bool bf_enabled_new = !!(flags & MLX4_EN_PRIV_FLAGS_BLUEFLAME); | ||
1228 | bool bf_enabled_old = !!(priv->pflags & MLX4_EN_PRIV_FLAGS_BLUEFLAME); | ||
1229 | int i; | ||
1230 | |||
1231 | if (bf_enabled_new == bf_enabled_old) | ||
1232 | return 0; /* Nothing to do */ | ||
1233 | |||
1234 | if (bf_enabled_new) { | ||
1235 | bool bf_supported = true; | ||
1236 | |||
1237 | for (i = 0; i < priv->tx_ring_num; i++) | ||
1238 | bf_supported &= priv->tx_ring[i]->bf_alloced; | ||
1239 | |||
1240 | if (!bf_supported) { | ||
1241 | en_err(priv, "BlueFlame is not supported\n"); | ||
1242 | return -EINVAL; | ||
1243 | } | ||
1244 | |||
1245 | priv->pflags |= MLX4_EN_PRIV_FLAGS_BLUEFLAME; | ||
1246 | } else { | ||
1247 | priv->pflags &= ~MLX4_EN_PRIV_FLAGS_BLUEFLAME; | ||
1248 | } | ||
1249 | |||
1250 | for (i = 0; i < priv->tx_ring_num; i++) | ||
1251 | priv->tx_ring[i]->bf_enabled = bf_enabled_new; | ||
1252 | |||
1253 | en_info(priv, "BlueFlame %s\n", | ||
1254 | bf_enabled_new ? "Enabled" : "Disabled"); | ||
1255 | |||
1256 | return 0; | ||
1257 | } | ||
1258 | |||
1259 | u32 mlx4_en_get_priv_flags(struct net_device *dev) | ||
1260 | { | ||
1261 | struct mlx4_en_priv *priv = netdev_priv(dev); | ||
1262 | |||
1263 | return priv->pflags; | ||
1264 | } | ||
1265 | |||
1266 | |||
1212 | const struct ethtool_ops mlx4_en_ethtool_ops = { | 1267 | const struct ethtool_ops mlx4_en_ethtool_ops = { |
1213 | .get_drvinfo = mlx4_en_get_drvinfo, | 1268 | .get_drvinfo = mlx4_en_get_drvinfo, |
1214 | .get_settings = mlx4_en_get_settings, | 1269 | .get_settings = mlx4_en_get_settings, |
@@ -1236,6 +1291,8 @@ const struct ethtool_ops mlx4_en_ethtool_ops = { | |||
1236 | .get_channels = mlx4_en_get_channels, | 1291 | .get_channels = mlx4_en_get_channels, |
1237 | .set_channels = mlx4_en_set_channels, | 1292 | .set_channels = mlx4_en_set_channels, |
1238 | .get_ts_info = mlx4_en_get_ts_info, | 1293 | .get_ts_info = mlx4_en_get_ts_info, |
1294 | .set_priv_flags = mlx4_en_set_priv_flags, | ||
1295 | .get_priv_flags = mlx4_en_get_priv_flags, | ||
1239 | }; | 1296 | }; |
1240 | 1297 | ||
1241 | 1298 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_main.c b/drivers/net/ethernet/mellanox/mlx4/en_main.c index f953c1d7eae6..3626fdf4cb5d 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_main.c | |||
@@ -129,8 +129,10 @@ static int mlx4_en_get_profile(struct mlx4_en_dev *mdev) | |||
129 | int i; | 129 | int i; |
130 | 130 | ||
131 | params->udp_rss = udp_rss; | 131 | params->udp_rss = udp_rss; |
132 | params->num_tx_rings_p_up = min_t(int, num_online_cpus(), | 132 | params->num_tx_rings_p_up = mlx4_low_memory_profile() ? |
133 | MLX4_EN_MAX_TX_RING_P_UP); | 133 | MLX4_EN_MIN_TX_RING_P_UP : |
134 | min_t(int, num_online_cpus(), MLX4_EN_MAX_TX_RING_P_UP); | ||
135 | |||
134 | if (params->udp_rss && !(mdev->dev->caps.flags | 136 | if (params->udp_rss && !(mdev->dev->caps.flags |
135 | & MLX4_DEV_CAP_FLAG_UDP_RSS)) { | 137 | & MLX4_DEV_CAP_FLAG_UDP_RSS)) { |
136 | mlx4_warn(mdev, "UDP RSS is not supported on this device\n"); | 138 | mlx4_warn(mdev, "UDP RSS is not supported on this device\n"); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index 887cf01d831d..bb536aa613f4 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -644,6 +644,7 @@ static int mlx4_en_get_qp(struct mlx4_en_priv *priv) | |||
644 | goto alloc_err; | 644 | goto alloc_err; |
645 | } | 645 | } |
646 | memcpy(entry->mac, priv->dev->dev_addr, sizeof(entry->mac)); | 646 | memcpy(entry->mac, priv->dev->dev_addr, sizeof(entry->mac)); |
647 | memcpy(priv->current_mac, entry->mac, sizeof(priv->current_mac)); | ||
647 | entry->reg_id = reg_id; | 648 | entry->reg_id = reg_id; |
648 | 649 | ||
649 | hlist_add_head_rcu(&entry->hlist, | 650 | hlist_add_head_rcu(&entry->hlist, |
@@ -2464,6 +2465,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, | |||
2464 | priv->port = port; | 2465 | priv->port = port; |
2465 | priv->port_up = false; | 2466 | priv->port_up = false; |
2466 | priv->flags = prof->flags; | 2467 | priv->flags = prof->flags; |
2468 | priv->pflags = MLX4_EN_PRIV_FLAGS_BLUEFLAME; | ||
2467 | priv->ctrl_flags = cpu_to_be32(MLX4_WQE_CTRL_CQ_UPDATE | | 2469 | priv->ctrl_flags = cpu_to_be32(MLX4_WQE_CTRL_CQ_UPDATE | |
2468 | MLX4_WQE_CTRL_SOLICITED); | 2470 | MLX4_WQE_CTRL_SOLICITED); |
2469 | priv->num_tx_rings_p_up = mdev->profile.num_tx_rings_p_up; | 2471 | priv->num_tx_rings_p_up = mdev->profile.num_tx_rings_p_up; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 7765a08f9e84..9c909d23f14c 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c | |||
@@ -335,8 +335,9 @@ void mlx4_en_set_num_rx_rings(struct mlx4_en_dev *mdev) | |||
335 | dev->caps.comp_pool/ | 335 | dev->caps.comp_pool/ |
336 | dev->caps.num_ports) - 1; | 336 | dev->caps.num_ports) - 1; |
337 | 337 | ||
338 | num_rx_rings = min_t(int, num_of_eqs, | 338 | num_rx_rings = mlx4_low_memory_profile() ? MIN_RX_RINGS : |
339 | netif_get_num_default_rss_queues()); | 339 | min_t(int, num_of_eqs, |
340 | netif_get_num_default_rss_queues()); | ||
340 | mdev->profile.prof[i].rx_ring_num = | 341 | mdev->profile.prof[i].rx_ring_num = |
341 | rounddown_pow_of_two(num_rx_rings); | 342 | rounddown_pow_of_two(num_rx_rings); |
342 | } | 343 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 5045bab59633..dae3da6d8dd0 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c | |||
@@ -126,8 +126,13 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv, | |||
126 | ring->bf.uar = &mdev->priv_uar; | 126 | ring->bf.uar = &mdev->priv_uar; |
127 | ring->bf.uar->map = mdev->uar_map; | 127 | ring->bf.uar->map = mdev->uar_map; |
128 | ring->bf_enabled = false; | 128 | ring->bf_enabled = false; |
129 | } else | 129 | ring->bf_alloced = false; |
130 | ring->bf_enabled = true; | 130 | priv->pflags &= ~MLX4_EN_PRIV_FLAGS_BLUEFLAME; |
131 | } else { | ||
132 | ring->bf_alloced = true; | ||
133 | ring->bf_enabled = !!(priv->pflags & | ||
134 | MLX4_EN_PRIV_FLAGS_BLUEFLAME); | ||
135 | } | ||
131 | 136 | ||
132 | ring->hwtstamp_tx_type = priv->hwtstamp_config.tx_type; | 137 | ring->hwtstamp_tx_type = priv->hwtstamp_config.tx_type; |
133 | ring->queue_index = queue_index; | 138 | ring->queue_index = queue_index; |
@@ -161,7 +166,7 @@ void mlx4_en_destroy_tx_ring(struct mlx4_en_priv *priv, | |||
161 | struct mlx4_en_tx_ring *ring = *pring; | 166 | struct mlx4_en_tx_ring *ring = *pring; |
162 | en_dbg(DRV, priv, "Destroying tx ring, qpn: %d\n", ring->qpn); | 167 | en_dbg(DRV, priv, "Destroying tx ring, qpn: %d\n", ring->qpn); |
163 | 168 | ||
164 | if (ring->bf_enabled) | 169 | if (ring->bf_alloced) |
165 | mlx4_bf_free(mdev->dev, &ring->bf); | 170 | mlx4_bf_free(mdev->dev, &ring->bf); |
166 | mlx4_qp_remove(mdev->dev, &ring->qp); | 171 | mlx4_qp_remove(mdev->dev, &ring->qp); |
167 | mlx4_qp_free(mdev->dev, &ring->qp); | 172 | mlx4_qp_free(mdev->dev, &ring->qp); |
@@ -195,7 +200,7 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv, | |||
195 | 200 | ||
196 | mlx4_en_fill_qp_context(priv, ring->size, ring->stride, 1, 0, ring->qpn, | 201 | mlx4_en_fill_qp_context(priv, ring->size, ring->stride, 1, 0, ring->qpn, |
197 | ring->cqn, user_prio, &ring->context); | 202 | ring->cqn, user_prio, &ring->context); |
198 | if (ring->bf_enabled) | 203 | if (ring->bf_alloced) |
199 | ring->context.usr_page = cpu_to_be32(ring->bf.uar->index); | 204 | ring->context.usr_page = cpu_to_be32(ring->bf.uar->index); |
200 | 205 | ||
201 | err = mlx4_qp_to_ready(mdev->dev, &ring->wqres.mtt, &ring->context, | 206 | err = mlx4_qp_to_ready(mdev->dev, &ring->wqres.mtt, &ring->context, |
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 82ab427290c3..80b8c5f30e4e 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -120,6 +120,16 @@ static struct mlx4_profile default_profile = { | |||
120 | .num_mtt = 1 << 20, /* It is really num mtt segements */ | 120 | .num_mtt = 1 << 20, /* It is really num mtt segements */ |
121 | }; | 121 | }; |
122 | 122 | ||
123 | static struct mlx4_profile low_mem_profile = { | ||
124 | .num_qp = 1 << 17, | ||
125 | .num_srq = 1 << 6, | ||
126 | .rdmarc_per_qp = 1 << 4, | ||
127 | .num_cq = 1 << 8, | ||
128 | .num_mcg = 1 << 8, | ||
129 | .num_mpt = 1 << 9, | ||
130 | .num_mtt = 1 << 7, | ||
131 | }; | ||
132 | |||
123 | static int log_num_mac = 7; | 133 | static int log_num_mac = 7; |
124 | module_param_named(log_num_mac, log_num_mac, int, 0444); | 134 | module_param_named(log_num_mac, log_num_mac, int, 0444); |
125 | MODULE_PARM_DESC(log_num_mac, "Log2 max number of MACs per ETH port (1-7)"); | 135 | MODULE_PARM_DESC(log_num_mac, "Log2 max number of MACs per ETH port (1-7)"); |
@@ -129,6 +139,8 @@ module_param_named(log_num_vlan, log_num_vlan, int, 0444); | |||
129 | MODULE_PARM_DESC(log_num_vlan, "Log2 max number of VLANs per ETH port (0-7)"); | 139 | MODULE_PARM_DESC(log_num_vlan, "Log2 max number of VLANs per ETH port (0-7)"); |
130 | /* Log2 max number of VLANs per ETH port (0-7) */ | 140 | /* Log2 max number of VLANs per ETH port (0-7) */ |
131 | #define MLX4_LOG_NUM_VLANS 7 | 141 | #define MLX4_LOG_NUM_VLANS 7 |
142 | #define MLX4_MIN_LOG_NUM_VLANS 0 | ||
143 | #define MLX4_MIN_LOG_NUM_MAC 1 | ||
132 | 144 | ||
133 | static bool use_prio; | 145 | static bool use_prio; |
134 | module_param_named(use_prio, use_prio, bool, 0444); | 146 | module_param_named(use_prio, use_prio, bool, 0444); |
@@ -287,8 +299,13 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
287 | if (mlx4_is_mfunc(dev)) | 299 | if (mlx4_is_mfunc(dev)) |
288 | dev->caps.flags &= ~MLX4_DEV_CAP_FLAG_SENSE_SUPPORT; | 300 | dev->caps.flags &= ~MLX4_DEV_CAP_FLAG_SENSE_SUPPORT; |
289 | 301 | ||
290 | dev->caps.log_num_macs = log_num_mac; | 302 | if (mlx4_low_memory_profile()) { |
291 | dev->caps.log_num_vlans = MLX4_LOG_NUM_VLANS; | 303 | dev->caps.log_num_macs = MLX4_MIN_LOG_NUM_MAC; |
304 | dev->caps.log_num_vlans = MLX4_MIN_LOG_NUM_VLANS; | ||
305 | } else { | ||
306 | dev->caps.log_num_macs = log_num_mac; | ||
307 | dev->caps.log_num_vlans = MLX4_LOG_NUM_VLANS; | ||
308 | } | ||
292 | 309 | ||
293 | for (i = 1; i <= dev->caps.num_ports; ++i) { | 310 | for (i = 1; i <= dev->caps.num_ports; ++i) { |
294 | dev->caps.port_type[i] = MLX4_PORT_TYPE_NONE; | 311 | dev->caps.port_type[i] = MLX4_PORT_TYPE_NONE; |
@@ -1587,7 +1604,12 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
1587 | if (mlx4_is_master(dev)) | 1604 | if (mlx4_is_master(dev)) |
1588 | mlx4_parav_master_pf_caps(dev); | 1605 | mlx4_parav_master_pf_caps(dev); |
1589 | 1606 | ||
1590 | profile = default_profile; | 1607 | if (mlx4_low_memory_profile()) { |
1608 | mlx4_info(dev, "Running from within kdump kernel. Using low memory profile\n"); | ||
1609 | profile = low_mem_profile; | ||
1610 | } else { | ||
1611 | profile = default_profile; | ||
1612 | } | ||
1591 | if (dev->caps.steering_mode == | 1613 | if (dev->caps.steering_mode == |
1592 | MLX4_STEERING_MODE_DEVICE_MANAGED) | 1614 | MLX4_STEERING_MODE_DEVICE_MANAGED) |
1593 | profile.num_mcg = MLX4_FS_NUM_MCG; | 1615 | profile.num_mcg = MLX4_FS_NUM_MCG; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index 2b19dd1f2c5d..3de41be49425 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | |||
@@ -93,6 +93,8 @@ | |||
93 | * OS related constants and tunables | 93 | * OS related constants and tunables |
94 | */ | 94 | */ |
95 | 95 | ||
96 | #define MLX4_EN_PRIV_FLAGS_BLUEFLAME 1 | ||
97 | |||
96 | #define MLX4_EN_WATCHDOG_TIMEOUT (15 * HZ) | 98 | #define MLX4_EN_WATCHDOG_TIMEOUT (15 * HZ) |
97 | 99 | ||
98 | /* Use the maximum between 16384 and a single page */ | 100 | /* Use the maximum between 16384 and a single page */ |
@@ -119,6 +121,7 @@ enum { | |||
119 | #define MLX4_EN_MIN_TX_SIZE (4096 / TXBB_SIZE) | 121 | #define MLX4_EN_MIN_TX_SIZE (4096 / TXBB_SIZE) |
120 | 122 | ||
121 | #define MLX4_EN_SMALL_PKT_SIZE 64 | 123 | #define MLX4_EN_SMALL_PKT_SIZE 64 |
124 | #define MLX4_EN_MIN_TX_RING_P_UP 1 | ||
122 | #define MLX4_EN_MAX_TX_RING_P_UP 32 | 125 | #define MLX4_EN_MAX_TX_RING_P_UP 32 |
123 | #define MLX4_EN_NUM_UP 8 | 126 | #define MLX4_EN_NUM_UP 8 |
124 | #define MLX4_EN_DEF_TX_RING_SIZE 512 | 127 | #define MLX4_EN_DEF_TX_RING_SIZE 512 |
@@ -278,6 +281,7 @@ struct mlx4_en_tx_ring { | |||
278 | unsigned long wake_queue; | 281 | unsigned long wake_queue; |
279 | struct mlx4_bf bf; | 282 | struct mlx4_bf bf; |
280 | bool bf_enabled; | 283 | bool bf_enabled; |
284 | bool bf_alloced; | ||
281 | struct netdev_queue *tx_queue; | 285 | struct netdev_queue *tx_queue; |
282 | int hwtstamp_tx_type; | 286 | int hwtstamp_tx_type; |
283 | int inline_thold; | 287 | int inline_thold; |
@@ -592,6 +596,8 @@ struct mlx4_en_priv { | |||
592 | #endif | 596 | #endif |
593 | u64 tunnel_reg_id; | 597 | u64 tunnel_reg_id; |
594 | __be16 vxlan_port; | 598 | __be16 vxlan_port; |
599 | |||
600 | u32 pflags; | ||
595 | }; | 601 | }; |
596 | 602 | ||
597 | enum mlx4_en_wol { | 603 | enum mlx4_en_wol { |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index fa660aedb822..e15b1544ea83 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -1254,4 +1254,11 @@ int mlx4_vf_smi_enabled(struct mlx4_dev *dev, int slave, int port); | |||
1254 | int mlx4_vf_get_enable_smi_admin(struct mlx4_dev *dev, int slave, int port); | 1254 | int mlx4_vf_get_enable_smi_admin(struct mlx4_dev *dev, int slave, int port); |
1255 | int mlx4_vf_set_enable_smi_admin(struct mlx4_dev *dev, int slave, int port, | 1255 | int mlx4_vf_set_enable_smi_admin(struct mlx4_dev *dev, int slave, int port, |
1256 | int enable); | 1256 | int enable); |
1257 | |||
1258 | /* Returns true if running in low memory profile (kdump kernel) */ | ||
1259 | static inline bool mlx4_low_memory_profile(void) | ||
1260 | { | ||
1261 | return reset_devices; | ||
1262 | } | ||
1263 | |||
1257 | #endif /* MLX4_DEVICE_H */ | 1264 | #endif /* MLX4_DEVICE_H */ |