diff options
author | Tony Camuso <tcamuso@redhat.com> | 2014-06-23 06:38:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-23 17:32:19 -0400 |
commit | 8e091340cfcd6f96ca0dddb078ce28c407a6d44c (patch) | |
tree | 8423186f4faf1236c4f2ed3bfc01b69008782aff | |
parent | a145df23ef32c7b933875f334ba28791ee75766e (diff) |
enic: fix lockdep around devcmd_lock
We were experiencing occasional "BUG: scheduling while atomic" splats
in our testing. Enabling DEBUG_SPINLOCK and DEBUG_LOCKDEP in the kernel
exposed a lockdep in the enic driver.
enic 0000:0b:00.0 eth2: Link UP
======================================================
[ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
3.12.0-rc1.x86_64-dbg+ #2 Tainted: GF W
------------------------------------------------------
NetworkManager/4209 [HC0[0]:SC0[2]:HE1:SE0] is trying to acquire:
(&(&enic->devcmd_lock)->rlock){+.+...}, at: [<ffffffffa026b7e4>] enic_dev_packet_filter+0x44/0x90 [enic]
The fix was to replace spin_lock with spin_lock_bh for the enic
devcmd_lock, so that soft irqs would be disabled while the lock
is held.
Signed-off-by: Sujith Sankar <ssujith@cisco.com>
Signed-off-by: Tony Camuso <tcamuso@redhat.com>
Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_api.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_dev.c | 80 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_dev.h | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_main.c | 16 |
4 files changed, 52 insertions, 52 deletions
diff --git a/drivers/net/ethernet/cisco/enic/enic_api.c b/drivers/net/ethernet/cisco/enic/enic_api.c index e13efbdaa2ed..b161f24522b8 100644 --- a/drivers/net/ethernet/cisco/enic/enic_api.c +++ b/drivers/net/ethernet/cisco/enic/enic_api.c | |||
@@ -34,13 +34,13 @@ int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf, | |||
34 | struct vnic_dev *vdev = enic->vdev; | 34 | struct vnic_dev *vdev = enic->vdev; |
35 | 35 | ||
36 | spin_lock(&enic->enic_api_lock); | 36 | spin_lock(&enic->enic_api_lock); |
37 | spin_lock(&enic->devcmd_lock); | 37 | spin_lock_bh(&enic->devcmd_lock); |
38 | 38 | ||
39 | vnic_dev_cmd_proxy_by_index_start(vdev, vf); | 39 | vnic_dev_cmd_proxy_by_index_start(vdev, vf); |
40 | err = vnic_dev_cmd(vdev, cmd, a0, a1, wait); | 40 | err = vnic_dev_cmd(vdev, cmd, a0, a1, wait); |
41 | vnic_dev_cmd_proxy_end(vdev); | 41 | vnic_dev_cmd_proxy_end(vdev); |
42 | 42 | ||
43 | spin_unlock(&enic->devcmd_lock); | 43 | spin_unlock_bh(&enic->devcmd_lock); |
44 | spin_unlock(&enic->enic_api_lock); | 44 | spin_unlock(&enic->enic_api_lock); |
45 | 45 | ||
46 | return err; | 46 | return err; |
diff --git a/drivers/net/ethernet/cisco/enic/enic_dev.c b/drivers/net/ethernet/cisco/enic/enic_dev.c index 3e27df522847..87ddc44b590e 100644 --- a/drivers/net/ethernet/cisco/enic/enic_dev.c +++ b/drivers/net/ethernet/cisco/enic/enic_dev.c | |||
@@ -29,9 +29,9 @@ int enic_dev_fw_info(struct enic *enic, struct vnic_devcmd_fw_info **fw_info) | |||
29 | { | 29 | { |
30 | int err; | 30 | int err; |
31 | 31 | ||
32 | spin_lock(&enic->devcmd_lock); | 32 | spin_lock_bh(&enic->devcmd_lock); |
33 | err = vnic_dev_fw_info(enic->vdev, fw_info); | 33 | err = vnic_dev_fw_info(enic->vdev, fw_info); |
34 | spin_unlock(&enic->devcmd_lock); | 34 | spin_unlock_bh(&enic->devcmd_lock); |
35 | 35 | ||
36 | return err; | 36 | return err; |
37 | } | 37 | } |
@@ -40,9 +40,9 @@ int enic_dev_stats_dump(struct enic *enic, struct vnic_stats **vstats) | |||
40 | { | 40 | { |
41 | int err; | 41 | int err; |
42 | 42 | ||
43 | spin_lock(&enic->devcmd_lock); | 43 | spin_lock_bh(&enic->devcmd_lock); |
44 | err = vnic_dev_stats_dump(enic->vdev, vstats); | 44 | err = vnic_dev_stats_dump(enic->vdev, vstats); |
45 | spin_unlock(&enic->devcmd_lock); | 45 | spin_unlock_bh(&enic->devcmd_lock); |
46 | 46 | ||
47 | return err; | 47 | return err; |
48 | } | 48 | } |
@@ -54,9 +54,9 @@ int enic_dev_add_station_addr(struct enic *enic) | |||
54 | if (!is_valid_ether_addr(enic->netdev->dev_addr)) | 54 | if (!is_valid_ether_addr(enic->netdev->dev_addr)) |
55 | return -EADDRNOTAVAIL; | 55 | return -EADDRNOTAVAIL; |
56 | 56 | ||
57 | spin_lock(&enic->devcmd_lock); | 57 | spin_lock_bh(&enic->devcmd_lock); |
58 | err = vnic_dev_add_addr(enic->vdev, enic->netdev->dev_addr); | 58 | err = vnic_dev_add_addr(enic->vdev, enic->netdev->dev_addr); |
59 | spin_unlock(&enic->devcmd_lock); | 59 | spin_unlock_bh(&enic->devcmd_lock); |
60 | 60 | ||
61 | return err; | 61 | return err; |
62 | } | 62 | } |
@@ -68,9 +68,9 @@ int enic_dev_del_station_addr(struct enic *enic) | |||
68 | if (!is_valid_ether_addr(enic->netdev->dev_addr)) | 68 | if (!is_valid_ether_addr(enic->netdev->dev_addr)) |
69 | return -EADDRNOTAVAIL; | 69 | return -EADDRNOTAVAIL; |
70 | 70 | ||
71 | spin_lock(&enic->devcmd_lock); | 71 | spin_lock_bh(&enic->devcmd_lock); |
72 | err = vnic_dev_del_addr(enic->vdev, enic->netdev->dev_addr); | 72 | err = vnic_dev_del_addr(enic->vdev, enic->netdev->dev_addr); |
73 | spin_unlock(&enic->devcmd_lock); | 73 | spin_unlock_bh(&enic->devcmd_lock); |
74 | 74 | ||
75 | return err; | 75 | return err; |
76 | } | 76 | } |
@@ -80,10 +80,10 @@ int enic_dev_packet_filter(struct enic *enic, int directed, int multicast, | |||
80 | { | 80 | { |
81 | int err; | 81 | int err; |
82 | 82 | ||
83 | spin_lock(&enic->devcmd_lock); | 83 | spin_lock_bh(&enic->devcmd_lock); |
84 | err = vnic_dev_packet_filter(enic->vdev, directed, | 84 | err = vnic_dev_packet_filter(enic->vdev, directed, |
85 | multicast, broadcast, promisc, allmulti); | 85 | multicast, broadcast, promisc, allmulti); |
86 | spin_unlock(&enic->devcmd_lock); | 86 | spin_unlock_bh(&enic->devcmd_lock); |
87 | 87 | ||
88 | return err; | 88 | return err; |
89 | } | 89 | } |
@@ -92,9 +92,9 @@ int enic_dev_add_addr(struct enic *enic, const u8 *addr) | |||
92 | { | 92 | { |
93 | int err; | 93 | int err; |
94 | 94 | ||
95 | spin_lock(&enic->devcmd_lock); | 95 | spin_lock_bh(&enic->devcmd_lock); |
96 | err = vnic_dev_add_addr(enic->vdev, addr); | 96 | err = vnic_dev_add_addr(enic->vdev, addr); |
97 | spin_unlock(&enic->devcmd_lock); | 97 | spin_unlock_bh(&enic->devcmd_lock); |
98 | 98 | ||
99 | return err; | 99 | return err; |
100 | } | 100 | } |
@@ -103,9 +103,9 @@ int enic_dev_del_addr(struct enic *enic, const u8 *addr) | |||
103 | { | 103 | { |
104 | int err; | 104 | int err; |
105 | 105 | ||
106 | spin_lock(&enic->devcmd_lock); | 106 | spin_lock_bh(&enic->devcmd_lock); |
107 | err = vnic_dev_del_addr(enic->vdev, addr); | 107 | err = vnic_dev_del_addr(enic->vdev, addr); |
108 | spin_unlock(&enic->devcmd_lock); | 108 | spin_unlock_bh(&enic->devcmd_lock); |
109 | 109 | ||
110 | return err; | 110 | return err; |
111 | } | 111 | } |
@@ -114,9 +114,9 @@ int enic_dev_notify_unset(struct enic *enic) | |||
114 | { | 114 | { |
115 | int err; | 115 | int err; |
116 | 116 | ||
117 | spin_lock(&enic->devcmd_lock); | 117 | spin_lock_bh(&enic->devcmd_lock); |
118 | err = vnic_dev_notify_unset(enic->vdev); | 118 | err = vnic_dev_notify_unset(enic->vdev); |
119 | spin_unlock(&enic->devcmd_lock); | 119 | spin_unlock_bh(&enic->devcmd_lock); |
120 | 120 | ||
121 | return err; | 121 | return err; |
122 | } | 122 | } |
@@ -125,9 +125,9 @@ int enic_dev_hang_notify(struct enic *enic) | |||
125 | { | 125 | { |
126 | int err; | 126 | int err; |
127 | 127 | ||
128 | spin_lock(&enic->devcmd_lock); | 128 | spin_lock_bh(&enic->devcmd_lock); |
129 | err = vnic_dev_hang_notify(enic->vdev); | 129 | err = vnic_dev_hang_notify(enic->vdev); |
130 | spin_unlock(&enic->devcmd_lock); | 130 | spin_unlock_bh(&enic->devcmd_lock); |
131 | 131 | ||
132 | return err; | 132 | return err; |
133 | } | 133 | } |
@@ -136,10 +136,10 @@ int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic) | |||
136 | { | 136 | { |
137 | int err; | 137 | int err; |
138 | 138 | ||
139 | spin_lock(&enic->devcmd_lock); | 139 | spin_lock_bh(&enic->devcmd_lock); |
140 | err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev, | 140 | err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev, |
141 | IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN); | 141 | IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN); |
142 | spin_unlock(&enic->devcmd_lock); | 142 | spin_unlock_bh(&enic->devcmd_lock); |
143 | 143 | ||
144 | return err; | 144 | return err; |
145 | } | 145 | } |
@@ -148,9 +148,9 @@ int enic_dev_enable(struct enic *enic) | |||
148 | { | 148 | { |
149 | int err; | 149 | int err; |
150 | 150 | ||
151 | spin_lock(&enic->devcmd_lock); | 151 | spin_lock_bh(&enic->devcmd_lock); |
152 | err = vnic_dev_enable_wait(enic->vdev); | 152 | err = vnic_dev_enable_wait(enic->vdev); |
153 | spin_unlock(&enic->devcmd_lock); | 153 | spin_unlock_bh(&enic->devcmd_lock); |
154 | 154 | ||
155 | return err; | 155 | return err; |
156 | } | 156 | } |
@@ -159,9 +159,9 @@ int enic_dev_disable(struct enic *enic) | |||
159 | { | 159 | { |
160 | int err; | 160 | int err; |
161 | 161 | ||
162 | spin_lock(&enic->devcmd_lock); | 162 | spin_lock_bh(&enic->devcmd_lock); |
163 | err = vnic_dev_disable(enic->vdev); | 163 | err = vnic_dev_disable(enic->vdev); |
164 | spin_unlock(&enic->devcmd_lock); | 164 | spin_unlock_bh(&enic->devcmd_lock); |
165 | 165 | ||
166 | return err; | 166 | return err; |
167 | } | 167 | } |
@@ -170,9 +170,9 @@ int enic_dev_intr_coal_timer_info(struct enic *enic) | |||
170 | { | 170 | { |
171 | int err; | 171 | int err; |
172 | 172 | ||
173 | spin_lock(&enic->devcmd_lock); | 173 | spin_lock_bh(&enic->devcmd_lock); |
174 | err = vnic_dev_intr_coal_timer_info(enic->vdev); | 174 | err = vnic_dev_intr_coal_timer_info(enic->vdev); |
175 | spin_unlock(&enic->devcmd_lock); | 175 | spin_unlock_bh(&enic->devcmd_lock); |
176 | 176 | ||
177 | return err; | 177 | return err; |
178 | } | 178 | } |
@@ -181,9 +181,9 @@ int enic_vnic_dev_deinit(struct enic *enic) | |||
181 | { | 181 | { |
182 | int err; | 182 | int err; |
183 | 183 | ||
184 | spin_lock(&enic->devcmd_lock); | 184 | spin_lock_bh(&enic->devcmd_lock); |
185 | err = vnic_dev_deinit(enic->vdev); | 185 | err = vnic_dev_deinit(enic->vdev); |
186 | spin_unlock(&enic->devcmd_lock); | 186 | spin_unlock_bh(&enic->devcmd_lock); |
187 | 187 | ||
188 | return err; | 188 | return err; |
189 | } | 189 | } |
@@ -192,10 +192,10 @@ int enic_dev_init_prov2(struct enic *enic, struct vic_provinfo *vp) | |||
192 | { | 192 | { |
193 | int err; | 193 | int err; |
194 | 194 | ||
195 | spin_lock(&enic->devcmd_lock); | 195 | spin_lock_bh(&enic->devcmd_lock); |
196 | err = vnic_dev_init_prov2(enic->vdev, | 196 | err = vnic_dev_init_prov2(enic->vdev, |
197 | (u8 *)vp, vic_provinfo_size(vp)); | 197 | (u8 *)vp, vic_provinfo_size(vp)); |
198 | spin_unlock(&enic->devcmd_lock); | 198 | spin_unlock_bh(&enic->devcmd_lock); |
199 | 199 | ||
200 | return err; | 200 | return err; |
201 | } | 201 | } |
@@ -204,9 +204,9 @@ int enic_dev_deinit_done(struct enic *enic, int *status) | |||
204 | { | 204 | { |
205 | int err; | 205 | int err; |
206 | 206 | ||
207 | spin_lock(&enic->devcmd_lock); | 207 | spin_lock_bh(&enic->devcmd_lock); |
208 | err = vnic_dev_deinit_done(enic->vdev, status); | 208 | err = vnic_dev_deinit_done(enic->vdev, status); |
209 | spin_unlock(&enic->devcmd_lock); | 209 | spin_unlock_bh(&enic->devcmd_lock); |
210 | 210 | ||
211 | return err; | 211 | return err; |
212 | } | 212 | } |
@@ -217,9 +217,9 @@ int enic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) | |||
217 | struct enic *enic = netdev_priv(netdev); | 217 | struct enic *enic = netdev_priv(netdev); |
218 | int err; | 218 | int err; |
219 | 219 | ||
220 | spin_lock(&enic->devcmd_lock); | 220 | spin_lock_bh(&enic->devcmd_lock); |
221 | err = enic_add_vlan(enic, vid); | 221 | err = enic_add_vlan(enic, vid); |
222 | spin_unlock(&enic->devcmd_lock); | 222 | spin_unlock_bh(&enic->devcmd_lock); |
223 | 223 | ||
224 | return err; | 224 | return err; |
225 | } | 225 | } |
@@ -230,9 +230,9 @@ int enic_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) | |||
230 | struct enic *enic = netdev_priv(netdev); | 230 | struct enic *enic = netdev_priv(netdev); |
231 | int err; | 231 | int err; |
232 | 232 | ||
233 | spin_lock(&enic->devcmd_lock); | 233 | spin_lock_bh(&enic->devcmd_lock); |
234 | err = enic_del_vlan(enic, vid); | 234 | err = enic_del_vlan(enic, vid); |
235 | spin_unlock(&enic->devcmd_lock); | 235 | spin_unlock_bh(&enic->devcmd_lock); |
236 | 236 | ||
237 | return err; | 237 | return err; |
238 | } | 238 | } |
@@ -241,9 +241,9 @@ int enic_dev_enable2(struct enic *enic, int active) | |||
241 | { | 241 | { |
242 | int err; | 242 | int err; |
243 | 243 | ||
244 | spin_lock(&enic->devcmd_lock); | 244 | spin_lock_bh(&enic->devcmd_lock); |
245 | err = vnic_dev_enable2(enic->vdev, active); | 245 | err = vnic_dev_enable2(enic->vdev, active); |
246 | spin_unlock(&enic->devcmd_lock); | 246 | spin_unlock_bh(&enic->devcmd_lock); |
247 | 247 | ||
248 | return err; | 248 | return err; |
249 | } | 249 | } |
@@ -252,9 +252,9 @@ int enic_dev_enable2_done(struct enic *enic, int *status) | |||
252 | { | 252 | { |
253 | int err; | 253 | int err; |
254 | 254 | ||
255 | spin_lock(&enic->devcmd_lock); | 255 | spin_lock_bh(&enic->devcmd_lock); |
256 | err = vnic_dev_enable2_done(enic->vdev, status); | 256 | err = vnic_dev_enable2_done(enic->vdev, status); |
257 | spin_unlock(&enic->devcmd_lock); | 257 | spin_unlock_bh(&enic->devcmd_lock); |
258 | 258 | ||
259 | return err; | 259 | return err; |
260 | } | 260 | } |
diff --git a/drivers/net/ethernet/cisco/enic/enic_dev.h b/drivers/net/ethernet/cisco/enic/enic_dev.h index 36ea1ab25f6a..10bb970b2f35 100644 --- a/drivers/net/ethernet/cisco/enic/enic_dev.h +++ b/drivers/net/ethernet/cisco/enic/enic_dev.h | |||
@@ -28,7 +28,7 @@ | |||
28 | */ | 28 | */ |
29 | #define ENIC_DEVCMD_PROXY_BY_INDEX(vf, err, enic, vnicdevcmdfn, ...) \ | 29 | #define ENIC_DEVCMD_PROXY_BY_INDEX(vf, err, enic, vnicdevcmdfn, ...) \ |
30 | do { \ | 30 | do { \ |
31 | spin_lock(&enic->devcmd_lock); \ | 31 | spin_lock_bh(&enic->devcmd_lock); \ |
32 | if (enic_is_valid_vf(enic, vf)) { \ | 32 | if (enic_is_valid_vf(enic, vf)) { \ |
33 | vnic_dev_cmd_proxy_by_index_start(enic->vdev, vf); \ | 33 | vnic_dev_cmd_proxy_by_index_start(enic->vdev, vf); \ |
34 | err = vnicdevcmdfn(enic->vdev, ##__VA_ARGS__); \ | 34 | err = vnicdevcmdfn(enic->vdev, ##__VA_ARGS__); \ |
@@ -36,7 +36,7 @@ | |||
36 | } else { \ | 36 | } else { \ |
37 | err = vnicdevcmdfn(enic->vdev, ##__VA_ARGS__); \ | 37 | err = vnicdevcmdfn(enic->vdev, ##__VA_ARGS__); \ |
38 | } \ | 38 | } \ |
39 | spin_unlock(&enic->devcmd_lock); \ | 39 | spin_unlock_bh(&enic->devcmd_lock); \ |
40 | } while (0) | 40 | } while (0) |
41 | 41 | ||
42 | int enic_dev_fw_info(struct enic *enic, struct vnic_devcmd_fw_info **fw_info); | 42 | int enic_dev_fw_info(struct enic *enic, struct vnic_devcmd_fw_info **fw_info); |
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index a302f1b3e8ff..5448df2d78c2 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -1465,7 +1465,7 @@ static int enic_dev_notify_set(struct enic *enic) | |||
1465 | { | 1465 | { |
1466 | int err; | 1466 | int err; |
1467 | 1467 | ||
1468 | spin_lock(&enic->devcmd_lock); | 1468 | spin_lock_bh(&enic->devcmd_lock); |
1469 | switch (vnic_dev_get_intr_mode(enic->vdev)) { | 1469 | switch (vnic_dev_get_intr_mode(enic->vdev)) { |
1470 | case VNIC_DEV_INTR_MODE_INTX: | 1470 | case VNIC_DEV_INTR_MODE_INTX: |
1471 | err = vnic_dev_notify_set(enic->vdev, | 1471 | err = vnic_dev_notify_set(enic->vdev, |
@@ -1479,7 +1479,7 @@ static int enic_dev_notify_set(struct enic *enic) | |||
1479 | err = vnic_dev_notify_set(enic->vdev, -1 /* no intr */); | 1479 | err = vnic_dev_notify_set(enic->vdev, -1 /* no intr */); |
1480 | break; | 1480 | break; |
1481 | } | 1481 | } |
1482 | spin_unlock(&enic->devcmd_lock); | 1482 | spin_unlock_bh(&enic->devcmd_lock); |
1483 | 1483 | ||
1484 | return err; | 1484 | return err; |
1485 | } | 1485 | } |
@@ -1804,11 +1804,11 @@ static int enic_set_rsskey(struct enic *enic) | |||
1804 | 1804 | ||
1805 | memcpy(rss_key_buf_va, &rss_key, sizeof(union vnic_rss_key)); | 1805 | memcpy(rss_key_buf_va, &rss_key, sizeof(union vnic_rss_key)); |
1806 | 1806 | ||
1807 | spin_lock(&enic->devcmd_lock); | 1807 | spin_lock_bh(&enic->devcmd_lock); |
1808 | err = enic_set_rss_key(enic, | 1808 | err = enic_set_rss_key(enic, |
1809 | rss_key_buf_pa, | 1809 | rss_key_buf_pa, |
1810 | sizeof(union vnic_rss_key)); | 1810 | sizeof(union vnic_rss_key)); |
1811 | spin_unlock(&enic->devcmd_lock); | 1811 | spin_unlock_bh(&enic->devcmd_lock); |
1812 | 1812 | ||
1813 | pci_free_consistent(enic->pdev, sizeof(union vnic_rss_key), | 1813 | pci_free_consistent(enic->pdev, sizeof(union vnic_rss_key), |
1814 | rss_key_buf_va, rss_key_buf_pa); | 1814 | rss_key_buf_va, rss_key_buf_pa); |
@@ -1831,11 +1831,11 @@ static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits) | |||
1831 | for (i = 0; i < (1 << rss_hash_bits); i++) | 1831 | for (i = 0; i < (1 << rss_hash_bits); i++) |
1832 | (*rss_cpu_buf_va).cpu[i/4].b[i%4] = i % enic->rq_count; | 1832 | (*rss_cpu_buf_va).cpu[i/4].b[i%4] = i % enic->rq_count; |
1833 | 1833 | ||
1834 | spin_lock(&enic->devcmd_lock); | 1834 | spin_lock_bh(&enic->devcmd_lock); |
1835 | err = enic_set_rss_cpu(enic, | 1835 | err = enic_set_rss_cpu(enic, |
1836 | rss_cpu_buf_pa, | 1836 | rss_cpu_buf_pa, |
1837 | sizeof(union vnic_rss_cpu)); | 1837 | sizeof(union vnic_rss_cpu)); |
1838 | spin_unlock(&enic->devcmd_lock); | 1838 | spin_unlock_bh(&enic->devcmd_lock); |
1839 | 1839 | ||
1840 | pci_free_consistent(enic->pdev, sizeof(union vnic_rss_cpu), | 1840 | pci_free_consistent(enic->pdev, sizeof(union vnic_rss_cpu), |
1841 | rss_cpu_buf_va, rss_cpu_buf_pa); | 1841 | rss_cpu_buf_va, rss_cpu_buf_pa); |
@@ -1853,13 +1853,13 @@ static int enic_set_niccfg(struct enic *enic, u8 rss_default_cpu, | |||
1853 | /* Enable VLAN tag stripping. | 1853 | /* Enable VLAN tag stripping. |
1854 | */ | 1854 | */ |
1855 | 1855 | ||
1856 | spin_lock(&enic->devcmd_lock); | 1856 | spin_lock_bh(&enic->devcmd_lock); |
1857 | err = enic_set_nic_cfg(enic, | 1857 | err = enic_set_nic_cfg(enic, |
1858 | rss_default_cpu, rss_hash_type, | 1858 | rss_default_cpu, rss_hash_type, |
1859 | rss_hash_bits, rss_base_cpu, | 1859 | rss_hash_bits, rss_base_cpu, |
1860 | rss_enable, tso_ipid_split_en, | 1860 | rss_enable, tso_ipid_split_en, |
1861 | ig_vlan_strip_en); | 1861 | ig_vlan_strip_en); |
1862 | spin_unlock(&enic->devcmd_lock); | 1862 | spin_unlock_bh(&enic->devcmd_lock); |
1863 | 1863 | ||
1864 | return err; | 1864 | return err; |
1865 | } | 1865 | } |