diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-13 02:25:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-13 02:25:45 -0400 |
commit | 37cf95162af4036b4198756a590aab8126fa2ce4 (patch) | |
tree | 373166854c78072bda9f7c834bef819e92a56fc3 /drivers | |
parent | 1d1136012163ab5e33a97f9779af269cf4049cb9 (diff) | |
parent | a3a4bfde8a271df7ee56fcf31b8d907d50e7f216 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
mscan: too much data copied to CAN frame due to 16 bit accesses
gro: refetch inet6_protos[] after pulling ext headers
bnx2x: fix cl_id allocation for non-eth clients for NPAR mode
mlx4_en: fix endianness with blue frame support
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 18 | ||||
-rw-r--r-- | drivers/net/bnx2x/bnx2x_cmn.h | 2 | ||||
-rw-r--r-- | drivers/net/can/mscan/mscan.c | 11 | ||||
-rw-r--r-- | drivers/net/mlx4/en_tx.c | 6 |
4 files changed, 24 insertions, 13 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index e46df5331c55..9a7eb3b36cf3 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
@@ -239,13 +239,19 @@ void bnx2x_int_disable(struct bnx2x *bp); | |||
239 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X | 239 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X |
240 | * | 240 | * |
241 | */ | 241 | */ |
242 | /* iSCSI L2 */ | 242 | enum { |
243 | #define BNX2X_ISCSI_ETH_CL_ID_IDX 1 | 243 | BNX2X_ISCSI_ETH_CL_ID_IDX, |
244 | #define BNX2X_ISCSI_ETH_CID 49 | 244 | BNX2X_FCOE_ETH_CL_ID_IDX, |
245 | BNX2X_MAX_CNIC_ETH_CL_ID_IDX, | ||
246 | }; | ||
245 | 247 | ||
246 | /* FCoE L2 */ | 248 | #define BNX2X_CNIC_START_ETH_CID 48 |
247 | #define BNX2X_FCOE_ETH_CL_ID_IDX 2 | 249 | enum { |
248 | #define BNX2X_FCOE_ETH_CID 50 | 250 | /* iSCSI L2 */ |
251 | BNX2X_ISCSI_ETH_CID = BNX2X_CNIC_START_ETH_CID, | ||
252 | /* FCoE L2 */ | ||
253 | BNX2X_FCOE_ETH_CID, | ||
254 | }; | ||
249 | 255 | ||
250 | /** Additional rings budgeting */ | 256 | /** Additional rings budgeting */ |
251 | #ifdef BCM_CNIC | 257 | #ifdef BCM_CNIC |
diff --git a/drivers/net/bnx2x/bnx2x_cmn.h b/drivers/net/bnx2x/bnx2x_cmn.h index 223bfeebc597..2dc1199239d0 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.h +++ b/drivers/net/bnx2x/bnx2x_cmn.h | |||
@@ -1297,7 +1297,7 @@ static inline void bnx2x_init_txdata(struct bnx2x *bp, | |||
1297 | static inline u8 bnx2x_cnic_eth_cl_id(struct bnx2x *bp, u8 cl_idx) | 1297 | static inline u8 bnx2x_cnic_eth_cl_id(struct bnx2x *bp, u8 cl_idx) |
1298 | { | 1298 | { |
1299 | return bp->cnic_base_cl_id + cl_idx + | 1299 | return bp->cnic_base_cl_id + cl_idx + |
1300 | (bp->pf_num >> 1) * NON_ETH_CONTEXT_USE; | 1300 | (bp->pf_num >> 1) * BNX2X_MAX_CNIC_ETH_CL_ID_IDX; |
1301 | } | 1301 | } |
1302 | 1302 | ||
1303 | static inline u8 bnx2x_cnic_fw_sb_id(struct bnx2x *bp) | 1303 | static inline u8 bnx2x_cnic_fw_sb_id(struct bnx2x *bp) |
diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c index 92feac68b66e..4cc6f44c2ba2 100644 --- a/drivers/net/can/mscan/mscan.c +++ b/drivers/net/can/mscan/mscan.c | |||
@@ -261,11 +261,13 @@ static netdev_tx_t mscan_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
261 | void __iomem *data = ®s->tx.dsr1_0; | 261 | void __iomem *data = ®s->tx.dsr1_0; |
262 | u16 *payload = (u16 *)frame->data; | 262 | u16 *payload = (u16 *)frame->data; |
263 | 263 | ||
264 | /* It is safe to write into dsr[dlc+1] */ | 264 | for (i = 0; i < frame->can_dlc / 2; i++) { |
265 | for (i = 0; i < (frame->can_dlc + 1) / 2; i++) { | ||
266 | out_be16(data, *payload++); | 265 | out_be16(data, *payload++); |
267 | data += 2 + _MSCAN_RESERVED_DSR_SIZE; | 266 | data += 2 + _MSCAN_RESERVED_DSR_SIZE; |
268 | } | 267 | } |
268 | /* write remaining byte if necessary */ | ||
269 | if (frame->can_dlc & 1) | ||
270 | out_8(data, frame->data[frame->can_dlc - 1]); | ||
269 | } | 271 | } |
270 | 272 | ||
271 | out_8(®s->tx.dlr, frame->can_dlc); | 273 | out_8(®s->tx.dlr, frame->can_dlc); |
@@ -330,10 +332,13 @@ static void mscan_get_rx_frame(struct net_device *dev, struct can_frame *frame) | |||
330 | void __iomem *data = ®s->rx.dsr1_0; | 332 | void __iomem *data = ®s->rx.dsr1_0; |
331 | u16 *payload = (u16 *)frame->data; | 333 | u16 *payload = (u16 *)frame->data; |
332 | 334 | ||
333 | for (i = 0; i < (frame->can_dlc + 1) / 2; i++) { | 335 | for (i = 0; i < frame->can_dlc / 2; i++) { |
334 | *payload++ = in_be16(data); | 336 | *payload++ = in_be16(data); |
335 | data += 2 + _MSCAN_RESERVED_DSR_SIZE; | 337 | data += 2 + _MSCAN_RESERVED_DSR_SIZE; |
336 | } | 338 | } |
339 | /* read remaining byte if necessary */ | ||
340 | if (frame->can_dlc & 1) | ||
341 | frame->data[frame->can_dlc - 1] = in_8(data); | ||
337 | } | 342 | } |
338 | 343 | ||
339 | out_8(®s->canrflg, MSCAN_RXF); | 344 | out_8(®s->canrflg, MSCAN_RXF); |
diff --git a/drivers/net/mlx4/en_tx.c b/drivers/net/mlx4/en_tx.c index 6e03de034ac7..f76ab6bf3096 100644 --- a/drivers/net/mlx4/en_tx.c +++ b/drivers/net/mlx4/en_tx.c | |||
@@ -172,7 +172,7 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv, | |||
172 | memset(ring->buf, 0, ring->buf_size); | 172 | memset(ring->buf, 0, ring->buf_size); |
173 | 173 | ||
174 | ring->qp_state = MLX4_QP_STATE_RST; | 174 | ring->qp_state = MLX4_QP_STATE_RST; |
175 | ring->doorbell_qpn = swab32(ring->qp.qpn << 8); | 175 | ring->doorbell_qpn = ring->qp.qpn << 8; |
176 | 176 | ||
177 | mlx4_en_fill_qp_context(priv, ring->size, ring->stride, 1, 0, ring->qpn, | 177 | mlx4_en_fill_qp_context(priv, ring->size, ring->stride, 1, 0, ring->qpn, |
178 | ring->cqn, &ring->context); | 178 | ring->cqn, &ring->context); |
@@ -791,7 +791,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) | |||
791 | skb_orphan(skb); | 791 | skb_orphan(skb); |
792 | 792 | ||
793 | if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag) { | 793 | if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag) { |
794 | *(u32 *) (&tx_desc->ctrl.vlan_tag) |= ring->doorbell_qpn; | 794 | *(__be32 *) (&tx_desc->ctrl.vlan_tag) |= cpu_to_be32(ring->doorbell_qpn); |
795 | op_own |= htonl((bf_index & 0xffff) << 8); | 795 | op_own |= htonl((bf_index & 0xffff) << 8); |
796 | /* Ensure new descirptor hits memory | 796 | /* Ensure new descirptor hits memory |
797 | * before setting ownership of this descriptor to HW */ | 797 | * before setting ownership of this descriptor to HW */ |
@@ -812,7 +812,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) | |||
812 | wmb(); | 812 | wmb(); |
813 | tx_desc->ctrl.owner_opcode = op_own; | 813 | tx_desc->ctrl.owner_opcode = op_own; |
814 | wmb(); | 814 | wmb(); |
815 | writel(ring->doorbell_qpn, ring->bf.uar->map + MLX4_SEND_DOORBELL); | 815 | iowrite32be(ring->doorbell_qpn, ring->bf.uar->map + MLX4_SEND_DOORBELL); |
816 | } | 816 | } |
817 | 817 | ||
818 | /* Poll CQ here */ | 818 | /* Poll CQ here */ |