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
This commit is contained in:
Коммит
37cf95162a
|
@ -239,13 +239,19 @@ void bnx2x_int_disable(struct bnx2x *bp);
|
|||
* FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X
|
||||
*
|
||||
*/
|
||||
/* iSCSI L2 */
|
||||
#define BNX2X_ISCSI_ETH_CL_ID_IDX 1
|
||||
#define BNX2X_ISCSI_ETH_CID 49
|
||||
enum {
|
||||
BNX2X_ISCSI_ETH_CL_ID_IDX,
|
||||
BNX2X_FCOE_ETH_CL_ID_IDX,
|
||||
BNX2X_MAX_CNIC_ETH_CL_ID_IDX,
|
||||
};
|
||||
|
||||
/* FCoE L2 */
|
||||
#define BNX2X_FCOE_ETH_CL_ID_IDX 2
|
||||
#define BNX2X_FCOE_ETH_CID 50
|
||||
#define BNX2X_CNIC_START_ETH_CID 48
|
||||
enum {
|
||||
/* iSCSI L2 */
|
||||
BNX2X_ISCSI_ETH_CID = BNX2X_CNIC_START_ETH_CID,
|
||||
/* FCoE L2 */
|
||||
BNX2X_FCOE_ETH_CID,
|
||||
};
|
||||
|
||||
/** Additional rings budgeting */
|
||||
#ifdef BCM_CNIC
|
||||
|
|
|
@ -1297,7 +1297,7 @@ static inline void bnx2x_init_txdata(struct bnx2x *bp,
|
|||
static inline u8 bnx2x_cnic_eth_cl_id(struct bnx2x *bp, u8 cl_idx)
|
||||
{
|
||||
return bp->cnic_base_cl_id + cl_idx +
|
||||
(bp->pf_num >> 1) * NON_ETH_CONTEXT_USE;
|
||||
(bp->pf_num >> 1) * BNX2X_MAX_CNIC_ETH_CL_ID_IDX;
|
||||
}
|
||||
|
||||
static inline u8 bnx2x_cnic_fw_sb_id(struct bnx2x *bp)
|
||||
|
|
|
@ -261,11 +261,13 @@ static netdev_tx_t mscan_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
void __iomem *data = ®s->tx.dsr1_0;
|
||||
u16 *payload = (u16 *)frame->data;
|
||||
|
||||
/* It is safe to write into dsr[dlc+1] */
|
||||
for (i = 0; i < (frame->can_dlc + 1) / 2; i++) {
|
||||
for (i = 0; i < frame->can_dlc / 2; i++) {
|
||||
out_be16(data, *payload++);
|
||||
data += 2 + _MSCAN_RESERVED_DSR_SIZE;
|
||||
}
|
||||
/* write remaining byte if necessary */
|
||||
if (frame->can_dlc & 1)
|
||||
out_8(data, frame->data[frame->can_dlc - 1]);
|
||||
}
|
||||
|
||||
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)
|
|||
void __iomem *data = ®s->rx.dsr1_0;
|
||||
u16 *payload = (u16 *)frame->data;
|
||||
|
||||
for (i = 0; i < (frame->can_dlc + 1) / 2; i++) {
|
||||
for (i = 0; i < frame->can_dlc / 2; i++) {
|
||||
*payload++ = in_be16(data);
|
||||
data += 2 + _MSCAN_RESERVED_DSR_SIZE;
|
||||
}
|
||||
/* read remaining byte if necessary */
|
||||
if (frame->can_dlc & 1)
|
||||
frame->data[frame->can_dlc - 1] = in_8(data);
|
||||
}
|
||||
|
||||
out_8(®s->canrflg, MSCAN_RXF);
|
||||
|
|
|
@ -172,7 +172,7 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv,
|
|||
memset(ring->buf, 0, ring->buf_size);
|
||||
|
||||
ring->qp_state = MLX4_QP_STATE_RST;
|
||||
ring->doorbell_qpn = swab32(ring->qp.qpn << 8);
|
||||
ring->doorbell_qpn = ring->qp.qpn << 8;
|
||||
|
||||
mlx4_en_fill_qp_context(priv, ring->size, ring->stride, 1, 0, ring->qpn,
|
||||
ring->cqn, &ring->context);
|
||||
|
@ -791,7 +791,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
skb_orphan(skb);
|
||||
|
||||
if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && !vlan_tag) {
|
||||
*(u32 *) (&tx_desc->ctrl.vlan_tag) |= ring->doorbell_qpn;
|
||||
*(__be32 *) (&tx_desc->ctrl.vlan_tag) |= cpu_to_be32(ring->doorbell_qpn);
|
||||
op_own |= htonl((bf_index & 0xffff) << 8);
|
||||
/* Ensure new descirptor hits memory
|
||||
* 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)
|
|||
wmb();
|
||||
tx_desc->ctrl.owner_opcode = op_own;
|
||||
wmb();
|
||||
writel(ring->doorbell_qpn, ring->bf.uar->map + MLX4_SEND_DOORBELL);
|
||||
iowrite32be(ring->doorbell_qpn, ring->bf.uar->map + MLX4_SEND_DOORBELL);
|
||||
}
|
||||
|
||||
/* Poll CQ here */
|
||||
|
|
|
@ -875,6 +875,7 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
|
|||
skb_reset_transport_header(skb);
|
||||
__skb_push(skb, skb_gro_offset(skb));
|
||||
|
||||
ops = rcu_dereference(inet6_protos[proto]);
|
||||
if (!ops || !ops->gro_receive)
|
||||
goto out_unlock;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче