Re: [PATCH 1/2] net: add IFF_SKB_TX_SHARED flag to priv_flags
From: Eric Dumazet <hidden>
Date: 2011-07-25 20:11:27
Le lundi 25 juillet 2011 à 15:45 -0400, Neil Horman a écrit :
quoted hunk ↗ jump to hunk
Pktgen attempts to transmit shared skbs to net devices, which can't be used by some drivers as they keep state information in skbs. This patch adds a flag marking drivers as being able to handle shared skbs in their tx path. Drivers are defaulted to being unable to do so, but calling ether_setup enables this flag, as 90% of the drivers calling ether_setup touch real hardware and can handle shared skbs. A subsequent patch will audit drivers to ensure that the flag is set properly Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Reported-by: Jiri Pirko <redacted> CC: Robert Olsson <redacted> CC: Eric Dumazet <redacted> CC: Alexey Dobriyan <redacted> CC: David S. Miller <davem@davemloft.net> --- include/linux/if.h | 2 ++ net/core/pktgen.c | 8 +++++--- net/ethernet/eth.c | 1 + 3 files changed, 8 insertions(+), 3 deletions(-)diff --git a/include/linux/if.h b/include/linux/if.h index 3bc63e6..03489ca 100644 --- a/include/linux/if.h +++ b/include/linux/if.h@@ -76,6 +76,8 @@ #define IFF_BRIDGE_PORT 0x4000 /* device used as bridge port */ #define IFF_OVS_DATAPATH 0x8000 /* device used as Open vSwitch * datapath port */ +#define IFF_TX_SKB_SHARING 0x10000 /* The interface supports sharing + * skbs on transmit */ #define IF_GET_IFACE 0x0001 /* for querying only */ #define IF_GET_PROTO 0x0002diff --git a/net/core/pktgen.c b/net/core/pktgen.c index f76079c..53f3f15 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c@@ -1070,7 +1070,9 @@ static ssize_t pktgen_if_write(struct file *file, len = num_arg(&user_buffer[i], 10, &value); if (len < 0) return len; - + if ((len > 0) &&
if ((value > 0) ...
+ (!(pkt_dev->odev->priv_flags & IFF_TX_SKB_SHARING))) + return -ENOTSUPP; i += len; pkt_dev->clone_skb = value;