* [PATCH 2/2] Report correct tx-usecs-irq value when driver is loaded with separate_tx_channels set
From: Ripduman Sohan @ 2011-08-31 9:38 UTC (permalink / raw)
To: linux-net-drivers, shodgson, bhutchings; +Cc: netdev, Ripduman Sohan
If the driver is loaded with the separate_tx_channels parameter set it
incorrectly reports TX moderation as 0 usecs regardless of the current
value. This patch fixes this oversight.
---
drivers/net/sfc/ethtool.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c
index 0a52447..dac0a84 100644
--- a/drivers/net/sfc/ethtool.c
+++ b/drivers/net/sfc/ethtool.c
@@ -600,11 +600,8 @@ static int efx_ethtool_get_coalesce(struct net_device *net_dev,
if (!efx_channel_has_tx_queues(channel))
continue;
if (channel->irq_moderation < coalesce->tx_coalesce_usecs_irq) {
- if (channel->channel < efx->n_rx_channels)
- coalesce->tx_coalesce_usecs_irq =
- channel->irq_moderation;
- else
- coalesce->tx_coalesce_usecs_irq = 0;
+ coalesce->tx_coalesce_usecs_irq =
+ channel->irq_moderation;
}
}
--
1.7.1
^ permalink raw reply related
* [PATCH 1/1] net/can/af_can.c: Change del_timer to del_timer_sync
From: Rajan Aggarwal @ 2011-08-31 9:57 UTC (permalink / raw)
To: Oliver Hartkopp, Urs Thuermann, David S. Miller; +Cc: netdev
From: Rajan Aggarwal <Rajan Aggarwal rajan.aggarwal85@gmail.com>
This is important for SMP platform to check if timer function is
executing on other CPU with deleting the timer.
Signed-off-by: Rajan Aggarwal <Rajan Aggarwal rajan.aggarwal85@gmail.com>
---
net/can/af_can.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/can/af_can.c b/net/can/af_can.c
index 8ce926d..9b0c32a 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -857,7 +857,7 @@ static __exit void can_exit(void)
struct net_device *dev;
if (stats_timer)
- del_timer(&can_stattimer);
+ del_timer_sync(&can_stattimer);
can_remove_proc();
--
1.7.4.1
^ permalink raw reply related
* Re: [PATCH 2/7] bnx2x: remove the 'leading' arguments
From: Vlad Zolotarov @ 2011-08-31 9:57 UTC (permalink / raw)
To: Michal Schmidt; +Cc: netdev@vger.kernel.org, Dmitry Kravkov, Eilon Greenstein
In-Reply-To: <1314714646-3642-3-git-send-email-mschmidt@redhat.com>
On Tuesday 30 August 2011 17:30:41 Michal Schmidt wrote:
> Whether a queue is leading can be deduced from its index.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
> ---
> drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 1 +
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 2 +-
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 4 +---
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 21
> +++++++++------------ 4 files changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index 735e491..c0d2d9c
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> @@ -531,6 +531,7 @@ struct bnx2x_fastpath {
>
> #define IS_ETH_FP(fp) (fp->index < \
> BNX2X_NUM_ETH_QUEUES(fp->bp))
> +#define IS_LEADING_FP(fp) ((fp)->index == 0)
> #ifdef BCM_CNIC
> #define IS_FCOE_FP(fp) (fp->index == FCOE_IDX)
> #define IS_FCOE_IDX(idx) ((idx) == FCOE_IDX)
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 5c3eb17..448e301
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> @@ -1881,7 +1881,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
> #endif
>
> for_each_nondefault_queue(bp, i) {
> - rc = bnx2x_setup_queue(bp, &bp->fp[i], 0);
> + rc = bnx2x_setup_queue(bp, &bp->fp[i]);
> if (rc)
> LOAD_ERROR_EXIT(bp, load_error4);
> }
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h index 5b1f9b5..54d50b7
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
> @@ -109,11 +109,9 @@ void bnx2x__init_func_obj(struct bnx2x *bp);
> *
> * @bp: driver handle
> * @fp: pointer to the fastpath structure
> - * @leading: boolean
> *
> */
> -int bnx2x_setup_queue(struct bnx2x *bp, struct bnx2x_fastpath *fp,
> - bool leading);
> +int bnx2x_setup_queue(struct bnx2x *bp, struct bnx2x_fastpath *fp);
>
> /**
> * bnx2x_setup_leading - bring up a leading eth queue.
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index e7b584b..64314f7
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> @@ -2697,9 +2697,8 @@ static inline unsigned long
> bnx2x_get_common_flags(struct bnx2x *bp, return flags;
> }
>
> -static inline unsigned long bnx2x_get_q_flags(struct bnx2x *bp,
> - struct bnx2x_fastpath *fp,
> - bool leading)
> +static unsigned long bnx2x_get_q_flags(struct bnx2x *bp,
> + struct bnx2x_fastpath *fp)
> {
> unsigned long flags = 0;
>
> @@ -2715,7 +2714,7 @@ static inline unsigned long bnx2x_get_q_flags(struct
> bnx2x *bp, __set_bit(BNX2X_Q_FLG_TPA_IPV6, &flags);
> }
>
> - if (leading) {
> + if (IS_LEADING_FP(fp)) {
> __set_bit(BNX2X_Q_FLG_LEADING_RSS, &flags);
> __set_bit(BNX2X_Q_FLG_MCAST, &flags);
> }
> @@ -6966,7 +6965,7 @@ int bnx2x_set_eth_mac(struct bnx2x *bp, bool set)
>
> int bnx2x_setup_leading(struct bnx2x *bp)
> {
> - return bnx2x_setup_queue(bp, &bp->fp[0], 1);
> + return bnx2x_setup_queue(bp, &bp->fp[0]);
> }
>
> /**
> @@ -7177,10 +7176,10 @@ static inline void bnx2x_pf_q_prep_init(struct
> bnx2x *bp, &bp->context.vcxt[fp->txdata[cos].cid].eth;
> }
>
> -int bnx2x_setup_tx_only(struct bnx2x *bp, struct bnx2x_fastpath *fp,
> +static int bnx2x_setup_tx_only(struct bnx2x *bp, struct bnx2x_fastpath
> *fp, struct bnx2x_queue_state_params *q_params,
> struct bnx2x_queue_setup_tx_only_params
*tx_only_params,
> - int tx_index, bool leading)
> + int tx_index)
> {
> memset(tx_only_params, 0, sizeof(*tx_only_params));
>
> @@ -7216,14 +7215,12 @@ int bnx2x_setup_tx_only(struct bnx2x *bp, struct
> bnx2x_fastpath *fp, *
> * @bp: driver handle
> * @fp: pointer to fastpath
> - * @leading: is leading
> *
> * This function performs 2 steps in a Queue state machine
> * actually: 1) RESET->INIT 2) INIT->SETUP
> */
>
> -int bnx2x_setup_queue(struct bnx2x *bp, struct bnx2x_fastpath *fp,
> - bool leading)
> +int bnx2x_setup_queue(struct bnx2x *bp, struct bnx2x_fastpath *fp)
> {
> struct bnx2x_queue_state_params q_params = {0};
> struct bnx2x_queue_setup_params *setup_params =
> @@ -7264,7 +7261,7 @@ int bnx2x_setup_queue(struct bnx2x *bp, struct
> bnx2x_fastpath *fp, memset(setup_params, 0, sizeof(*setup_params));
>
> /* Set QUEUE flags */
> - setup_params->flags = bnx2x_get_q_flags(bp, fp, leading);
> + setup_params->flags = bnx2x_get_q_flags(bp, fp);
>
> /* Set general SETUP parameters */
> bnx2x_pf_q_prep_general(bp, fp, &setup_params->gen_params,
> @@ -7293,7 +7290,7 @@ int bnx2x_setup_queue(struct bnx2x *bp, struct
> bnx2x_fastpath *fp,
>
> /* prepare and send tx-only ramrod*/
> rc = bnx2x_setup_tx_only(bp, fp, &q_params,
> - tx_only_params, tx_index, leading);
> + tx_only_params, tx_index);
> if (rc) {
> BNX2X_ERR("Queue(%d.%d) TX_ONLY_SETUP failed\n",
> fp->index, tx_index);
NACK
Removing this parameter would decrese the flexability of our code.
For instance we are using this function in our KVM code, which is under the
development now, where we define a few RSS groups on the same PF and then
"leading" fp may have an index different from 0.
It's a shame to remove this code now in order to submit it back later...
thanks,
vlad
^ permalink raw reply
* Re: [PATCH 1/7] bnx2x: remove unused fields in struct bnx2x_func_init_params
From: Vlad Zolotarov @ 2011-08-31 10:07 UTC (permalink / raw)
To: Michal Schmidt; +Cc: netdev@vger.kernel.org, Dmitry Kravkov, Eilon Greenstein
In-Reply-To: <1314714646-3642-2-git-send-email-mschmidt@redhat.com>
On Tuesday 30 August 2011 17:30:40 Michal Schmidt wrote:
> func_flgs is not used for anything. The only flag that's ever checked
> (FUNC_FLG_SPQ) is always set. The other flags are never read.
>
> fw_stat_map is not used at all.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
> ---
> drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 15 ++-------------
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 18 +++---------------
> 2 files changed, 5 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index f127768..735e491
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> @@ -1490,24 +1490,13 @@ extern int num_queues;
> #define RSS_IPV6_TCP_CAP_MASK
\
> TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY
>
> -/* func init flags */
> -#define FUNC_FLG_RSS 0x0001
> -#define FUNC_FLG_STATS 0x0002
> -/* removed FUNC_FLG_UNMATCHED 0x0004 */
> -#define FUNC_FLG_TPA 0x0008
> -#define FUNC_FLG_SPQ 0x0010
> -#define FUNC_FLG_LEADING 0x0020 /* PF only */
> -
> -
> struct bnx2x_func_init_params {
> /* dma */
> - dma_addr_t fw_stat_map; /* valid iff FUNC_FLG_STATS */
> - dma_addr_t spq_map; /* valid iff FUNC_FLG_SPQ */
> + dma_addr_t spq_map;
>
> - u16 func_flgs;
> u16 func_id; /* abs fid */
> u16 pf_id;
> - u16 spq_prod; /* valid iff FUNC_FLG_SPQ */
> + u16 spq_prod;
> };
>
> #define for_each_eth_queue(bp, var) \
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 85dd294..e7b584b
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> @@ -2661,11 +2661,9 @@ void bnx2x_func_init(struct bnx2x *bp, struct
> bnx2x_func_init_params *p) storm_memset_func_en(bp, p->func_id, 1);
>
> /* spq */
> - if (p->func_flgs & FUNC_FLG_SPQ) {
> - storm_memset_spq_addr(bp, p->spq_map, p->func_id);
> - REG_WR(bp, XSEM_REG_FAST_MEMORY +
> - XSTORM_SPQ_PROD_OFFSET(p->func_id), p->spq_prod);
> - }
> + storm_memset_spq_addr(bp, p->spq_map, p->func_id);
> + REG_WR(bp, XSEM_REG_FAST_MEMORY +
> + XSTORM_SPQ_PROD_OFFSET(p->func_id), p->spq_prod);
> }
>
> /**
> @@ -2838,7 +2836,6 @@ static void bnx2x_pf_init(struct bnx2x *bp)
> {
> struct bnx2x_func_init_params func_init = {0};
> struct event_ring_data eq_data = { {0} };
> - u16 flags;
>
> if (!CHIP_IS_E1x(bp)) {
> /* reset IGU PF statistics: MSIX + ATTN */
> @@ -2855,15 +2852,6 @@ static void bnx2x_pf_init(struct bnx2x *bp)
> BP_FUNC(bp) : BP_VN(bp))*4, 0);
> }
>
> - /* function setup flags */
> - flags = (FUNC_FLG_STATS | FUNC_FLG_LEADING | FUNC_FLG_SPQ);
> -
> - /* This flag is relevant for E1x only.
> - * E2 doesn't have a TPA configuration in a function level.
> - */
> - flags |= (bp->flags & TPA_ENABLE_FLAG) ? FUNC_FLG_TPA : 0;
> -
> - func_init.func_flgs = flags;
> func_init.pf_id = BP_FUNC(bp);
> func_init.func_id = BP_FUNC(bp);
> func_init.spq_map = bp->spq_mapping;
Acked-by: Vladislav Zolotarov <vladz@broadcom.com>
^ permalink raw reply
* Re: [PATCH 06/24] netfilter: Remove unnecessary OOM logging messages
From: Patrick McHardy @ 2011-08-31 10:13 UTC (permalink / raw)
To: David Miller
Cc: joe, bart.de.schuymer, wensong, horms, ja, shemminger, kuznet,
jmorris, yoshfuji, netfilter-devel, netfilter, coreteam, bridge,
netdev, linux-kernel, lvs-devel
In-Reply-To: <20110830.135502.179848097213434762.davem@davemloft.net>
On 30.08.2011 19:55, David Miller wrote:
> From: Patrick McHardy <kaber@trash.net>
> Date: Tue, 30 Aug 2011 14:46:34 +0200
>
>> On 29.08.2011 23:17, Joe Perches wrote:
>>> Removing unnecessary messages saves code and text.
>>>
>>> Site specific OOM messages are duplications of a generic MM
>>> out of memory message and aren't really useful, so just
>>> delete them.
>>
>> Looks good to me. Do you want me to apply this patch or are you
>> intending to have the entire series go through Dave?
>
> I'm happy with subsystem folks taking things in if they want, the
> B.A.T.M.A.N. guys did this earlier today for example.
OK, thanks.
Applied after fixing up some minor rejects in nf_nat_snmp_basic.c,
thanks Joe.
^ permalink raw reply
* Re: [PATCH 4/7] bnx2x: simplify TPA sanity check
From: Vlad Zolotarov @ 2011-08-31 10:22 UTC (permalink / raw)
To: Michal Schmidt; +Cc: netdev@vger.kernel.org, Dmitry Kravkov, Eilon Greenstein
In-Reply-To: <1314714646-3642-5-git-send-email-mschmidt@redhat.com>
On Tuesday 30 August 2011 17:30:43 Michal Schmidt wrote:
> In the TPA branch we already know the CQE type is either START or STOP.
> No need to test for that. Even if the type were to differ, we wouldn't
> want to suppress the error message.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
> ---
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 4 +---
> 1 files changed, 1 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index f1fea58..fe5be0c
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> @@ -634,9 +634,7 @@ int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
> if (!CQE_TYPE_FAST(cqe_fp_type)) {
> #ifdef BNX2X_STOP_ON_ERROR
> /* sanity check */
> - if (fp->disable_tpa &&
> - (CQE_TYPE_START(cqe_fp_type) ||
> - CQE_TYPE_STOP(cqe_fp_type)))
> + if (fp->disable_tpa)
> BNX2X_ERR("START/STOP packet while "
> "disable_tpa type %x\n",
> CQE_TYPE(cqe_fp_type));
Acked-by: Vladislav Zolotarov <vladz@broadcom.com>
^ permalink raw reply
* Re: [PATCH 3/7] bnx2x: decrease indentation in bnx2x_rx_int()
From: Vlad Zolotarov @ 2011-08-31 10:33 UTC (permalink / raw)
To: Michal Schmidt; +Cc: netdev@vger.kernel.org, Dmitry Kravkov, Eilon Greenstein
In-Reply-To: <1314714646-3642-4-git-send-email-mschmidt@redhat.com>
On Tuesday 30 August 2011 17:30:42 Michal Schmidt wrote:
> For better readability decrease the indentation in bnx2x_rx_int().
> 'else' is unnecessary when the positive branch ends with a 'goto'.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Acked-by: Dmitry Kravkov <dmitry@broadcom.com>
> ---
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 194
> +++++++++++------------ 1 files changed, 92 insertions(+), 102
> deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 448e301..f1fea58
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> @@ -624,135 +624,125 @@ int bnx2x_rx_int(struct bnx2x_fastpath *fp, int
> budget) if (unlikely(CQE_TYPE_SLOW(cqe_fp_type))) {
> bnx2x_sp_event(fp, cqe);
> goto next_cqe;
> + }
>
> /* this is an rx packet */
> - } else {
> - rx_buf = &fp->rx_buf_ring[bd_cons];
> - skb = rx_buf->skb;
> - prefetch(skb);
> + rx_buf = &fp->rx_buf_ring[bd_cons];
> + skb = rx_buf->skb;
> + prefetch(skb);
>
> - if (!CQE_TYPE_FAST(cqe_fp_type)) {
> + if (!CQE_TYPE_FAST(cqe_fp_type)) {
> #ifdef BNX2X_STOP_ON_ERROR
> - /* sanity check */
> - if (fp->disable_tpa &&
> - (CQE_TYPE_START(cqe_fp_type) ||
> - CQE_TYPE_STOP(cqe_fp_type)))
> - BNX2X_ERR("START/STOP packet while "
> - "disable_tpa type %x\n",
> - CQE_TYPE(cqe_fp_type));
> + /* sanity check */
> + if (fp->disable_tpa &&
> + (CQE_TYPE_START(cqe_fp_type) ||
> + CQE_TYPE_STOP(cqe_fp_type)))
> + BNX2X_ERR("START/STOP packet while "
> + "disable_tpa type %x\n",
> + CQE_TYPE(cqe_fp_type));
> #endif
>
> - if (CQE_TYPE_START(cqe_fp_type)) {
> - u16 queue = cqe_fp->queue_index;
> - DP(NETIF_MSG_RX_STATUS,
> - "calling tpa_start on queue %d\n",
> - queue);
> + if (CQE_TYPE_START(cqe_fp_type)) {
> + u16 queue = cqe_fp->queue_index;
> + DP(NETIF_MSG_RX_STATUS,
> + "calling tpa_start on queue %d\n", queue);
>
> - bnx2x_tpa_start(fp, queue, skb,
> - bd_cons, bd_prod,
> - cqe_fp);
> + bnx2x_tpa_start(fp, queue, skb,
> + bd_cons, bd_prod, cqe_fp);
>
> - /* Set Toeplitz hash for LRO skb */
> - bnx2x_set_skb_rxhash(bp, cqe, skb);
> + /* Set Toeplitz hash for LRO skb */
> + bnx2x_set_skb_rxhash(bp, cqe, skb);
>
> - goto next_rx;
> + goto next_rx;
>
> - } else {
> - u16 queue =
> - cqe->end_agg_cqe.queue_index;
> - DP(NETIF_MSG_RX_STATUS,
> - "calling tpa_stop on queue %d\n",
> - queue);
> + } else {
> + u16 queue =
> + cqe->end_agg_cqe.queue_index;
> + DP(NETIF_MSG_RX_STATUS,
> + "calling tpa_stop on queue %d\n", queue);
>
> - bnx2x_tpa_stop(bp, fp, queue,
> - &cqe->end_agg_cqe,
> - comp_ring_cons);
> + bnx2x_tpa_stop(bp, fp, queue, &cqe-
>end_agg_cqe,
> + comp_ring_cons);
> #ifdef BNX2X_STOP_ON_ERROR
> - if (bp->panic)
> - return 0;
> + if (bp->panic)
> + return 0;
> #endif
>
> - bnx2x_update_sge_prod(fp, cqe_fp);
> - goto next_cqe;
> - }
> + bnx2x_update_sge_prod(fp, cqe_fp);
> + goto next_cqe;
> }
> - /* non TPA */
> - len = le16_to_cpu(cqe_fp->pkt_len);
> - pad = cqe_fp->placement_offset;
> - dma_sync_single_for_cpu(&bp->pdev->dev,
> + }
> + /* non TPA */
> + len = le16_to_cpu(cqe_fp->pkt_len);
> + pad = cqe_fp->placement_offset;
> + dma_sync_single_for_cpu(&bp->pdev->dev,
> dma_unmap_addr(rx_buf, mapping),
> - pad + RX_COPY_THRESH,
> - DMA_FROM_DEVICE);
> - prefetch(((char *)(skb)) + L1_CACHE_BYTES);
> + pad + RX_COPY_THRESH,
DMA_FROM_DEVICE);
> + prefetch(((char *)(skb)) + L1_CACHE_BYTES);
>
> - /* is this an error packet? */
> - if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
> + /* is this an error packet? */
> + if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
> + DP(NETIF_MSG_RX_ERR, "ERROR flags %x rx packet
%u\n",
> + cqe_fp_flags, sw_comp_cons);
> + fp->eth_q_stats.rx_err_discard_pkt++;
> + goto reuse_rx;
> + }
> +
> + /*
> + * Since we don't have a jumbo ring,
> + * copy small packets if mtu > 1500
> + */
> + if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) &&
> + (len <= RX_COPY_THRESH)) {
> + struct sk_buff *new_skb;
> +
> + new_skb = netdev_alloc_skb(bp->dev, len + pad);
> + if (new_skb == NULL) {
> DP(NETIF_MSG_RX_ERR,
> - "ERROR flags %x rx packet %u\n",
> - cqe_fp_flags, sw_comp_cons);
> - fp->eth_q_stats.rx_err_discard_pkt++;
> + "ERROR packet dropped "
> + "because of alloc failure\n");
> + fp->eth_q_stats.rx_skb_alloc_failed++;
> goto reuse_rx;
> }
>
> - /* Since we don't have a jumbo ring
> - * copy small packets if mtu > 1500
> - */
> - if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) &&
> - (len <= RX_COPY_THRESH)) {
> - struct sk_buff *new_skb;
> -
> - new_skb = netdev_alloc_skb(bp->dev, len +
pad);
> - if (new_skb == NULL) {
> - DP(NETIF_MSG_RX_ERR,
> - "ERROR packet dropped "
> - "because of alloc failure\n");
> - fp->eth_q_stats.rx_skb_alloc_failed++;
> - goto reuse_rx;
> - }
> -
> - /* aligned copy */
> - skb_copy_from_linear_data_offset(skb, pad,
> - new_skb->data + pad, len);
> - skb_reserve(new_skb, pad);
> - skb_put(new_skb, len);
> + /* aligned copy */
> + skb_copy_from_linear_data_offset(skb, pad,
> + new_skb->data + pad, len);
> + skb_reserve(new_skb, pad);
> + skb_put(new_skb, len);
>
> - bnx2x_reuse_rx_skb(fp, bd_cons, bd_prod);
> + bnx2x_reuse_rx_skb(fp, bd_cons, bd_prod);
>
> - skb = new_skb;
> + skb = new_skb;
>
> - } else
> - if (likely(bnx2x_alloc_rx_skb(bp, fp, bd_prod) == 0))
{
> - dma_unmap_single(&bp->pdev->dev,
> - dma_unmap_addr(rx_buf, mapping),
> - fp->rx_buf_size,
> - DMA_FROM_DEVICE);
> - skb_reserve(skb, pad);
> - skb_put(skb, len);
> + } else if (likely(bnx2x_alloc_rx_skb(bp, fp, bd_prod) == 0)) {
> + dma_unmap_single(&bp->pdev->dev,
> + dma_unmap_addr(rx_buf, mapping),
> + fp->rx_buf_size, DMA_FROM_DEVICE);
> + skb_reserve(skb, pad);
> + skb_put(skb, len);
>
> - } else {
> - DP(NETIF_MSG_RX_ERR,
> - "ERROR packet dropped because "
> - "of alloc failure\n");
> - fp->eth_q_stats.rx_skb_alloc_failed++;
> + } else {
> + DP(NETIF_MSG_RX_ERR,
> + "ERROR packet dropped because of alloc
failure\n");
> + fp->eth_q_stats.rx_skb_alloc_failed++;
> reuse_rx:
> - bnx2x_reuse_rx_skb(fp, bd_cons, bd_prod);
> - goto next_rx;
> - }
> -
> - skb->protocol = eth_type_trans(skb, bp->dev);
> + bnx2x_reuse_rx_skb(fp, bd_cons, bd_prod);
> + goto next_rx;
> + }
>
> - /* Set Toeplitz hash for a none-LRO skb */
> - bnx2x_set_skb_rxhash(bp, cqe, skb);
> + skb->protocol = eth_type_trans(skb, bp->dev);
>
> - skb_checksum_none_assert(skb);
> + /* Set Toeplitz hash for a none-LRO skb */
> + bnx2x_set_skb_rxhash(bp, cqe, skb);
>
> - if (bp->dev->features & NETIF_F_RXCSUM) {
> + skb_checksum_none_assert(skb);
>
> - if (likely(BNX2X_RX_CSUM_OK(cqe)))
> - skb->ip_summed = CHECKSUM_UNNECESSARY;
> - else
> - fp->eth_q_stats.hw_csum_err++;
> - }
> + if (bp->dev->features & NETIF_F_RXCSUM) {
> + if (likely(BNX2X_RX_CSUM_OK(cqe)))
> + skb->ip_summed = CHECKSUM_UNNECESSARY;
> + else
> + fp->eth_q_stats.hw_csum_err++;
> }
>
> skb_record_rx_queue(skb, fp->index);
^ permalink raw reply
* [PATCH 0/14] skb fragment API: convert network drivers (part II)
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev@vger.kernel.org
The following series converts the second batch of network drivers to the
SKB pages fragment API introduced in 131ea6675c76. I expect there will
be ~4 similarly sized batches to convert all the drivers over.
This is part of my series to enable visibility into SKB paged fragment's
lifecycles, [0] contains some more background and rationale but
basically the completed series will allow entities which inject pages
into the networking stack to receive a notification when the stack has
really finished with those pages (i.e. including retransmissions,
clones, pull-ups etc) and not just when the original skb is finished
with, which is beneficial to many subsystems which wish to inject pages
into the network stack without giving up full ownership of those page's
lifecycle. It implements something broadly along the lines of what was
described in [1].
Cheers,
Ian.
[0] http://marc.info/?l=linux-netdev&m=131072801125521&w=2
[1] http://marc.info/?l=linux-netdev&m=130925719513084&w=2
^ permalink raw reply
* [PATCH 01/14] ibmveth: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Santiago Leon
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Santiago Leon <santil@linux.vnet.ibm.com>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/ibm/ibmveth.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
index bba1ffc..8cca4a6 100644
--- a/drivers/net/ethernet/ibm/ibmveth.c
+++ b/drivers/net/ethernet/ibm/ibmveth.c
@@ -1002,9 +1002,8 @@ retry_bounce:
unsigned long dma_addr;
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
- dma_addr = dma_map_page(&adapter->vdev->dev, frag->page,
- frag->page_offset, frag->size,
- DMA_TO_DEVICE);
+ dma_addr = skb_frag_dma_map(&adapter->vdev->dev, frag, 0,
+ frag->size, DMA_TO_DEVICE);
if (dma_mapping_error(&adapter->vdev->dev, dma_addr))
goto map_failed_frags;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 02/14] jme: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Guo-Fu Tseng
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Guo-Fu Tseng <cooldavid@cooldavid.org>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/jme.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index a869ee4..48a0a23 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -1928,8 +1928,9 @@ jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx)
ctxdesc = txdesc + ((idx + i + 2) & (mask));
ctxbi = txbi + ((idx + i + 2) & (mask));
- jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, frag->page,
- frag->page_offset, frag->size, hidma);
+ jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi,
+ skb_frag_page(frag),
+ frag->page_offset, frag->size, hidma);
}
len = skb_is_nonlinear(skb) ? skb_headlen(skb) : skb->len;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 03/14] ksz884x: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/micrel/ksz884x.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c
index 27418d3..710c4ae 100644
--- a/drivers/net/ethernet/micrel/ksz884x.c
+++ b/drivers/net/ethernet/micrel/ksz884x.c
@@ -4704,8 +4704,7 @@ static void send_packet(struct sk_buff *skb, struct net_device *dev)
dma_buf->dma = pci_map_single(
hw_priv->pdev,
- page_address(this_frag->page) +
- this_frag->page_offset,
+ skb_frag_address(this_frag),
dma_buf->len,
PCI_DMA_TODEVICE);
set_tx_buf(desc, dma_buf->dma);
--
1.7.2.5
^ permalink raw reply related
* [PATCH 04/14] macvtap: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: netdev@vger.kernel.org
---
drivers/net/macvtap.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index ab96c31..7c3f84a 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -503,10 +503,10 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
skb->truesize += len;
atomic_add(len, &skb->sk->sk_wmem_alloc);
while (len) {
- f = &skb_shinfo(skb)->frags[i];
- f->page = page[i];
- f->page_offset = base & ~PAGE_MASK;
- f->size = min_t(int, len, PAGE_SIZE - f->page_offset);
+ __skb_fill_page_desc(
+ skb, i, page[i],
+ base & ~PAGE_MASK,
+ min_t(int, len, PAGE_SIZE - f->page_offset));
skb_shinfo(skb)->nr_frags++;
/* increase sk_wmem_alloc */
base += f->size;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 05/14] mv643xx: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Lennert Buytenhek
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/marvell/mv643xx_eth.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index 1e2c9f07..7325737 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -752,10 +752,10 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
desc->l4i_chk = 0;
desc->byte_cnt = this_frag->size;
- desc->buf_ptr = dma_map_page(mp->dev->dev.parent,
- this_frag->page,
- this_frag->page_offset,
- this_frag->size, DMA_TO_DEVICE);
+ desc->buf_ptr = skb_frag_dma_map(mp->dev->dev.parent,
+ this_frag, 0,
+ this_frag->size,
+ DMA_TO_DEVICE);
}
}
--
1.7.2.5
^ permalink raw reply related
* [PATCH 06/14] netxen: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Sony Chacko, Rajesh Borundia
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Sony Chacko <sony.chacko@qlogic.com>
Cc: Rajesh Borundia <rajesh.borundia@qlogic.com>
Cc: netdev@vger.kernel.org
---
.../net/ethernet/qlogic/netxen/netxen_nic_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index de18e47..694130e 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -1844,8 +1844,8 @@ netxen_map_tx_skb(struct pci_dev *pdev,
frag = &skb_shinfo(skb)->frags[i];
nf = &pbuf->frag_array[i+1];
- map = pci_map_page(pdev, frag->page, frag->page_offset,
- frag->size, PCI_DMA_TODEVICE);
+ map = skb_frag_dma_map(&pdev->dev, frag, 0, frag->size,
+ PCI_DMA_TODEVICE);
if (pci_dma_mapping_error(pdev, map))
goto unwind;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 07/14] niu: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:46 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/sun/niu.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index 3c9ef1c..cad58f2 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -3290,11 +3290,8 @@ static void niu_rx_skb_append(struct sk_buff *skb, struct page *page,
u32 offset, u32 size)
{
int i = skb_shinfo(skb)->nr_frags;
- skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
- frag->page = page;
- frag->page_offset = offset;
- frag->size = size;
+ __skb_fill_page_desc(skb, i, page, offset, size);
skb->len += size;
skb->data_len += size;
@@ -6737,7 +6734,7 @@ static netdev_tx_t niu_start_xmit(struct sk_buff *skb,
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
len = frag->size;
- mapping = np->ops->map_page(np->device, frag->page,
+ mapping = np->ops->map_page(np->device, skb_frag_page(frag),
frag->page_offset, len,
DMA_TO_DEVICE);
--
1.7.2.5
^ permalink raw reply related
* [PATCH 08/14] ns83820: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/natsemi/ns83820.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/natsemi/ns83820.c b/drivers/net/ethernet/natsemi/ns83820.c
index 1a1e20e..e0895e4 100644
--- a/drivers/net/ethernet/natsemi/ns83820.c
+++ b/drivers/net/ethernet/natsemi/ns83820.c
@@ -1160,9 +1160,8 @@ again:
if (!nr_frags)
break;
- buf = pci_map_page(dev->pci_dev, frag->page,
- frag->page_offset,
- frag->size, PCI_DMA_TODEVICE);
+ buf = skb_frag_dma_map(&dev->pci_dev->dev, frag, 0,
+ frag->size, PCI_DMA_TODEVICE);
dprintk("frag: buf=%08Lx page=%08lx offset=%08lx\n",
(long long)buf, (long) page_to_pfn(frag->page),
frag->page_offset);
--
1.7.2.5
^ permalink raw reply related
* [PATCH 09/14] pasemi: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Olof Johansson
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Olof Johansson <olof@lixom.net>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/pasemi/pasemi_mac.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c
index fad620d..5322095 100644
--- a/drivers/net/ethernet/pasemi/pasemi_mac.c
+++ b/drivers/net/ethernet/pasemi/pasemi_mac.c
@@ -1505,9 +1505,8 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
for (i = 0; i < nfrags; i++) {
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
- map[i+1] = pci_map_page(mac->dma_pdev, frag->page,
- frag->page_offset, frag->size,
- PCI_DMA_TODEVICE);
+ map[i + 1] = skb_frag_dma_map(&mac->dma_pdev->dev, frag, 0,
+ frag->size, PCI_DMA_TODEVICE);
map_size[i+1] = frag->size;
if (pci_dma_mapping_error(mac->dma_pdev, map[i+1])) {
nfrags = i;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 10/14] qeth: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev
Cc: Ian Campbell, Ursula Braun, Frank Blaschka, linux390,
Martin Schwidefsky, Heiko Carstens, linux-s390
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Ursula Braun <ursula.braun@de.ibm.com>
Cc: Frank Blaschka <blaschka@linux.vnet.ibm.com>
Cc: linux390@de.ibm.com
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: linux-s390@vger.kernel.org
Cc: netdev@vger.kernel.org
---
drivers/s390/net/qeth_core_main.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 97172f8..8153443 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -3694,7 +3694,8 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb,
for (cnt = 0; cnt < skb_shinfo(skb)->nr_frags; cnt++) {
frag = &skb_shinfo(skb)->frags[cnt];
- buffer->element[element].addr = (char *)page_to_phys(frag->page)
+ buffer->element[element].addr = (char *)
+ page_to_phys(skb_frag_page(frag))
+ frag->page_offset;
buffer->element[element].length = frag->size;
buffer->element[element].eflags = SBAL_EFLAGS_MIDDLE_FRAG;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 11/14] qla3xxx: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Ron Mercer, linux-driver
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Ron Mercer <ron.mercer@qlogic.com>
Cc: linux-driver@qlogic.com
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/qlogic/qla3xxx.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
index 8cab61c..1871d88 100644
--- a/drivers/net/ethernet/qlogic/qla3xxx.c
+++ b/drivers/net/ethernet/qlogic/qla3xxx.c
@@ -2388,9 +2388,8 @@ static int ql_send_map(struct ql3_adapter *qdev,
seg++;
}
- map = pci_map_page(qdev->pdev, frag->page,
- frag->page_offset, frag->size,
- PCI_DMA_TODEVICE);
+ map = skb_frag_dma_map(&qdev->pdev->dev, frag, 0, frag->size,
+ PCI_DMA_TODEVICE);
err = pci_dma_mapping_error(qdev->pdev, map);
if (err) {
--
1.7.2.5
^ permalink raw reply related
* [PATCH 12/14] qlcnic: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Anirban Chakraborty, Sony Chacko, linux-driver
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Cc: Sony Chacko <sony.chacko@qlogic.com>
Cc: linux-driver@qlogic.com
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 690c93f..501e16b 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -2135,8 +2135,8 @@ qlcnic_map_tx_skb(struct pci_dev *pdev,
frag = &skb_shinfo(skb)->frags[i];
nf = &pbuf->frag_array[i+1];
- map = pci_map_page(pdev, frag->page, frag->page_offset,
- frag->size, PCI_DMA_TODEVICE);
+ map = skb_frag_dma_map(&pdev->dev, frag, 0, frag->size,
+ PCI_DMA_TODEVICE);
if (pci_dma_mapping_error(pdev, map))
goto unwind;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 13/14] qlge: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev
Cc: Ian Campbell, Anirban Chakraborty, Jitendra Kalsaria, Ron Mercer,
linux-driver
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Cc: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Cc: Ron Mercer <ron.mercer@qlogic.com>
Cc: linux-driver@qlogic.com
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/qlogic/qlge/qlge_main.c | 18 ++++++------------
1 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index 39360c4..ce6c6fe 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -1431,10 +1431,8 @@ static int ql_map_send(struct ql_adapter *qdev,
map_idx++;
}
- map =
- pci_map_page(qdev->pdev, frag->page,
- frag->page_offset, frag->size,
- PCI_DMA_TODEVICE);
+ map = skb_frag_dma_map(&qdev->pdev->dev, frag, 0, frag->size,
+ PCI_DMA_TODEVICE);
err = pci_dma_mapping_error(qdev->pdev, map);
if (err) {
@@ -1477,8 +1475,6 @@ static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
{
struct sk_buff *skb;
struct bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
- struct skb_frag_struct *rx_frag;
- int nr_frags;
struct napi_struct *napi = &rx_ring->napi;
napi->dev = qdev->ndev;
@@ -1492,12 +1488,10 @@ static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
return;
}
prefetch(lbq_desc->p.pg_chunk.va);
- rx_frag = skb_shinfo(skb)->frags;
- nr_frags = skb_shinfo(skb)->nr_frags;
- rx_frag += nr_frags;
- rx_frag->page = lbq_desc->p.pg_chunk.page;
- rx_frag->page_offset = lbq_desc->p.pg_chunk.offset;
- rx_frag->size = length;
+ __skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
+ lbq_desc->p.pg_chunk.page,
+ lbq_desc->p.pg_chunk.offset,
+ length);
skb->len += length;
skb->data_len += length;
--
1.7.2.5
^ permalink raw reply related
* [PATCH 14/14] r8169: convert to SKB paged frag API.
From: Ian Campbell @ 2011-08-31 10:47 UTC (permalink / raw)
To: netdev; +Cc: Ian Campbell, Realtek linux nic maintainers, Francois Romieu
In-Reply-To: <1314787608.28989.41.camel@zakaz.uk.xensource.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Realtek linux nic maintainers <nic_swsd@realtek.com>
Cc: Francois Romieu <romieu@fr.zoreil.com>
Cc: netdev@vger.kernel.org
---
drivers/net/ethernet/realtek/r8169.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 1cf8c3c..835bbb5 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -5027,7 +5027,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
txd = tp->TxDescArray + entry;
len = frag->size;
- addr = ((void *) page_address(frag->page)) + frag->page_offset;
+ addr = skb_frag_address(frag);
mapping = dma_map_single(d, addr, len, DMA_TO_DEVICE);
if (unlikely(dma_mapping_error(d, mapping))) {
if (net_ratelimit())
--
1.7.2.5
^ permalink raw reply related
* Re: [PATCH 7/7] bnx2x: expose HW RX VLAN stripping toggle
From: Vlad Zolotarov @ 2011-08-31 12:01 UTC (permalink / raw)
To: Michal Schmidt
Cc: Michał Mirosław, netdev@vger.kernel.org, Dmitry Kravkov,
Eilon Greenstein
In-Reply-To: <4E5D3A43.1060202@redhat.com>
On Tuesday 30 August 2011 22:30:11 Michal Schmidt wrote:
> > and then also in fp->flags. Are the
> > fp->flags strictly mirroring hardware state (as in: there is no way
> > the states can differ in any point in time where the flags are
> > tested)?
>
> Yes. This is the purpose of the second mirroring of the flag.
Michal,
although the above is true i'd say it's a bit of an overkill:
RX VLAN stripping is configured in a function level, so keeping it in a per
queue level is not needed.
The problem u were trying to resolve (and u resolved it) was to separate the
RX_VLAN_ENABLED flag semantics into two: requested feature and HW configured
feature in order to further check the second in the fast path, while setting
the first one in the set_features(). Then the second lag is updated according
to the first one during the loading of the function (bnx2x_nic_load()).
Therefore it would be enough to just add those two flags in the function (bp)
level keeping the rest of your patch as it is. This would also cancel the need
for a patch 6.
Thanks,
vlad
^ permalink raw reply
* Re: [PATCH 2/2] Add a netlink attribute INET_DIAG_SECCTX
From: Stephen Smalley @ 2011-08-31 12:08 UTC (permalink / raw)
To: rongqing.li; +Cc: netdev, selinux, linux-security-module
In-Reply-To: <1314779777-12669-3-git-send-email-rongqing.li@windriver.com>
On Wed, 2011-08-31 at 16:36 +0800, rongqing.li@windriver.com wrote:
> From: Roy.Li <rongqing.li@windriver.com>
>
> Add a new netlink attribute INET_DIAG_SECCTX to dump the security
> context of TCP sockets.
>
> The element sk_security of struct sock represents the socket
> security context ID, which is inherited from the parent process
> when the socket is created.
>
> but when SELinux type_transition rule is applied to socket, or
> application sets /proc/xxx/attr/createsock, the socket security
> context would be different from the creating process. For these
> conditions, the "netstat -Z" will return wrong value, since
> "netstat -Z" only returns the process security context as socket
> process security.
>
> Signed-off-by: Roy.Li <rongqing.li@windriver.com>
> ---
> include/linux/inet_diag.h | 3 ++-
> net/ipv4/inet_diag.c | 38 +++++++++++++++++++++++++++++++++-----
> 2 files changed, 35 insertions(+), 6 deletions(-)
> diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
> index 389a2e6..1faf752 100644
> --- a/net/ipv4/inet_diag.c
> +++ b/net/ipv4/inet_diag.c
> @@ -34,6 +34,8 @@
>
> #include <linux/inet_diag.h>
>
> +#define MAX_SECCTX_LEN 128
We don't impose such a (low) limit on other interfaces for reporting
security contexts. Can you just size the buffer appropriately for the
actual secctx length?
--
Stephen Smalley
National Security Agency
^ permalink raw reply
* Re: 802.1Q VLAN random tag injected when vlan configured on forcedeth interface
From: Ruslan N. Marchenko @ 2011-08-31 13:10 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev
In-Reply-To: <1314715362.2935.27.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
On Tue, Aug 30, 2011 at 04:42:42PM +0200, Eric Dumazet wrote:
> Le mardi 30 août 2011 à 16:23 +0200, Ruslan N. Marchenko a écrit :
> > On Tue, Aug 30, 2011 at 03:46:24PM +0200, Ruslan N. Marchenko wrote:
> > > On Tue, Aug 30, 2011 at 03:23:48PM +0200, Eric Dumazet wrote:
> > > >
> > > > What kernel version are you using ?
> > > >
> > > Oh, sorry for missing it, it runs on
> > > Linux ruff.mobi 2.6.38-11-generic #48-Ubuntu SMP Fri Jul 29 19:05:14 UTC 2011 i686 i686 i386 GNU/Linux
> > >
> > > Just fyi - the openwrt box to which it is connected is
> > > Linux OpenWrt 2.6.39.2 #2 Fri Aug 12 09:36:23 EEST 2011 mips GNU/Linux
> > > although packet drop happens even if there're no vlans configured on remote side.
> > >
> > Here is double-tag sample:
> > 16:20:31.151268 e0:46:9a:4e:88:1d > 00:26:18:40:21:62, ethertype 802.1Q (0x8100), length 106: vlan 2112, p 7, ethertype 802.1Q, vlan 6, p 0, ethertype IPv4, [|ip]
> > 0x0000: 0026 1840 2162 e046 9a4e 881d 8100 e840
> > 0x0010: 8100 0006 0800 4500 0054 abec 0000
> >
> >
>
> Latest kernel should be fine. Some patches need to be backported by
> Ubuntu team, if you can test them.
>
> commit 9331db4f00cfee8a79d2147ac83723ef436b9759
> Author: Jiri Pirko <jpirko@redhat.com>
> Date: Wed Aug 17 23:50:37 2011 -0700
>
> forcedeth: call vlan_mode only if hw supports vlans
>
> If hw does not support vlans, dont call nv_vlan_mode because it has no point.
> I believe that this should fix issues on older non-vlan supportive
> chips (like Ingo has).
>
> Reported-ty: Ingo Molnar <mingo@elte.hu>
> Signed-off-by: Jiri Pirko <jpirko@redhat.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
>
> commit 0891b0e08937aaec2c4734acb94c5ff8042313bb
> Author: Jiri Pirko <jpirko@redhat.com>
> Date: Tue Jul 26 10:19:28 2011 +0000
>
> forcedeth: fix vlans
>
> For some reason, when rxaccel is disabled, NV_RX3_VLAN_TAG_PRESENT is
> still set and some pseudorandom vids appear. So check for
> NETIF_F_HW_VLAN_RX as well. Also set correctly hw_features and set vlan
> mode on probe.
>
> Signed-off-by: Jiri Pirko <jpirko@redhat.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
>
> commit 3326c784c9f492e988617d93f647ae0cfd4c8d09
> Author: Jiri Pirko <jpirko@redhat.com>
> Date: Wed Jul 20 04:54:38 2011 +0000
>
> forcedeth: do vlan cleanup
>
> - unify vlan and nonvlan rx path
> - kill np->vlangrp and nv_vlan_rx_register
> - allow to turn on/off rx vlan accel via ethtool (set_features)
>
> Signed-off-by: Jiri Pirko <jpirko@redhat.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
>
>
Thanks Eric for quick hint, atom n270 however is not as fast in compiling kernel :D
I'm trying to backport the patch (and dependencies) and compile kernel with it, takes lot of time though. Will report back and raise a report/request to ubuntu kernel team. Anyway it seems exactly what I have.
Cheers,
Ruslan
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox