* Re: [PATCH v2 3/3] pppoatm: protect against freeing of vcc
From: David Woodhouse @ 2012-11-28 22:18 UTC (permalink / raw)
To: David Laight
Cc: chas williams - CONTRACTOR, Krzysztof Mazur, davem, netdev,
linux-kernel, nathan
In-Reply-To: <AE90C24D6B3A694183C094C60CF0A2F6026B70C9@saturn3.aculab.com>
[-- Attachment #1: Type: text/plain, Size: 3006 bytes --]
On Wed, 2012-11-28 at 09:21 +0000, David Laight wrote:
> Even when it might make sense to sleep in close until tx drains
> there needs to be a finite timeout before it become abortive.
You are, of course, right. We should never wait for hardware for ever.
And just to serve me right, I seem to have hit a bug in the latest Solos
firmware (1.11) which makes it sometimes lock up when I reboot. So it
never responds to the PKT_PCLOSE packet... and thus it deadlocks when I
try to kill pppd and unload the module to reset it :)
New version...
From 53dd01c08fec5b26006a009b25e4210127fdb27a Mon Sep 17 00:00:00 2001
From: David Woodhouse <David.Woodhouse@intel.com>
Date: Tue, 27 Nov 2012 23:49:24 +0000
Subject: [PATCH] solos-pci: Wait for pending TX to complete when releasing
vcc
We should no longer be calling the old pop routine for the vcc, after
vcc_release() has completed. Make sure we wait for any pending TX skbs
to complete, by waiting for our own PKT_PCLOSE control skb to be sent.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
---
drivers/atm/solos-pci.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 9851093..3720670 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -92,6 +92,7 @@ struct pkt_hdr {
};
struct solos_skb_cb {
+ struct completion c;
struct atm_vcc *vcc;
uint32_t dma_addr;
};
@@ -881,11 +882,18 @@ static void pclose(struct atm_vcc *vcc)
header->vci = cpu_to_le16(vcc->vci);
header->type = cpu_to_le16(PKT_PCLOSE);
+ init_completion(&SKB_CB(skb)->c);
+
fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, NULL);
clear_bit(ATM_VF_ADDR, &vcc->flags);
clear_bit(ATM_VF_READY, &vcc->flags);
+ if (!wait_for_completion_timeout(&SKB_CB(skb)->c,
+ jiffies + msecs_to_jiffies(5000)))
+ dev_warn(&card->dev->dev, "Timeout waiting for VCC close on port %d\n",
+ SOLOS_CHAN(vcc->dev));
+
/* Hold up vcc_destroy_socket() (our caller) until solos_bh() in the
tasklet has finished processing any incoming packets (and, more to
the point, using the vcc pointer). */
@@ -1011,9 +1019,12 @@ static uint32_t fpga_tx(struct solos_card *card)
if (vcc) {
atomic_inc(&vcc->stats->tx);
solos_pop(vcc, oldskb);
- } else
+ } else {
+ struct pkt_hdr *header = (void *)oldskb->data;
+ if (le16_to_cpu(header->type) == PKT_PCLOSE)
+ complete(&SKB_CB(oldskb)->c);
dev_kfree_skb_irq(oldskb);
-
+ }
}
}
/* For non-DMA TX, write the 'TX start' bit for all four ports simultaneously */
@@ -1345,6 +1356,8 @@ static struct pci_driver fpga_driver = {
static int __init solos_pci_init(void)
{
+ BUILD_BUG_ON(sizeof(struct solos_skb_cb) > sizeof(((struct sk_buff *)0)->cb));
+
printk(KERN_INFO "Solos PCI Driver Version %s\n", VERSION);
return pci_register_driver(&fpga_driver);
}
--
1.8.0
--
dwmw2
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 6171 bytes --]
^ permalink raw reply related
* Re: [PATCH] atm: introduce vcc_pop()
From: Krzysztof Mazur @ 2012-11-28 22:10 UTC (permalink / raw)
To: chas williams - CONTRACTOR; +Cc: David Woodhouse, davem, netdev, linux-kernel
In-Reply-To: <20121128165906.05ef5e2b@thirdoffive.cmf.nrl.navy.mil>
On Wed, Nov 28, 2012 at 04:59:06PM -0500, chas williams - CONTRACTOR wrote:
> On Wed, 28 Nov 2012 22:45:34 +0100
> Krzysztof Mazur <krzysiek@podlesie.net> wrote:
>
> > On Wed, Nov 28, 2012 at 04:20:01PM -0500, chas williams - CONTRACTOR wrote:
> > > i dont like the vcc->pop() implementation and at one point i had the
> > > crazy idea of using skb->destructors to handle it. however, i think it
> > > would be necessary to clone the skb's so any existing destructor is
> > > preserved.
> >
> > With this patch we will kill vcc->pop() in drivers and in future
> > we can do that without changes in drivers.
>
> ok
>
> > >
> > > > +#define vcc_pop(vcc, skb) vcc_pop_any(vcc, skb)
> > > > +#define vcc_pop_irq(vcc, skb) vcc_pop_any(vcc, skb)
> > >
> > > don't define these if you dont plan on using them anway.
> >
> > I removed them. I also added check if vcc is NULL, as David Woodhouse
> > suggested, some drivers use that.
>
> it should probably be if (likely(vcc) && likely(vcc->pop)) since it
> will almost always be the case.
Thanks,
Krzysiek
-- >8 --
Subject: [PATCH v3] atm: introduce vcc_pop()
The atm drivers to free skb, that they got from ->send(), cannot just use
dev_kfree_skb*(), but they must use something like:
if (vcc->pop)
vcc->pop(vcc, skb);
else
dev_kfree_skb_any(skb);
When vcc->pop() is non-NULL, but they must in such case call vcc->pop().
This causes duplicated code in many drivers, and some drivers even forgot
to call vcc->pop() in some error handling code.
Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
---
include/linux/atmdev.h | 8 ++++++++
net/atm/common.c | 9 +++++++++
2 files changed, 17 insertions(+)
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index c1da539..57bd93f 100644
--- a/include/linux/atmdev.h
+++ b/include/linux/atmdev.h
@@ -283,6 +283,14 @@ int atm_pcr_goal(const struct atm_trafprm *tp);
void vcc_release_async(struct atm_vcc *vcc, int reply);
+/**
+ * vcc_pop - free transmitted ATM skb
+ *
+ * vcc_pop() should be used by ATM driver to free skbs, that were sent
+ * to driver by atmdev_opt->send() function.
+ */
+void vcc_pop(struct atm_vcc *vcc, struct sk_buff *skb);
+
struct atm_ioctl {
struct module *owner;
/* A module reference is kept if appropriate over this call.
diff --git a/net/atm/common.c b/net/atm/common.c
index 806fc0a..c42ff62 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -654,6 +654,15 @@ out:
return error;
}
+void vcc_pop(struct atm_vcc *vcc, struct sk_buff *skb)
+{
+ if (likely(vcc) && likely(vcc->pop))
+ vcc->pop(vcc, skb);
+ else
+ dev_kfree_skb_any(skb);
+}
+EXPORT_SYMBOL(vcc_pop);
+
unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
{
struct sock *sk = sock->sk;
--
1.8.0.411.g71a7da8
^ permalink raw reply related
* Re: [PATCH] atm: introduce vcc_pop()
From: chas williams - CONTRACTOR @ 2012-11-28 21:59 UTC (permalink / raw)
To: Krzysztof Mazur; +Cc: David Woodhouse, davem, netdev, linux-kernel
In-Reply-To: <20121128214533.GA25486@shrek.podlesie.net>
On Wed, 28 Nov 2012 22:45:34 +0100
Krzysztof Mazur <krzysiek@podlesie.net> wrote:
> On Wed, Nov 28, 2012 at 04:20:01PM -0500, chas williams - CONTRACTOR wrote:
> > i dont like the vcc->pop() implementation and at one point i had the
> > crazy idea of using skb->destructors to handle it. however, i think it
> > would be necessary to clone the skb's so any existing destructor is
> > preserved.
>
> With this patch we will kill vcc->pop() in drivers and in future
> we can do that without changes in drivers.
ok
> >
> > > +#define vcc_pop(vcc, skb) vcc_pop_any(vcc, skb)
> > > +#define vcc_pop_irq(vcc, skb) vcc_pop_any(vcc, skb)
> >
> > don't define these if you dont plan on using them anway.
>
> I removed them. I also added check if vcc is NULL, as David Woodhouse
> suggested, some drivers use that.
it should probably be if (likely(vcc) && likely(vcc->pop)) since it
will almost always be the case.
^ permalink raw reply
* [PATCH] atm: introduce vcc_pop()
From: Krzysztof Mazur @ 2012-11-28 21:45 UTC (permalink / raw)
To: chas williams - CONTRACTOR; +Cc: David Woodhouse, davem, netdev, linux-kernel
In-Reply-To: <20121128162001.3f326720@thirdoffive.cmf.nrl.navy.mil>
On Wed, Nov 28, 2012 at 04:20:01PM -0500, chas williams - CONTRACTOR wrote:
> On Wed, 28 Nov 2012 21:18:37 +0100
> Krzysztof Mazur <krzysiek@podlesie.net> wrote:
>
> > On Tue, Nov 27, 2012 at 07:28:43PM +0100, Krzysztof Mazur wrote:
> > > I think that we should add atm_pop() function that does that and fix all
> > > drivers.
> > >
> >
> > I'm sending a patch that implements that idea.
> >
> > Currently we need two arguments vcc and skb. However, we have reserved
> > ATM_SKB(skb)->vcc in skb control block for keeping vcc
> > and we can create single argument version vcc_pop(skb). In that case
> > we need to move:
> >
> > ATM_SKB(skb)->vcc = vcc;
> >
> > from ATM drivers to functions that call atmdev_ops->send().
>
> i dont like the vcc->pop() implementation and at one point i had the
> crazy idea of using skb->destructors to handle it. however, i think it
> would be necessary to clone the skb's so any existing destructor is
> preserved.
With this patch we will kill vcc->pop() in drivers and in future
we can do that without changes in drivers.
>
> > +#define vcc_pop(vcc, skb) vcc_pop_any(vcc, skb)
> > +#define vcc_pop_irq(vcc, skb) vcc_pop_any(vcc, skb)
>
> don't define these if you dont plan on using them anway.
I removed them. I also added check if vcc is NULL, as David Woodhouse
suggested, some drivers use that.
Krzysiek
-- >8 --
Subject: [PATCH v2] atm: introduce vcc_pop()
The atm drivers to free skb, that they got from ->send(), cannot just use
dev_kfree_skb*(), but they must use something like:
if (vcc->pop)
vcc->pop(vcc, skb);
else
dev_kfree_skb_any(skb);
When vcc->pop() is non-NULL, but they must in such case call vcc->pop().
This causes duplicated code in many drivers, and some drivers even forgot
to call vcc->pop() in some error handling code.
Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
---
include/linux/atmdev.h | 8 ++++++++
net/atm/common.c | 9 +++++++++
2 files changed, 17 insertions(+)
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index c1da539..57bd93f 100644
--- a/include/linux/atmdev.h
+++ b/include/linux/atmdev.h
@@ -283,6 +283,14 @@ int atm_pcr_goal(const struct atm_trafprm *tp);
void vcc_release_async(struct atm_vcc *vcc, int reply);
+/**
+ * vcc_pop - free transmitted ATM skb
+ *
+ * vcc_pop() should be used by ATM driver to free skbs, that were sent
+ * to driver by atmdev_opt->send() function.
+ */
+void vcc_pop(struct atm_vcc *vcc, struct sk_buff *skb);
+
struct atm_ioctl {
struct module *owner;
/* A module reference is kept if appropriate over this call.
diff --git a/net/atm/common.c b/net/atm/common.c
index 806fc0a..76bf76c 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -654,6 +654,15 @@ out:
return error;
}
+void vcc_pop(struct atm_vcc *vcc, struct sk_buff *skb)
+{
+ if (vcc && vcc->pop)
+ vcc->pop(vcc, skb);
+ else
+ dev_kfree_skb_any(skb);
+}
+EXPORT_SYMBOL(vcc_pop);
+
unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
{
struct sock *sk = sock->sk;
--
1.8.0.411.g71a7da8
^ permalink raw reply related
* Re: VPN traffic leaks in IPv6/IPv4 dual-stack networks/hosts
From: Jan Engelhardt @ 2012-11-28 21:37 UTC (permalink / raw)
To: Fernando Gont; +Cc: netdev
In-Reply-To: <50B6708A.8020701@gont.com.ar>
On Wednesday 2012-11-28 21:14, Fernando Gont wrote:
>On 11/28/2012 05:06 PM, Jan Engelhardt wrote:
>>> If the VPN is supposed to secure all traffic, and the VPN just fails to
>>> support v6, then for me, it's questionable to have your traffic leak out
>>> the VPN just because of that lack of IPv6 support.
>>
>> Well, what I am saying is that a server may not
>> be conveying "all", but only "0.0.0.0/0"[0/0].
>
>In such scenarios, doing nothing about IPv6 would be an oversight/error,
Without additional input from the user, e.g. by means of a config
setting, the software itself cannot distinguish between an
oversight/error and a deliberate configuration.
^ permalink raw reply
* Re: [PATCH v2 3/3] pppoatm: protect against freeing of vcc
From: Krzysztof Mazur @ 2012-11-28 21:24 UTC (permalink / raw)
To: David Woodhouse; +Cc: chas williams - CONTRACTOR, davem, netdev, linux-kernel
In-Reply-To: <1354135481.21562.98.camel@shinybook.infradead.org>
On Wed, Nov 28, 2012 at 08:44:41PM +0000, David Woodhouse wrote:
> On Wed, 2012-11-28 at 21:18 +0100, Krzysztof Mazur wrote:
> >
> > +void vcc_pop_any(struct atm_vcc *vcc, struct sk_buff *skb)
> > +{
> > + if (vcc->pop)
> > + vcc->pop(vcc, skb);
>
> if (vcc && vcc->pop) perhaps?
>
yes, we can do that, at least "he" and "nicstar" use that in some cases.
Krzysiek
^ permalink raw reply
* [PATCH resend net-next 3/3] myri10ge: Use skb_fill_page_desc().
From: Andrew Gallatin @ 2012-11-28 21:21 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Now that LRO is gone, the receive routine is much simpler, and
we are able to use the standard skb_fill_page_desc() in myri10ge.
Signed-off-by: Andrew Gallatin <gallatin@myri.com>
---
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index 93ed089..6bf1d26 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -1340,17 +1340,14 @@ myri10ge_rx_done(struct myri10ge_slice_state
*ss, int len, __wsum csum)
/* Fill skb_frag_struct(s) with data from our receive */
for (i = 0, remainder = len; remainder > 0; i++) {
myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes);
- __skb_frag_set_page(&rx_frags[i], rx->info[idx].page);
- rx_frags[i].page_offset = rx->info[idx].page_offset;
- if (remainder < MYRI10GE_ALLOC_SIZE)
- skb_frag_size_set(&rx_frags[i], remainder);
- else
- skb_frag_size_set(&rx_frags[i], MYRI10GE_ALLOC_SIZE);
+ skb_fill_page_desc(skb, i, rx->info[idx].page,
+ rx->info[idx].page_offset,
+ remainder < MYRI10GE_ALLOC_SIZE ?
+ remainder : MYRI10GE_ALLOC_SIZE);
rx->cnt++;
idx = rx->cnt & rx->mask;
remainder -= MYRI10GE_ALLOC_SIZE;
}
- skb_shinfo(skb)->nr_frags = i;
/* remove padding */
rx_frags[0].page_offset += MXGEFW_PAD;
--
1.7.9.5
^ permalink raw reply related
* [PATCH resend net-next 2/3] myri10ge: Add vlan rx for better GRO perf.
From: Andrew Gallatin @ 2012-11-28 21:20 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Unlike LRO, GRO requires that vlan tags be removed before
aggregation can occur. Since the myri10ge NIC does not support
hardware vlan tag offload, we must remove the tag in the driver
to achieve performance comparable to LRO for vlan tagged frames.
Thanks to Eric Duzamet for his help simplifying the original patch.
Signed-off-by: Andrew Gallatin <gallatin@myri.com>
---
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 40
++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index a5ab2f2..93ed089 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -1264,6 +1264,41 @@ myri10ge_unmap_rx_page(struct pci_dev *pdev,
}
}
+/*
+ * GRO does not support acceleration of tagged vlan frames, and
+ * this NIC does not support vlan tag offload, so we must pop
+ * the tag ourselves to be able to achieve GRO performance that
+ * is comparable to LRO.
+ */
+
+static inline void
+myri10ge_vlan_rx(struct net_device *dev, void *addr, struct sk_buff *skb)
+{
+ u8 *va;
+ struct vlan_ethhdr *veh;
+ struct skb_frag_struct *frag;
+
+ va = addr;
+ va += MXGEFW_PAD;
+ veh = (struct vlan_ethhdr *) va;
+ if ((dev->features & (NETIF_F_HW_VLAN_RX)) == NETIF_F_HW_VLAN_RX &&
+ (veh->h_vlan_proto == ntohs(ETH_P_8021Q))) {
+ /* fixup csum if needed */
+ if (skb->ip_summed == CHECKSUM_COMPLETE)
+ skb->csum = csum_sub(skb->csum,
+ csum_partial(va + ETH_HLEN,
+ VLAN_HLEN, 0));
+ /* pop tag */
+ __vlan_hwaccel_put_tag(skb, ntohs(veh->h_vlan_TCI));
+ memmove(va + VLAN_HLEN, va, 2 * ETH_ALEN);
+ skb->len -= VLAN_HLEN;
+ skb->data_len -= VLAN_HLEN;
+ frag = skb_shinfo(skb)->frags;
+ frag->page_offset += VLAN_HLEN;
+ skb_frag_size_set(frag, skb_frag_size(frag) - VLAN_HLEN);
+ }
+}
+
static inline int
myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum)
{
@@ -1329,6 +1364,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss,
int len, __wsum csum)
skb->ip_summed = CHECKSUM_COMPLETE;
skb->csum = csum;
}
+ myri10ge_vlan_rx(mgp->dev, va, skb);
skb_record_rx_queue(skb, ss - &mgp->ss[0]);
napi_gro_frags(&ss->napi);
@@ -3854,6 +3890,10 @@ static int myri10ge_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
netdev->netdev_ops = &myri10ge_netdev_ops;
netdev->mtu = myri10ge_initial_mtu;
netdev->hw_features = mgp->features | NETIF_F_RXCSUM;
+
+ /* fake NETIF_F_HW_VLAN_RX for good GRO performance */
+ netdev->hw_features |= NETIF_F_HW_VLAN_RX;
+
netdev->features = netdev->hw_features;
if (dac_enabled)
--
1.7.9.5
^ permalink raw reply related
* [PATCH resend net-next 1/3] myri10ge: Convert from LRO to GRO
From: Andrew Gallatin @ 2012-11-28 21:20 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Convert myri10ge from LRO to GRO, and simplify the driver by removing
various LRO-related code which is no longer needed including
ndo_fix_features op, custom skb building from frags, and LRO
header parsing.
Signed-off-by: Andrew Gallatin <gallatin@myri.com>
---
drivers/net/ethernet/myricom/Kconfig | 1 -
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 227
+++-------------------
2 files changed, 31 insertions(+), 197 deletions(-)
diff --git a/drivers/net/ethernet/myricom/Kconfig
b/drivers/net/ethernet/myricom/Kconfig
index 540f0c6..3932d08 100644
--- a/drivers/net/ethernet/myricom/Kconfig
+++ b/drivers/net/ethernet/myricom/Kconfig
@@ -23,7 +23,6 @@ config MYRI10GE
depends on PCI && INET
select FW_LOADER
select CRC32
- select INET_LRO
---help---
This driver supports Myricom Myri-10G Dual Protocol interface in
Ethernet mode. If the eeprom on your board is not recent enough,
diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index 83516e3..a5ab2f2 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -50,7 +50,6 @@
#include <linux/etherdevice.h>
#include <linux/if_ether.h>
#include <linux/if_vlan.h>
-#include <linux/inet_lro.h>
#include <linux/dca.h>
#include <linux/ip.h>
#include <linux/inet.h>
@@ -96,8 +95,6 @@ MODULE_LICENSE("Dual BSD/GPL");
#define MYRI10GE_EEPROM_STRINGS_SIZE 256
#define MYRI10GE_MAX_SEND_DESC_TSO ((65536 / 2048) * 2)
-#define MYRI10GE_MAX_LRO_DESCRIPTORS 8
-#define MYRI10GE_LRO_MAX_PKTS 64
#define MYRI10GE_NO_CONFIRM_DATA htonl(0xffffffff)
#define MYRI10GE_NO_RESPONSE_RESULT 0xffffffff
@@ -165,8 +162,6 @@ struct myri10ge_rx_done {
dma_addr_t bus;
int cnt;
int idx;
- struct net_lro_mgr lro_mgr;
- struct net_lro_desc lro_desc[MYRI10GE_MAX_LRO_DESCRIPTORS];
};
struct myri10ge_slice_netstats {
@@ -338,11 +333,6 @@ static int myri10ge_debug = -1; /* defaults above */
module_param(myri10ge_debug, int, 0);
MODULE_PARM_DESC(myri10ge_debug, "Debug level (0=none,...,16=all)");
-static int myri10ge_lro_max_pkts = MYRI10GE_LRO_MAX_PKTS;
-module_param(myri10ge_lro_max_pkts, int, S_IRUGO);
-MODULE_PARM_DESC(myri10ge_lro_max_pkts,
- "Number of LRO packets to be aggregated");
-
static int myri10ge_fill_thresh = 256;
module_param(myri10ge_fill_thresh, int, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(myri10ge_fill_thresh, "Number of empty rx slots
allowed");
@@ -1197,36 +1187,6 @@ static inline void myri10ge_vlan_ip_csum(struct
sk_buff *skb, __wsum hw_csum)
}
}
-static inline void
-myri10ge_rx_skb_build(struct sk_buff *skb, u8 * va,
- struct skb_frag_struct *rx_frags, int len, int hlen)
-{
- struct skb_frag_struct *skb_frags;
-
- skb->len = skb->data_len = len;
- /* attach the page(s) */
-
- skb_frags = skb_shinfo(skb)->frags;
- while (len > 0) {
- memcpy(skb_frags, rx_frags, sizeof(*skb_frags));
- len -= skb_frag_size(rx_frags);
- skb_frags++;
- rx_frags++;
- skb_shinfo(skb)->nr_frags++;
- }
-
- /* pskb_may_pull is not available in irq context, but
- * skb_pull() (for ether_pad and eth_type_trans()) requires
- * the beginning of the packet in skb_headlen(), move it
- * manually */
- skb_copy_to_linear_data(skb, va, hlen);
- skb_shinfo(skb)->frags[0].page_offset += hlen;
- skb_frag_size_sub(&skb_shinfo(skb)->frags[0], hlen);
- skb->data_len -= hlen;
- skb->tail += hlen;
- skb_pull(skb, MXGEFW_PAD);
-}
-
static void
myri10ge_alloc_rx_pages(struct myri10ge_priv *mgp, struct
myri10ge_rx_buf *rx,
int bytes, int watchdog)
@@ -1304,18 +1264,14 @@ myri10ge_unmap_rx_page(struct pci_dev *pdev,
}
}
-#define MYRI10GE_HLEN 64 /* The number of bytes to copy from a
- * page into an skb */
-
static inline int
-myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
- bool lro_enabled)
+myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum)
{
struct myri10ge_priv *mgp = ss->mgp;
struct sk_buff *skb;
- struct skb_frag_struct rx_frags[MYRI10GE_MAX_FRAGS_PER_FRAME];
+ struct skb_frag_struct *rx_frags;
struct myri10ge_rx_buf *rx;
- int i, idx, hlen, remainder, bytes;
+ int i, idx, remainder, bytes;
struct pci_dev *pdev = mgp->pdev;
struct net_device *dev = mgp->dev;
u8 *va;
@@ -1332,6 +1288,20 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss,
int len, __wsum csum,
idx = rx->cnt & rx->mask;
va = page_address(rx->info[idx].page) + rx->info[idx].page_offset;
prefetch(va);
+
+ skb = napi_get_frags(&ss->napi);
+ if (unlikely(skb == NULL)) {
+ ss->stats.rx_dropped++;
+ for (i = 0, remainder = len; remainder > 0; i++) {
+ myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes);
+ put_page(rx->info[idx].page);
+ rx->cnt++;
+ idx = rx->cnt & rx->mask;
+ remainder -= MYRI10GE_ALLOC_SIZE;
+ }
+ return 0;
+ }
+ rx_frags = skb_shinfo(skb)->frags;
/* Fill skb_frag_struct(s) with data from our receive */
for (i = 0, remainder = len; remainder > 0; i++) {
myri10ge_unmap_rx_page(pdev, &rx->info[idx], bytes);
@@ -1345,54 +1315,23 @@ myri10ge_rx_done(struct myri10ge_slice_state
*ss, int len, __wsum csum,
idx = rx->cnt & rx->mask;
remainder -= MYRI10GE_ALLOC_SIZE;
}
+ skb_shinfo(skb)->nr_frags = i;
- if (lro_enabled) {
- rx_frags[0].page_offset += MXGEFW_PAD;
- skb_frag_size_sub(&rx_frags[0], MXGEFW_PAD);
- len -= MXGEFW_PAD;
- lro_receive_frags(&ss->rx_done.lro_mgr, rx_frags,
- /* opaque, will come back in get_frag_header */
- len, len,
- (void *)(__force unsigned long)csum, csum);
+ /* remove padding */
+ rx_frags[0].page_offset += MXGEFW_PAD;
+ rx_frags[0].size -= MXGEFW_PAD;
+ len -= MXGEFW_PAD;
- return 1;
- }
-
- hlen = MYRI10GE_HLEN > len ? len : MYRI10GE_HLEN;
-
- /* allocate an skb to attach the page(s) to. This is done
- * after trying LRO, so as to avoid skb allocation overheads */
-
- skb = netdev_alloc_skb(dev, MYRI10GE_HLEN + 16);
- if (unlikely(skb == NULL)) {
- ss->stats.rx_dropped++;
- do {
- i--;
- __skb_frag_unref(&rx_frags[i]);
- } while (i != 0);
- return 0;
- }
-
- /* Attach the pages to the skb, and trim off any padding */
- myri10ge_rx_skb_build(skb, va, rx_frags, len, hlen);
- if (skb_frag_size(&skb_shinfo(skb)->frags[0]) <= 0) {
- skb_frag_unref(skb, 0);
- skb_shinfo(skb)->nr_frags = 0;
- } else {
- skb->truesize += bytes * skb_shinfo(skb)->nr_frags;
+ skb->len = len;
+ skb->data_len = len;
+ skb->truesize += len;
+ if (dev->features & NETIF_F_RXCSUM) {
+ skb->ip_summed = CHECKSUM_COMPLETE;
+ skb->csum = csum;
}
- skb->protocol = eth_type_trans(skb, dev);
skb_record_rx_queue(skb, ss - &mgp->ss[0]);
- if (dev->features & NETIF_F_RXCSUM) {
- if ((skb->protocol == htons(ETH_P_IP)) ||
- (skb->protocol == htons(ETH_P_IPV6))) {
- skb->csum = csum;
- skb->ip_summed = CHECKSUM_COMPLETE;
- } else
- myri10ge_vlan_ip_csum(skb, csum);
- }
- netif_receive_skb(skb);
+ napi_gro_frags(&ss->napi);
return 1;
}
@@ -1480,18 +1419,11 @@ myri10ge_clean_rx_done(struct
myri10ge_slice_state *ss, int budget)
u16 length;
__wsum checksum;
- /*
- * Prevent compiler from generating more than one ->features memory
- * access to avoid theoretical race condition with functions that
- * change NETIF_F_LRO flag at runtime.
- */
- bool lro_enabled = !!(ACCESS_ONCE(mgp->dev->features) & NETIF_F_LRO);
-
while (rx_done->entry[idx].length != 0 && work_done < budget) {
length = ntohs(rx_done->entry[idx].length);
rx_done->entry[idx].length = 0;
checksum = csum_unfold(rx_done->entry[idx].checksum);
- rx_ok = myri10ge_rx_done(ss, length, checksum, lro_enabled);
+ rx_ok = myri10ge_rx_done(ss, length, checksum);
rx_packets += rx_ok;
rx_bytes += rx_ok * (unsigned long)length;
cnt++;
@@ -1503,9 +1435,6 @@ myri10ge_clean_rx_done(struct myri10ge_slice_state
*ss, int budget)
ss->stats.rx_packets += rx_packets;
ss->stats.rx_bytes += rx_bytes;
- if (lro_enabled)
- lro_flush_all(&rx_done->lro_mgr);
-
/* restock receive rings if needed */
if (ss->rx_small.fill_cnt - ss->rx_small.cnt < myri10ge_fill_thresh)
myri10ge_alloc_rx_pages(mgp, &ss->rx_small,
@@ -1779,7 +1708,6 @@ static const char
myri10ge_gstrings_slice_stats[][ETH_GSTRING_LEN] = {
"tx_pkt_start", "tx_pkt_done", "tx_req", "tx_done",
"rx_small_cnt", "rx_big_cnt",
"wake_queue", "stop_queue", "tx_linearized",
- "LRO aggregated", "LRO flushed", "LRO avg aggr", "LRO no_desc",
};
#define MYRI10GE_NET_STATS_LEN 21
@@ -1880,14 +1808,6 @@ myri10ge_get_ethtool_stats(struct net_device *netdev,
data[i++] = (unsigned int)ss->tx.wake_queue;
data[i++] = (unsigned int)ss->tx.stop_queue;
data[i++] = (unsigned int)ss->tx.linearized;
- data[i++] = ss->rx_done.lro_mgr.stats.aggregated;
- data[i++] = ss->rx_done.lro_mgr.stats.flushed;
- if (ss->rx_done.lro_mgr.stats.flushed)
- data[i++] = ss->rx_done.lro_mgr.stats.aggregated /
- ss->rx_done.lro_mgr.stats.flushed;
- else
- data[i++] = 0;
- data[i++] = ss->rx_done.lro_mgr.stats.no_desc;
}
}
@@ -2271,67 +2191,6 @@ static void myri10ge_free_irq(struct
myri10ge_priv *mgp)
pci_disable_msix(pdev);
}
-static int
-myri10ge_get_frag_header(struct skb_frag_struct *frag, void **mac_hdr,
- void **ip_hdr, void **tcpudp_hdr,
- u64 * hdr_flags, void *priv)
-{
- struct ethhdr *eh;
- struct vlan_ethhdr *veh;
- struct iphdr *iph;
- u8 *va = skb_frag_address(frag);
- unsigned long ll_hlen;
- /* passed opaque through lro_receive_frags() */
- __wsum csum = (__force __wsum) (unsigned long)priv;
-
- /* find the mac header, aborting if not IPv4 */
-
- eh = (struct ethhdr *)va;
- *mac_hdr = eh;
- ll_hlen = ETH_HLEN;
- if (eh->h_proto != htons(ETH_P_IP)) {
- if (eh->h_proto == htons(ETH_P_8021Q)) {
- veh = (struct vlan_ethhdr *)va;
- if (veh->h_vlan_encapsulated_proto != htons(ETH_P_IP))
- return -1;
-
- ll_hlen += VLAN_HLEN;
-
- /*
- * HW checksum starts ETH_HLEN bytes into
- * frame, so we must subtract off the VLAN
- * header's checksum before csum can be used
- */
- csum = csum_sub(csum, csum_partial(va + ETH_HLEN,
- VLAN_HLEN, 0));
- } else {
- return -1;
- }
- }
- *hdr_flags = LRO_IPV4;
-
- iph = (struct iphdr *)(va + ll_hlen);
- *ip_hdr = iph;
- if (iph->protocol != IPPROTO_TCP)
- return -1;
- if (ip_is_fragment(iph))
- return -1;
- *hdr_flags |= LRO_TCP;
- *tcpudp_hdr = (u8 *) (*ip_hdr) + (iph->ihl << 2);
-
- /* verify the IP checksum */
- if (unlikely(ip_fast_csum((u8 *) iph, iph->ihl)))
- return -1;
-
- /* verify the checksum */
- if (unlikely(csum_tcpudp_magic(iph->saddr, iph->daddr,
- ntohs(iph->tot_len) - (iph->ihl << 2),
- IPPROTO_TCP, csum)))
- return -1;
-
- return 0;
-}
-
static int myri10ge_get_txrx(struct myri10ge_priv *mgp, int slice)
{
struct myri10ge_cmd cmd;
@@ -2402,7 +2261,6 @@ static int myri10ge_open(struct net_device *dev)
struct myri10ge_cmd cmd;
int i, status, big_pow2, slice;
u8 *itable;
- struct net_lro_mgr *lro_mgr;
if (mgp->running != MYRI10GE_ETH_STOPPED)
return -EBUSY;
@@ -2513,19 +2371,6 @@ static int myri10ge_open(struct net_device *dev)
goto abort_with_rings;
}
- lro_mgr = &ss->rx_done.lro_mgr;
- lro_mgr->dev = dev;
- lro_mgr->features = LRO_F_NAPI;
- lro_mgr->ip_summed = CHECKSUM_COMPLETE;
- lro_mgr->ip_summed_aggr = CHECKSUM_UNNECESSARY;
- lro_mgr->max_desc = MYRI10GE_MAX_LRO_DESCRIPTORS;
- lro_mgr->lro_arr = ss->rx_done.lro_desc;
- lro_mgr->get_frag_header = myri10ge_get_frag_header;
- lro_mgr->max_aggr = myri10ge_lro_max_pkts;
- lro_mgr->frag_align_pad = 2;
- if (lro_mgr->max_aggr > MAX_SKB_FRAGS)
- lro_mgr->max_aggr = MAX_SKB_FRAGS;
-
/* must happen prior to any irq */
napi_enable(&(ss)->napi);
}
@@ -3143,15 +2988,6 @@ static int myri10ge_set_mac_address(struct
net_device *dev, void *addr)
return 0;
}
-static netdev_features_t myri10ge_fix_features(struct net_device *dev,
- netdev_features_t features)
-{
- if (!(features & NETIF_F_RXCSUM))
- features &= ~NETIF_F_LRO;
-
- return features;
-}
-
static int myri10ge_change_mtu(struct net_device *dev, int new_mtu)
{
struct myri10ge_priv *mgp = netdev_priv(dev);
@@ -3878,7 +3714,6 @@ static const struct net_device_ops
myri10ge_netdev_ops = {
.ndo_get_stats64 = myri10ge_get_stats,
.ndo_validate_addr = eth_validate_addr,
.ndo_change_mtu = myri10ge_change_mtu,
- .ndo_fix_features = myri10ge_fix_features,
.ndo_set_rx_mode = myri10ge_set_multicast_list,
.ndo_set_mac_address = myri10ge_set_mac_address,
};
@@ -4018,7 +3853,7 @@ static int myri10ge_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
netdev->netdev_ops = &myri10ge_netdev_ops;
netdev->mtu = myri10ge_initial_mtu;
- netdev->hw_features = mgp->features | NETIF_F_LRO | NETIF_F_RXCSUM;
+ netdev->hw_features = mgp->features | NETIF_F_RXCSUM;
netdev->features = netdev->hw_features;
if (dac_enabled)
--
1.7.9.5
^ permalink raw reply related
* [PATCH resend net-next 0/3] myri10ge: LRO to GRO conversion
From: Andrew Gallatin @ 2012-11-28 21:20 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Hi,
The following patchset is a re-send of one I sent a few weeks
back, and converts myri10ge from using the old inet_lro
interface to GRO.
Note that a naive LRO->GRO conversion of myri10ge will result in a
performance regression for vlan tagged frames. This is because
myri10ge does not offer hardware vlan tag offload, and because GRO
requires hardware vlan tag offload to aggregate vlan tagged frames.
To address this performance regression, I have implemented vlan tag
popping in the myri10ge driver, as it seems to be the lesser of two
evils. As eric.dumazet@gmail.com commented when I asked about this on
netdev: "Given GRO assumes NIC does hardware vlan
offloading, I guess I would chose to do that. It seems unfortunate to
add vlan decap in GRO path, already very complex."
Andrew Gallatin (3):
myri10ge: Convert from LRO to GRO
myri10ge: Add vlan rx for better GRO perf.
myri10ge: Use skb_fill_page_desc().
drivers/net/ethernet/myricom/Kconfig | 1 -
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 274
++++++----------------
2 files changed, 73 insertions(+), 202 deletions(-)
^ permalink raw reply
* Re: [PATCH v2 3/3] pppoatm: protect against freeing of vcc
From: chas williams - CONTRACTOR @ 2012-11-28 21:20 UTC (permalink / raw)
To: Krzysztof Mazur; +Cc: David Woodhouse, davem, netdev, linux-kernel
In-Reply-To: <20121128201837.GA912@shrek.podlesie.net>
On Wed, 28 Nov 2012 21:18:37 +0100
Krzysztof Mazur <krzysiek@podlesie.net> wrote:
> On Tue, Nov 27, 2012 at 07:28:43PM +0100, Krzysztof Mazur wrote:
> > I think that we should add atm_pop() function that does that and fix all
> > drivers.
> >
>
> I'm sending a patch that implements that idea.
>
> Currently we need two arguments vcc and skb. However, we have reserved
> ATM_SKB(skb)->vcc in skb control block for keeping vcc
> and we can create single argument version vcc_pop(skb). In that case
> we need to move:
>
> ATM_SKB(skb)->vcc = vcc;
>
> from ATM drivers to functions that call atmdev_ops->send().
i dont like the vcc->pop() implementation and at one point i had the
crazy idea of using skb->destructors to handle it. however, i think it
would be necessary to clone the skb's so any existing destructor is
preserved.
> +#define vcc_pop(vcc, skb) vcc_pop_any(vcc, skb)
> +#define vcc_pop_irq(vcc, skb) vcc_pop_any(vcc, skb)
don't define these if you dont plan on using them anway.
^ permalink raw reply
* Re: [PATCH v2 3/3] pppoatm: protect against freeing of vcc
From: David Woodhouse @ 2012-11-28 20:44 UTC (permalink / raw)
To: Krzysztof Mazur; +Cc: chas williams - CONTRACTOR, davem, netdev, linux-kernel
In-Reply-To: <20121128201837.GA912@shrek.podlesie.net>
[-- Attachment #1: Type: text/plain, Size: 246 bytes --]
On Wed, 2012-11-28 at 21:18 +0100, Krzysztof Mazur wrote:
>
> +void vcc_pop_any(struct atm_vcc *vcc, struct sk_buff *skb)
> +{
> + if (vcc->pop)
> + vcc->pop(vcc, skb);
if (vcc && vcc->pop) perhaps?
--
dwmw2
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 6171 bytes --]
^ permalink raw reply
* Re: [PATCH net-next] be2net: fix INTx ISR for interrupt behaviour on BE2
From: Ben Hutchings @ 2012-11-28 20:25 UTC (permalink / raw)
To: Sathya Perla; +Cc: netdev
In-Reply-To: <1354134001.2768.11.camel@bwh-desktop.uk.solarflarecom.com>
On Wed, 2012-11-28 at 20:20 +0000, Ben Hutchings wrote:
> On Wed, 2012-11-28 at 11:20 +0530, Sathya Perla wrote:
> > On BE2 chip, an interrupt may be raised even when EQ is in un-armed state.
> > As a result be_intx()::events_get() and be_poll:events_get() can race and
> > notify an EQ wrongly.
> >
> > Fix this by counting events only in be_poll(). Commit 0b545a629 fixes
> > the same issue in the MSI-x path.
> >
> > But, on Lancer, INTx can be de-asserted only by notifying num evts. This
> > is not an issue as the above BE2 behavior doesn't exist/has never been
> > seen on Lancer.
> [...]
> > @@ -2014,15 +1996,23 @@ static int be_rx_cqs_create(struct be_adapter *adapter)
> >
> > static irqreturn_t be_intx(int irq, void *dev)
> > {
> > - struct be_adapter *adapter = dev;
> > - int num_evts;
> > + struct be_eq_obj *eqo = dev;
> > + struct be_adapter *adapter = eqo->adapter;
> > + int num_evts = 0;
> >
> > - /* With INTx only one EQ is used */
> > - num_evts = event_handle(&adapter->eq_obj[0]);
> > - if (num_evts)
> > - return IRQ_HANDLED;
> > - else
> > - return IRQ_NONE;
> > + /* On Lancer, clear-intr bit of the EQ DB does not work.
> > + * INTx is de-asserted only on notifying num evts.
> > + */
> > + if (lancer_chip(adapter))
> > + num_evts = events_get(eqo);
> > +
> > + /* The EQ-notify may not de-assert INTx rightaway, causing
> > + * the ISR to be invoked again. So, return HANDLED even when
> > + * num_evts is zero.
> > + */
> > + be_eq_notify(adapter, eqo->q.id, false, true, num_evts);
> > + napi_schedule(&eqo->napi);
> > + return IRQ_HANDLED;
> > }
> [...]
>
> You shouldn't unconditionally return IRQ_HANDLED. This prevents
> interrupt storm detection from working, not just for your device but for
> anything else sharing its IRQ.
>
> I understand there is a real problem to be fixed (PCIe write completions
> overtaking INTx deassertion, and maybe a specific hardware bug).
[...]
I was thinking of read completions; there are no write completions to
wait for so you're pretty much guaranteed to get called a second time.
Maybe you should add an MMIO read after calling be_eq_notify().
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* Re: [PATCH net-next] be2net: fix INTx ISR for interrupt behaviour on BE2
From: Ben Hutchings @ 2012-11-28 20:20 UTC (permalink / raw)
To: Sathya Perla; +Cc: netdev
In-Reply-To: <d856540b-bacc-45e3-a7cc-49e7febafb95@CMEXHTCAS1.ad.emulex.com>
On Wed, 2012-11-28 at 11:20 +0530, Sathya Perla wrote:
> On BE2 chip, an interrupt may be raised even when EQ is in un-armed state.
> As a result be_intx()::events_get() and be_poll:events_get() can race and
> notify an EQ wrongly.
>
> Fix this by counting events only in be_poll(). Commit 0b545a629 fixes
> the same issue in the MSI-x path.
>
> But, on Lancer, INTx can be de-asserted only by notifying num evts. This
> is not an issue as the above BE2 behavior doesn't exist/has never been
> seen on Lancer.
[...]
> @@ -2014,15 +1996,23 @@ static int be_rx_cqs_create(struct be_adapter *adapter)
>
> static irqreturn_t be_intx(int irq, void *dev)
> {
> - struct be_adapter *adapter = dev;
> - int num_evts;
> + struct be_eq_obj *eqo = dev;
> + struct be_adapter *adapter = eqo->adapter;
> + int num_evts = 0;
>
> - /* With INTx only one EQ is used */
> - num_evts = event_handle(&adapter->eq_obj[0]);
> - if (num_evts)
> - return IRQ_HANDLED;
> - else
> - return IRQ_NONE;
> + /* On Lancer, clear-intr bit of the EQ DB does not work.
> + * INTx is de-asserted only on notifying num evts.
> + */
> + if (lancer_chip(adapter))
> + num_evts = events_get(eqo);
> +
> + /* The EQ-notify may not de-assert INTx rightaway, causing
> + * the ISR to be invoked again. So, return HANDLED even when
> + * num_evts is zero.
> + */
> + be_eq_notify(adapter, eqo->q.id, false, true, num_evts);
> + napi_schedule(&eqo->napi);
> + return IRQ_HANDLED;
> }
[...]
You shouldn't unconditionally return IRQ_HANDLED. This prevents
interrupt storm detection from working, not just for your device but for
anything else sharing its IRQ.
I understand there is a real problem to be fixed (PCIe write completions
overtaking INTx deassertion, and maybe a specific hardware bug). The
way we dealt with such problems in sfc is to count the number of times
in a row that we don't see any events, and only return IRQ_HANDLED the
first time.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* Re: [PATCH v2 3/3] pppoatm: protect against freeing of vcc
From: Krzysztof Mazur @ 2012-11-28 20:18 UTC (permalink / raw)
To: David Woodhouse, chas williams - CONTRACTOR; +Cc: davem, netdev, linux-kernel
In-Reply-To: <20121127182843.GA11597@shrek.podlesie.net>
On Tue, Nov 27, 2012 at 07:28:43PM +0100, Krzysztof Mazur wrote:
>
> While reviewing your br2684 patch I also found that some ATM drivers does
> not call ->pop() when ->send() fails, they should do:
>
> if (vcc->pop)
> vcc->pop(vcc, skb);
> else
> dev_kfree_skb(skb);
>
> but some drivers just call dev_kfree_skb(skb).
>
> I think that we should add atm_pop() function that does that and fix all
> drivers.
>
I'm sending a patch that implements that idea.
Currently we need two arguments vcc and skb. However, we have reserved
ATM_SKB(skb)->vcc in skb control block for keeping vcc
and we can create single argument version vcc_pop(skb). In that case
we need to move:
ATM_SKB(skb)->vcc = vcc;
from ATM drivers to functions that call atmdev_ops->send().
Krzysiek
-- >8 --
Subject: [PATCH] atm: introduce vcc_pop_*()
The atm drivers to free skb, that they got from ->send(), cannot just use
dev_kfree_skb*(), but they must use something like:
if (vcc->pop)
vcc->pop(vcc, skb);
else
dev_kfree_skb_any(skb);
When vcc->pop is non-NULL, but they must in such case call vcc->pop().
This causes duplicated code in many drivers, and some drivers even forgot
to call vcc->pop() in some error handling code.
The new vcc_pop_*() functions are equivalent to dev_kfree_skb*().
Currently we always use dev_kfree_skb_any() to free, because using
other versions it's probably worthless optimization - in ->pop() we
already use only dev_kfree_skb_any(). The other functions we added
only to not loose information from converting existing code that
uses some non-any dev_kfree_skb*() variants.
Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
---
include/linux/atmdev.h | 11 +++++++++++
net/atm/common.c | 9 +++++++++
2 files changed, 20 insertions(+)
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index c1da539..dedccad 100644
--- a/include/linux/atmdev.h
+++ b/include/linux/atmdev.h
@@ -283,6 +283,17 @@ int atm_pcr_goal(const struct atm_trafprm *tp);
void vcc_release_async(struct atm_vcc *vcc, int reply);
+/*
+ * vcc_pop_*() functions should be used by ATM driver to free transmitted
+ * skbs - skbs that were sent to driver by atmdev_opt->send() function.
+ *
+ * We provide three functions that can be used in different contexts.
+ * See dev_kfree_skb*() documentation for details.
+ */
+void vcc_pop_any(struct atm_vcc *vcc, struct sk_buff *skb);
+#define vcc_pop(vcc, skb) vcc_pop_any(vcc, skb)
+#define vcc_pop_irq(vcc, skb) vcc_pop_any(vcc, skb)
+
struct atm_ioctl {
struct module *owner;
/* A module reference is kept if appropriate over this call.
diff --git a/net/atm/common.c b/net/atm/common.c
index 806fc0a..ad9c77d 100644
--- a/net/atm/common.c
+++ b/net/atm/common.c
@@ -654,6 +654,15 @@ out:
return error;
}
+void vcc_pop_any(struct atm_vcc *vcc, struct sk_buff *skb)
+{
+ if (vcc->pop)
+ vcc->pop(vcc, skb);
+ else
+ dev_kfree_skb_any(skb);
+}
+EXPORT_SYMBOL(vcc_pop_any);
+
unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
{
struct sock *sk = sock->sk;
--
1.8.0.411.g71a7da8
^ permalink raw reply related
* Re: VPN traffic leaks in IPv6/IPv4 dual-stack networks/hosts
From: Fernando Gont @ 2012-11-28 20:14 UTC (permalink / raw)
To: Jan Engelhardt; +Cc: netdev
In-Reply-To: <alpine.LNX.2.01.1211282102240.11155@nerf07.vanv.qr>
On 11/28/2012 05:06 PM, Jan Engelhardt wrote:
>> If the VPN is supposed to secure all traffic, and the VPN just fails to
>> support v6, then for me, it's questionable to have your traffic leak out
>> the VPN just because of that lack of IPv6 support.
>
> Well, what I am saying is that a server may not
> be conveying "all", but only "0.0.0.0/0".
In such scenarios, doing nothing about IPv6 would be an oversight/error,
since IPv4 and IPv6 do not operate isolated from each other.
Cheers,
--
Fernando Gont
e-mail: fernando@gont.com.ar || fgont@si6networks.com
PGP Fingerprint: 7809 84F5 322E 45C7 F1C9 3945 96EE A9EF D076 FFF1
^ permalink raw reply
* Re: VPN traffic leaks in IPv6/IPv4 dual-stack networks/hosts
From: Jan Engelhardt @ 2012-11-28 20:06 UTC (permalink / raw)
To: Fernando Gont; +Cc: netdev
In-Reply-To: <50B66CA1.5050907@gont.com.ar>
On Wednesday 2012-11-28 20:57, Fernando Gont wrote:
>On 11/27/2012 01:10 PM, Jan Engelhardt wrote:
>>> For a project such as OpenVPN, a (portable) fix might be non-trivial.
>>
>> If the VPN server does not even advertise to-be-secured IPv6 prefixes,
>> any client-side fix is questionable.
>
>If the VPN is supposed to secure all traffic, and the VPN just fails to
>support v6, then for me, it's questionable to have your traffic leak out
>the VPN just because of that lack of IPv6 support.
Well, what I am saying is that a server may not
be conveying "all", but only "0.0.0.0/0".
^ permalink raw reply
* [PATCH net-next] cxgb3: Restore dependency on INET
From: Ben Hutchings @ 2012-11-28 20:03 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Fengguang Wu, Divy Le Ray
Commit ff33c0e1885cda44dd14c79f70df4706f83582a0 ('net: Remove bogus
dependencies on INET') wrongly removed this dependency. cxgb3 uses
the arp_send() function defined in net/ipv4/arp.c.
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
drivers/net/ethernet/chelsio/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/chelsio/Kconfig b/drivers/net/ethernet/chelsio/Kconfig
index a71c0f3..d40c994 100644
--- a/drivers/net/ethernet/chelsio/Kconfig
+++ b/drivers/net/ethernet/chelsio/Kconfig
@@ -48,7 +48,7 @@ config CHELSIO_T1_1G
config CHELSIO_T3
tristate "Chelsio Communications T3 10Gb Ethernet support"
- depends on PCI
+ depends on PCI && INET
select FW_LOADER
select MDIO
---help---
--
1.7.7.6
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply related
* Re: VPN traffic leaks in IPv6/IPv4 dual-stack networks/hosts
From: Fernando Gont @ 2012-11-28 19:57 UTC (permalink / raw)
To: Jan Engelhardt; +Cc: netdev
In-Reply-To: <alpine.LNX.2.01.1211271703530.8184@nerf07.vanv.qr>
On 11/27/2012 01:10 PM, Jan Engelhardt wrote:
>> For a project such as OpenVPN, a (portable) fix might be non-trivial.
>
> If the VPN server does not even advertise to-be-secured IPv6 prefixes,
> any client-side fix is questionable.
If the VPN is supposed to secure all traffic, and the VPN just fails to
support v6, then for me, it's questionable to have your traffic leak out
the VPN just because of that lack of IPv6 support.
But YMMV, of couse.
Cheers,
--
Fernando Gont
e-mail: fernando@gont.com.ar || fgont@si6networks.com
PGP Fingerprint: 7809 84F5 322E 45C7 F1C9 3945 96EE A9EF D076 FFF1
^ permalink raw reply
* [PATCH net-next] doc: make the description of how tcp_ecn works more explicit and clear
From: Rick Jones @ 2012-11-28 19:53 UTC (permalink / raw)
To: netdev, davem
From: Rick Jones <rick.jones2@hp.com>
Make the description of how tcp_ecn works a bit more explicit and clear.
Signed-off-by: Rick Jones <rick.jones2@hp.com>
---
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 98ac0d7..2992160 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -199,15 +199,16 @@ tcp_early_retrans - INTEGER
Default: 2
tcp_ecn - INTEGER
- Enable Explicit Congestion Notification (ECN) in TCP. ECN is only
- used when both ends of the TCP flow support it. It is useful to
- avoid losses due to congestion (when the bottleneck router supports
- ECN).
+ Control use of Explicit Congestion Notification (ECN) by TCP.
+ ECN is used only when both ends of the TCP connection indicate
+ support for it. This feature is useful in avoiding losses due
+ to congestion by allowing supporting routers to signal
+ congestion before having to drop packets.
Possible values are:
- 0 disable ECN
- 1 ECN enabled
- 2 Only server-side ECN enabled. If the other end does
- not support ECN, behavior is like with ECN disabled.
+ 0 Disable ECN. Neither initiate nor accept ECN.
+ 1 Always request ECN on outgoing connection attempts.
+ 2 Enable ECN when requested by incomming connections
+ but do not request ECN on outgoing connections.
Default: 2
tcp_fack - BOOLEAN
^ permalink raw reply related
* [167986.379006] WARNING: at net/core/skbuff.c:3444 skb_try_coalesce+0x359/0x390()
From: Sander Eikelenboom @ 2012-11-28 19:52 UTC (permalink / raw)
To: linux-kernel; +Cc: netdev, linux-kernel
On one of my virtual machines i got this splat(running a 3.7.0-rc7):
[167986.378985] ------------[ cut here ]------------
[167986.379006] WARNING: at net/core/skbuff.c:3444 skb_try_coalesce+0x359/0x390()
[167986.379012] Modules linked in:
[167986.379021] Pid: 3231, comm: apache2 Not tainted 3.7.0-rc7-20121126-persistent #1
[167986.379028] Call Trace:
[167986.379032] <IRQ> [<ffffffff8106762a>] warn_slowpath_common+0x7a/0xb0
[167986.379047] [<ffffffff8106f8b5>] ? local_bh_enable+0xb5/0x160
[167986.379053] [<ffffffff81067675>] warn_slowpath_null+0x15/0x20
[167986.379059] [<ffffffff816a4879>] skb_try_coalesce+0x359/0x390
[167986.379067] [<ffffffff8175bdb9>] tcp_try_coalesce+0x69/0xc0
[167986.379073] [<ffffffff8175be64>] tcp_queue_rcv+0x54/0x100
[167986.379079] [<ffffffff8176023f>] ? tcp_rcv_state_process+0x84f/0xc70
[167986.379086] [<ffffffff8176091b>] tcp_rcv_established+0x2bb/0x6a0
[167986.379093] [<ffffffff8176903f>] ? tcp_v4_rcv+0x6cf/0xb10
[167986.379098] [<ffffffff81768625>] tcp_v4_do_rcv+0x135/0x480
[167986.379106] [<ffffffff8180db82>] ? _raw_spin_lock_nested+0x42/0x50
[167986.379112] [<ffffffff8176903f>] ? tcp_v4_rcv+0x6cf/0xb10
[167986.379118] [<ffffffff817692cd>] tcp_v4_rcv+0x95d/0xb10
[167986.379125] [<ffffffff810b24f8>] ? lock_acquire+0xd8/0x100
[167986.379133] [<ffffffff81745aa5>] ? ip_local_deliver_finish+0x45/0x230
[167986.379140] [<ffffffff81745b7a>] ip_local_deliver_finish+0x11a/0x230
[167986.379149] [<ffffffff81745aa5>] ? ip_local_deliver_finish+0x45/0x230
[167986.379156] [<ffffffff81745cc8>] ip_local_deliver+0x38/0x80
[167986.379162] [<ffffffff8174528a>] ip_rcv_finish+0x15a/0x630
[167986.379169] [<ffffffff81745978>] ip_rcv+0x218/0x300
[167986.379176] [<ffffffff816adc9d>] __netif_receive_skb+0x65d/0x8d0
[167986.379182] [<ffffffff816ad785>] ? __netif_receive_skb+0x145/0x8d0
[167986.379189] [<ffffffff810ae6ed>] ? trace_hardirqs_on+0xd/0x10
[167986.379197] [<ffffffff810fb243>] ? free_hot_cold_page+0x1b3/0x1e0
[167986.379204] [<ffffffff816b01f8>] netif_receive_skb+0x28/0xf0
[167986.379210] [<ffffffff816a5d13>] ? __pskb_pull_tail+0x253/0x340
[167986.400668] [<ffffffff814b5945>] xennet_poll+0xad5/0xe10
[167986.400679] [<ffffffff816b0fa6>] net_rx_action+0x136/0x260
[167986.400692] [<ffffffff8106f4f1>] ? __do_softirq+0x71/0x1a0
[167986.400698] [<ffffffff8106f549>] __do_softirq+0xc9/0x1a0
[167986.400705] [<ffffffff818106fc>] call_softirq+0x1c/0x30
[167986.400709] <EOI> [<ffffffff8100fd95>] do_softirq+0x85/0xf0
[167986.400721] [<ffffffff8174c666>] ? ip_finish_output+0x246/0x530
[167986.400727] [<ffffffff8106f953>] local_bh_enable+0x153/0x160
[167986.400733] [<ffffffff8174c666>] ip_finish_output+0x246/0x530
[167986.400739] [<ffffffff8174c4ed>] ? ip_finish_output+0xcd/0x530
[167986.400749] [<ffffffff8174c9a9>] ip_output+0x59/0xe0
[167986.400755] [<ffffffff8174b4c8>] ip_local_out+0x28/0x90
[167986.400760] [<ffffffff8174ba7f>] ip_queue_xmit+0x17f/0x4a0
[167986.400766] [<ffffffff8174b900>] ? ip_send_unicast_reply+0x340/0x340
[167986.400773] [<ffffffff810a1ed7>] ? getnstimeofday+0x47/0xe0
[167986.400779] [<ffffffff816a24c9>] ? __skb_clone+0x29/0x120
[167986.400786] [<ffffffff81761ba0>] tcp_transmit_skb+0x400/0x8d0
[167986.400793] [<ffffffff81764b8c>] tcp_write_xmit+0x22c/0xa70
[167986.400799] [<ffffffff8176543d>] __tcp_push_pending_frames+0x2d/0x90
[167986.400809] [<ffffffff8175577d>] tcp_sendmsg+0x17d/0xe10
[167986.400816] [<ffffffff8177c0c9>] inet_sendmsg+0xa9/0x100
[167986.400822] [<ffffffff8177c020>] ? inet_autobind+0x70/0x70
[167986.400829] [<ffffffff816991d0>] ? sock_destroy_inode+0x40/0x40
[167986.400835] [<ffffffff816992fd>] sock_aio_write+0x12d/0x140
[167986.400842] [<ffffffff81144ceb>] do_sync_readv_writev+0x9b/0xe0
[167986.400849] [<ffffffff8114539f>] do_readv_writev+0xcf/0x1d0
[167986.400855] [<ffffffff811454de>] vfs_writev+0x3e/0x60
[167986.400861] [<ffffffff8114562a>] sys_writev+0x5a/0xc0
[167986.400871] [<ffffffff812b639e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[167986.400878] [<ffffffff8180f469>] system_call_fastpath+0x16/0x1b
[167986.400884] ---[ end trace 2f73b807ee74fc5a ]---
^ permalink raw reply
* [PATCH v3 net-next] sctp: Add support to per-association statistics via a new SCTP_GET_ASSOC_STATS call
From: Michele Baldessari @ 2012-11-28 19:39 UTC (permalink / raw)
To: linux-sctp
Cc: michele, Neil Horman, Thomas Graf, Vlad Yasevich, netdev,
David S. Miller
The current SCTP stack is lacking a mechanism to have per association
statistics. This is an implementation modeled after OpenSolaris'
SCTP_GET_ASSOC_STATS.
Userspace part will follow on lksctp if/when there is a general ACK on
this.
V3:
- Increase ictrlchunks in sctp_assoc_bh_rcv() as well
- Move ipackets++ to sctp_inq_push()
- return 0 when no rto updates took place since the last call
V2:
- Implement partial retrieval of stat struct to cope for future expansion
- Kill the rtxpackets counter as it cannot be precise anyway
- Rename outseqtsns to outofseqtsns to make it clearer that these are out
of sequence unexpected TSNs
- Move asoc->ipackets++ under a lock to avoid potential miscounts
- Fold asoc->opackets++ into the already existing asoc check
- Kill unneeded (q->asoc) test when increasing rtxchunks
- Do not count octrlchunks if sending failed (SCTP_XMIT_OK != 0)
- Don't count SHUTDOWNs as SACKs
- Move SCTP_GET_ASSOC_STATS to the private space API
- Adjust the len check in sctp_getsockopt_assoc_stats() to allow for
future struct growth
- Move association statistics in their own struct
- Update idupchunks when we send a SACK with dup TSNs
- return min_rto in max_rto when RTO has not changed. Also return the
transport when max_rto last changed.
Signed-off: Michele Baldessari <michele@acksyn.org>
---
include/net/sctp/sctp.h | 12 ++++++++
include/net/sctp/structs.h | 36 ++++++++++++++++++++++++
include/net/sctp/user.h | 27 ++++++++++++++++++
net/sctp/associola.c | 10 ++++++-
net/sctp/endpointola.c | 5 +++-
net/sctp/inqueue.c | 3 ++
net/sctp/output.c | 14 ++++++----
net/sctp/outqueue.c | 12 ++++++--
net/sctp/sm_make_chunk.c | 5 ++--
net/sctp/sm_sideeffect.c | 1 +
net/sctp/sm_statefuns.c | 10 +++++--
net/sctp/socket.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++
net/sctp/transport.c | 2 ++
13 files changed, 193 insertions(+), 13 deletions(-)
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index 9c6414f..7fdf298 100644
--- a/include/net/sctp/sctp.h
+++ b/include/net/sctp/sctp.h
@@ -272,6 +272,18 @@ struct sctp_mib {
unsigned long mibs[SCTP_MIB_MAX];
};
+/* helper function to track stats about max rto and related transport */
+static inline void sctp_max_rto(struct sctp_association *asoc,
+ struct sctp_transport *trans)
+{
+ if (asoc->stats.max_obs_rto < (__u64)trans->rto) {
+ asoc->stats.max_obs_rto = trans->rto;
+ memset(&asoc->stats.obs_rto_ipaddr, 0,
+ sizeof(struct sockaddr_storage));
+ memcpy(&asoc->stats.obs_rto_ipaddr, &trans->ipaddr,
+ trans->af_specific->sockaddr_len);
+ }
+}
/* Print debugging messages. */
#if SCTP_DEBUG
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 2b2f61d..c252101 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1312,6 +1312,40 @@ struct sctp_inithdr_host {
__u32 initial_tsn;
};
+/* SCTP_GET_ASSOC_STATS counters */
+struct sctp_priv_assoc_stats {
+ /* Maximum observed rto in the association during subsequent
+ * observations. Value is set to 0 if no RTO measurement took place
+ * The transport where the max_rto was observed is returned in
+ * obs_rto_ipaddr
+ */
+ struct sockaddr_storage obs_rto_ipaddr;
+ __u64 max_obs_rto;
+ /* Total In and Out SACKs received and sent */
+ __u64 isacks;
+ __u64 osacks;
+ /* Total In and Out packets received and sent */
+ __u64 opackets;
+ __u64 ipackets;
+ /* Total retransmitted chunks */
+ __u64 rtxchunks;
+ /* TSN received > next expected */
+ __u64 outofseqtsns;
+ /* Duplicate Chunks received */
+ __u64 idupchunks;
+ /* Gap Ack Blocks received */
+ __u64 gapcnt;
+ /* Unordered data chunks sent and received */
+ __u64 ouodchunks;
+ __u64 iuodchunks;
+ /* Ordered data chunks sent and received */
+ __u64 oodchunks;
+ __u64 iodchunks;
+ /* Control chunks sent and received */
+ __u64 octrlchunks;
+ __u64 ictrlchunks;
+};
+
/* RFC2960
*
* 12. Recommended Transmission Control Block (TCB) Parameters
@@ -1830,6 +1864,8 @@ struct sctp_association {
__u8 need_ecne:1, /* Need to send an ECNE Chunk? */
temp:1; /* Is it a temporary association? */
+
+ struct sctp_priv_assoc_stats stats;
};
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h
index 1b02d7a..9a0ae09 100644
--- a/include/net/sctp/user.h
+++ b/include/net/sctp/user.h
@@ -107,6 +107,7 @@ typedef __s32 sctp_assoc_t;
#define SCTP_GET_LOCAL_ADDRS 109 /* Get all local address. */
#define SCTP_SOCKOPT_CONNECTX 110 /* CONNECTX requests. */
#define SCTP_SOCKOPT_CONNECTX3 111 /* CONNECTX requests (updated) */
+#define SCTP_GET_ASSOC_STATS 112 /* Read only */
/*
* 5.2.1 SCTP Initiation Structure (SCTP_INIT)
@@ -719,6 +720,32 @@ struct sctp_getaddrs {
__u8 addrs[0]; /*output, variable size*/
};
+/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
+ * association stats. All stats are counts except sas_maxrto and
+ * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
+ * the last call. Will return 0 when RTO was not update since last call
+ */
+struct sctp_assoc_stats {
+ sctp_assoc_t sas_assoc_id; /* Input */
+ /* Transport of observed max RTO */
+ struct sockaddr_storage sas_obs_rto_ipaddr;
+ __u64 sas_maxrto; /* Maximum Observed RTO for period */
+ __u64 sas_isacks; /* SACKs received */
+ __u64 sas_osacks; /* SACKs sent */
+ __u64 sas_opackets; /* Packets sent */
+ __u64 sas_ipackets; /* Packets received */
+ __u64 sas_rtxchunks; /* Retransmitted Chunks */
+ __u64 sas_outofseqtsns;/* TSN received > next expected */
+ __u64 sas_idupchunks; /* Dups received (ordered+unordered) */
+ __u64 sas_gapcnt; /* Gap Acknowledgements Received */
+ __u64 sas_ouodchunks; /* Unordered data chunks sent */
+ __u64 sas_iuodchunks; /* Unordered data chunks received */
+ __u64 sas_oodchunks; /* Ordered data chunks sent */
+ __u64 sas_iodchunks; /* Ordered data chunks received */
+ __u64 sas_octrlchunks; /* Control chunks sent */
+ __u64 sas_ictrlchunks; /* Control chunks received */
+};
+
/* These are bit fields for msghdr->msg_flags. See section 5.1. */
/* On user space Linux, these live in <bits/socket.h> as an enum. */
enum sctp_msg_flags {
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index b1ef3bc..ba3f9cc 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -321,6 +321,9 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
asoc->default_timetolive = sp->default_timetolive;
asoc->default_rcv_context = sp->default_rcv_context;
+ /* SCTP_GET_ASSOC_STATS COUNTERS */
+ memset(&asoc->stats, 0, sizeof(struct sctp_priv_assoc_stats));
+
/* AUTH related initializations */
INIT_LIST_HEAD(&asoc->endpoint_shared_keys);
err = sctp_auth_asoc_copy_shkeys(ep, asoc, gfp);
@@ -760,6 +763,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
/* Set the transport's RTO.initial value */
peer->rto = asoc->rto_initial;
+ sctp_max_rto(asoc, peer);
/* Set the peer's active state. */
peer->state = peer_state;
@@ -1152,8 +1156,12 @@ static void sctp_assoc_bh_rcv(struct work_struct *work)
*/
if (sctp_chunk_is_data(chunk))
asoc->peer.last_data_from = chunk->transport;
- else
+ else {
SCTP_INC_STATS(net, SCTP_MIB_INCTRLCHUNKS);
+ asoc->stats.ictrlchunks++;
+ if (chunk->chunk_hdr->type == SCTP_CID_SACK)
+ asoc->stats.isacks++;
+ }
if (chunk->transport)
chunk->transport->last_time_heard = jiffies;
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index 1859e2b..32ab55b 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -480,8 +480,11 @@ normal:
*/
if (asoc && sctp_chunk_is_data(chunk))
asoc->peer.last_data_from = chunk->transport;
- else
+ else {
SCTP_INC_STATS(sock_net(ep->base.sk), SCTP_MIB_INCTRLCHUNKS);
+ if (asoc)
+ asoc->stats.ictrlchunks++;
+ }
if (chunk->transport)
chunk->transport->last_time_heard = jiffies;
diff --git a/net/sctp/inqueue.c b/net/sctp/inqueue.c
index 397296f..7edc89d 100644
--- a/net/sctp/inqueue.c
+++ b/net/sctp/inqueue.c
@@ -105,6 +105,9 @@ void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *chunk)
*/
list_add_tail(&chunk->list, &q->in_chunk_list);
q->immediate.func(&q->immediate);
+
+ if (chunk->asoc)
+ chunk->asoc->stats.ipackets++;
}
/* Peek at the next chunk on the inqeue. */
diff --git a/net/sctp/output.c b/net/sctp/output.c
index 4e90188bf..f5200a2 100644
--- a/net/sctp/output.c
+++ b/net/sctp/output.c
@@ -311,6 +311,8 @@ static sctp_xmit_t __sctp_packet_append_chunk(struct sctp_packet *packet,
case SCTP_CID_SACK:
packet->has_sack = 1;
+ if (chunk->asoc)
+ chunk->asoc->stats.osacks++;
break;
case SCTP_CID_AUTH:
@@ -584,11 +586,13 @@ int sctp_packet_transmit(struct sctp_packet *packet)
*/
/* Dump that on IP! */
- if (asoc && asoc->peer.last_sent_to != tp) {
- /* Considering the multiple CPU scenario, this is a
- * "correcter" place for last_sent_to. --xguo
- */
- asoc->peer.last_sent_to = tp;
+ if (asoc) {
+ asoc->stats.opackets++;
+ if (asoc->peer.last_sent_to != tp)
+ /* Considering the multiple CPU scenario, this is a
+ * "correcter" place for last_sent_to. --xguo
+ */
+ asoc->peer.last_sent_to = tp;
}
if (has_data) {
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 1b4a7f8..379c81d 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -667,6 +667,7 @@ redo:
chunk->fast_retransmit = SCTP_DONT_FRTX;
q->empty = 0;
+ q->asoc->stats.rtxchunks++;
break;
}
@@ -876,12 +877,14 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
if (status != SCTP_XMIT_OK) {
/* put the chunk back */
list_add(&chunk->list, &q->control_chunk_list);
- } else if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN) {
+ } else {
+ asoc->stats.octrlchunks++;
/* PR-SCTP C5) If a FORWARD TSN is sent, the
* sender MUST assure that at least one T3-rtx
* timer is running.
*/
- sctp_transport_reset_timers(transport);
+ if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN)
+ sctp_transport_reset_timers(transport);
}
break;
@@ -1055,6 +1058,10 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
*/
if (asoc->state == SCTP_STATE_SHUTDOWN_PENDING)
chunk->chunk_hdr->flags |= SCTP_DATA_SACK_IMM;
+ if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED)
+ asoc->stats.ouodchunks++;
+ else
+ asoc->stats.oodchunks++;
break;
@@ -1162,6 +1169,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
sack_ctsn = ntohl(sack->cum_tsn_ack);
gap_ack_blocks = ntohs(sack->num_gap_ack_blocks);
+ asoc->stats.gapcnt += gap_ack_blocks;
/*
* SFR-CACC algorithm:
* On receipt of a SACK the sender SHOULD execute the
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index e0f01a4..e1c5fc2 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -804,10 +804,11 @@ struct sctp_chunk *sctp_make_sack(const struct sctp_association *asoc)
gabs);
/* Add the duplicate TSN information. */
- if (num_dup_tsns)
+ if (num_dup_tsns) {
+ aptr->stats.idupchunks += num_dup_tsns;
sctp_addto_chunk(retval, sizeof(__u32) * num_dup_tsns,
sctp_tsnmap_get_dups(map));
-
+ }
/* Once we have a sack generated, check to see what our sack
* generation is, if its 0, reset the transports to 0, and reset
* the association generation to 1
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
index c076956..c957775 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -542,6 +542,7 @@ static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands,
*/
if (!is_hb || transport->hb_sent) {
transport->rto = min((transport->rto * 2), transport->asoc->rto_max);
+ sctp_max_rto(asoc, transport);
}
}
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index b6adef8..ecf7a17 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -6127,6 +6127,8 @@ static int sctp_eat_data(const struct sctp_association *asoc,
/* The TSN is too high--silently discard the chunk and
* count on it getting retransmitted later.
*/
+ if (chunk->asoc)
+ chunk->asoc->stats.outofseqtsns++;
return SCTP_IERROR_HIGH_TSN;
} else if (tmp > 0) {
/* This is a duplicate. Record it. */
@@ -6226,10 +6228,14 @@ static int sctp_eat_data(const struct sctp_association *asoc,
/* Note: Some chunks may get overcounted (if we drop) or overcounted
* if we renege and the chunk arrives again.
*/
- if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED)
+ if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) {
SCTP_INC_STATS(net, SCTP_MIB_INUNORDERCHUNKS);
- else {
+ if (chunk->asoc)
+ chunk->asoc->stats.iuodchunks++;
+ } else {
SCTP_INC_STATS(net, SCTP_MIB_INORDERCHUNKS);
+ if (chunk->asoc)
+ chunk->asoc->stats.iodchunks++;
ordered = 1;
}
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 2e89706..5d53b27 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -611,6 +611,7 @@ static int sctp_send_asconf_add_ip(struct sock *sk,
2*asoc->pathmtu, 4380));
trans->ssthresh = asoc->peer.i.a_rwnd;
trans->rto = asoc->rto_initial;
+ sctp_max_rto(asoc, trans);
trans->rtt = trans->srtt = trans->rttvar = 0;
sctp_transport_route(trans, NULL,
sctp_sk(asoc->base.sk));
@@ -5635,6 +5636,71 @@ static int sctp_getsockopt_paddr_thresholds(struct sock *sk,
return 0;
}
+/*
+ * SCTP_GET_ASSOC_STATS
+ *
+ * This option retrieves local per endpoint statistics. It is modeled
+ * after OpenSolaris' implementation
+ */
+static int sctp_getsockopt_assoc_stats(struct sock *sk, int len,
+ char __user *optval,
+ int __user *optlen)
+{
+ struct sctp_assoc_stats sas;
+ struct sctp_association *asoc = NULL;
+
+ /* User must provide at least the assoc id */
+ if (len < sizeof(sctp_assoc_t))
+ return -EINVAL;
+
+ if (copy_from_user(&sas, optval, len))
+ return -EFAULT;
+
+ asoc = sctp_id2assoc(sk, sas.sas_assoc_id);
+ if (!asoc)
+ return -EINVAL;
+
+ sas.sas_rtxchunks = asoc->stats.rtxchunks;
+ sas.sas_gapcnt = asoc->stats.gapcnt;
+ sas.sas_outofseqtsns = asoc->stats.outofseqtsns;
+ sas.sas_osacks = asoc->stats.osacks;
+ sas.sas_isacks = asoc->stats.isacks;
+ sas.sas_octrlchunks = asoc->stats.octrlchunks;
+ sas.sas_ictrlchunks = asoc->stats.ictrlchunks;
+ sas.sas_oodchunks = asoc->stats.oodchunks;
+ sas.sas_iodchunks = asoc->stats.iodchunks;
+ sas.sas_ouodchunks = asoc->stats.ouodchunks;
+ sas.sas_iuodchunks = asoc->stats.iuodchunks;
+ sas.sas_idupchunks = asoc->stats.idupchunks;
+ sas.sas_opackets = asoc->stats.opackets;
+ sas.sas_ipackets = asoc->stats.ipackets;
+
+ /* New high max rto observed, will return 0 if not a single
+ * RTO update took place. obs_rto_ipaddr will be bogus
+ * in such a case
+ */
+ sas.sas_maxrto = asoc->stats.max_obs_rto;
+ memcpy(&sas.sas_obs_rto_ipaddr, &asoc->stats.obs_rto_ipaddr,
+ sizeof(struct sockaddr_storage));
+
+ /* Mark beginning of a new observation period */
+ asoc->stats.max_obs_rto = 0;
+
+ /* Allow the struct to grow and fill in as much as possible */
+ len = min_t(size_t, len, sizeof(sas));
+
+ if (put_user(len, optlen))
+ return -EFAULT;
+
+ SCTP_DEBUG_PRINTK("sctp_getsockopt_assoc_stat(%d): %d\n",
+ len, sas.sas_assoc_id);
+
+ if (copy_to_user(optval, &sas, len))
+ return -EFAULT;
+
+ return 0;
+}
+
SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname,
char __user *optval, int __user *optlen)
{
@@ -5776,6 +5842,9 @@ SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname,
case SCTP_PEER_ADDR_THLDS:
retval = sctp_getsockopt_paddr_thresholds(sk, optval, len, optlen);
break;
+ case SCTP_GET_ASSOC_STATS:
+ retval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen);
+ break;
default:
retval = -ENOPROTOOPT;
break;
diff --git a/net/sctp/transport.c b/net/sctp/transport.c
index 953c21e..8c6920d 100644
--- a/net/sctp/transport.c
+++ b/net/sctp/transport.c
@@ -350,6 +350,7 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt)
/* 6.3.1 C3) After the computation, update RTO <- SRTT + 4 * RTTVAR. */
tp->rto = tp->srtt + (tp->rttvar << 2);
+ sctp_max_rto(tp->asoc, tp);
/* 6.3.1 C6) Whenever RTO is computed, if it is less than RTO.Min
* seconds then it is rounded up to RTO.Min seconds.
@@ -620,6 +621,7 @@ void sctp_transport_reset(struct sctp_transport *t)
t->burst_limited = 0;
t->ssthresh = asoc->peer.i.a_rwnd;
t->rto = asoc->rto_initial;
+ sctp_max_rto(asoc, t);
t->rtt = 0;
t->srtt = 0;
t->rttvar = 0;
--
1.8.0
^ permalink raw reply related
* pull request: wireless-next 2012-11-28
From: John W. Linville @ 2012-11-28 19:23 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 47014 bytes --]
commit 79d38f7d6cf545ff838dd5227869f3916d1d100d
Dave,
This pull request is intended for the 3.8 stream. It is a bit large
-- I guess Thanksgiving got me off track! At least the code got to
spend some time in linux-next... :-)
This includes the usual batch of pulls for Bluetooth, NFC, and mac80211
as well as iwlwifi. Also here is an ath6kl pull, and a new driver
in the rtlwifi family. The brcmfmac, brcmsmac, ath9k, and mwl8k get
their usual levels of attention, and a handful of other updates tag
along as well.
For more detail on the pulls, please see below...
On Bluetooth, Gustavo says:
"Another set of patches for integration in wireless-next. There are two big set
of changes in it: Andrei Emeltchenko and Mat Martineau added more patches
towards a full Bluetooth High Speed support and Johan Hedberg improve the
single mode support for Bluetooth dongles. Apart from that we have small fixes
and improvements."
...and:
"A few patches to 3.8. The majority of the work here is from Andrei on the High
Speed support. Other than that Johan added support for setting LE advertising
data. The rest are fixes and clean ups and small improvements like support for
a new broadcom hardware."
On mac80211, Johannes says:
"This is for mac80211, for -next (3.8). Plenty of changes, as you can see
below. Some fixes for previous changes like the export.h include, the
beacon listener fix from Ben Greear, etc. Overall, no exciting new
features, though hwsim does gain channel context support for people to
try it out and look at."
...and...:
"This one contains the mac80211-next material. Apart from a few small new
features and cleanups I have two fixes for the channel context code. The
RX_END timestamp support will probably be reworked again as Simon Barber
noted the calculations weren't really valid, but the discussions there
are still going on and it's better than what we had before."
...and:
"Please pull (see below) to get the following changes:
* a fix & a debug aid in IBSS from Antonio,
* mesh cleanups from Marco,
* a few bugfixes for some of my previous patches from Arend and myself,
* and the big initial VHT support patchset"
And on iwlwifi, Johannes says:
"In addition to the previous four patches that I'm not resending,
we have a number of cleanups, message reduction, firmware error
handling improvements (yes yes... we need to fix them instead)
and various other small things all over."
...and:
"In his quest to try to understand the current iwlwifi problems (like
stuck queues etc.) Emmanuel has first cleaned up the PCIe code, I'm
including his changes in this pull request. Other than that I only have
a small cleanup from Sachin Kamat to remove a duplicate include and a
bugfix to turn off MFP if software crypto is enabled, but this isn't
really interesting as MFP isn't supported right now anyway."
On NFC, Samuel says:
"With this one we have:
- A few HCI improvements in preparation for an upcoming HCI chipset support.
- A pn544 code cleanup after the old driver was removed.
- An LLCP improvement for notifying user space when one peer stops ACKing I
frames."
On ath6kl, Kalle says:
"Major changes this time are firmware recover support to gracefully
handle if firmware crashes, support for changing regulatory domain and
support for new ar6004 hardware revision 1.4. Otherwise there are just
smaller fixes or cleanups from different people."
Thats about it... :-) Please let me know if there are problems!
Thanks,
John
---
The following changes since commit 03f52a0a554210d5049eeed9f1bb29047dc807cb:
ip6mr: Add sizeof verification to MRT6_ASSERT and MT6_PIM (2012-11-26 17:35:58 -0500)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git for-davem
for you to fetch changes up to 79d38f7d6cf545ff838dd5227869f3916d1d100d:
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem (2012-11-28 10:56:03 -0500)
----------------------------------------------------------------
Aarthi Thiruvengadam (1):
ath6kl: use custom MAC address for newly created interfaces
Amitkumar Karwar (2):
nl/cfg80211: advertise OBSS scan requirement
mwifiex: add support for SDIO card reset
Andi Kleen (1):
ath6kl: fix uninitialized variable in ath6kl_sdio_enable_scatter()
Andrei Emeltchenko (27):
Bluetooth: trivial: Remove unneeded assignment
Bluetooth: Use helper function sending EFS conf rsp
Bluetooth: AMP: Process Physical Link Complete evt
Bluetooth: AMP: Process Logical Link complete evt
Bluetooth: Add put(hcon) when deleting hchan
Bluetooth: trivial: Fix braces style and remove empty line
Bluetooth: Save hs_hchan instead of hs_hcon in loglink complete
Bluetooth: Return correct L2CAP response type
Bluetooth: Derive remote and local amp id from chan struct
Bluetooth: AMP: Add Logical Link Create function
Bluetooth: AMP: Process Disc Logical Link
Bluetooth: AMP: Process Disc Physical Link Complete evt
Bluetooth: AMP: Remove hci_conn receiving error command status
Bluetooth: Disconnect logical link when deleting chan
Bluetooth: AMP: Check for hs_hcon instead of ctrl_id
Bluetooth: AMP: Use l2cap_physical_cfm in phylink complete evt
Bluetooth: Process Create Chan Request
Bluetooth: Rename ctrl_id to remote_amp_id
Bluetooth: Use __l2cap_no_conn_pending helper
Bluetooth: Remove unneeded local_amp_id initialization
Bluetooth: Refactor locking in amp_physical_cfm
Bluetooth: Disable FCS only for new HS channels
Bluetooth: trivial: Use __constant for constants
Bluetooth: Fix sending L2CAP Create Chan Req
Bluetooth: Set local_amp_id after getting Phylink Completed evt
Bluetooth: Improve error message printing
Bluetooth: AMP: Set no FCS for incoming L2CAP chan
Antonio Quartulli (6):
nl/cfg80211: add the NL80211_CMD_SET_MCAST_RATE command
mac80211: implement set_mcast_rate() callback
cfg80211: store the ssid into wirless_dev in AP mode
nl80211: send the NL80211_ATTR_SSID in nl80211_send_iface()
mac80211: in ADHOC don't update last_rx if sta is not authorized
mac80211: in ADHOC print debug message for every Auth message
Arend van Spriel (21):
wireless: add peer-to-peer related definitions
brcmfmac: remove obsolete structure ap_info
brcmfmac: simplify if-else condition in brcmf_cfg80211_escan()
brcmfmac: restrict error condition in brcmf_inform_bss()
brcmfmac: make pointer type constant in brcmf_set_management_ie()
brcmfmac: change parameter of brcmf_set_management_ie()
brcmfmac: remove obsolete variable from brcmf_cfg80211_start_ap()
brcmfmac: fix NULL pointer access in brcmf_create_iovar()
brcmfmac: fix build regression
brcmfmac: use struct brcmf_if parameter in firmware event callbacks
brcmfmac: rework firmware event handling code
brcmfmac: change parameter in brcmf_add_if() function
brcmfmac: fix for multiple netdevice interface support
brcmfmac: correct handling IF firmware event
brcmfmac: change mac address parameter in brcmf_add_if()
brcmfmac: remove mac address validation from brcmf_net_attach()
brcmfmac: fix wrong usage of unaligned include file
brcmfmac: ignore IF event if it is a add for ifidx 0
brcmfmac: restructure handling of IF event
mac80211: check add_chanctx callback before use in ieee80211_reconfig
cfg80211: change function signature of cfg80211_get_p2p_attr()
Assaf Krauss (1):
iwlwifi: remove MFP Kconfig option
Avinash Patil (1):
mwifiex: add multi-queue support
Bala Shanmugam (1):
ath6kl: Add support for AR6004 hardware version 1.3
Ben Greear (1):
cfg80211: allow registering more than one beacon listener
Bing Zhao (1):
mwifiex: process RX packets in SDIO IRQ thread directly
Christian Lamparter (1):
p54: improve TSF timestamp precision
Dan Carpenter (1):
ath5k: precedence error in ath5k_hw_nic_wakeup()
Dengke Qiu (1):
ath6kl: fix link speed when using sgi
Denis Kirjanov (1):
Bluetooth:Replace list_for_each with list_for_each_entry() helper
Eliad Peller (1):
mac80211: make remain_on_channel() op pass vif param
Emmanuel Grumbach (20):
iwlwifi: don't leak Tx skb when a queue is disabled
iwlwifi: handle RFKILL logic in the transport layer
iwlwifi: don't call stop_device twice
iwlwifi: check the SCD conf from ALIVE response
iwlwifi: zero trans_cfg before settings its fields
mac80211: include export.h in aes_cmac
iwlwifi: don't warn if transport's allocation failed
iwlwifi: don't enable interrupt as a W/A when MSI is enabled
iwlwifi: add comments for the PCIe transport statuses
iwlwifi: rename functions in transport layer
iwlwifi: init the replenish work in rx_init
iwlwifi: continue clean up - pcie/rx.c
iwlwifi: continue clean up - pcie/trans.c
iwlwifi: continue clean up - pcie/tx.c
iwlwifi: merge 2 functions in reclaim flow
iwlwifi: make iwl_queue_used return bool
iwlwifi: more cleanup in pcie/rx.c
iwlwifi: make iwl_pcie_rxq_inc_wr_ptr static
iwlwifi: update the RB_TIMEOUT to 0x11
iwlwifi: remove effectless assignment
Eric Lapuyade (5):
NFC: Fix hci_connect_gate() when a pre-opened pipe is passed
NFC: Ignore err when chip doesn't implement HW/SW info registers
NFC: Dot not dispatch HCI event received on unopened pipe
NFC: Export nfc_hci_result_to_errno as it can be needed by HCI drivers
NFC: Export nfc_hci_sak_to_protocol()
Franky Lin (5):
brcmfmac: use dynamically allocated control frame buffer
brcmfmac: decrease the range of SDIO access lock
brcmfmac: protect consecutive SDIO access with sdio_claim_host
brcmfmac: remove brcmf_sdbrcm_wait_for_event
brcmfmac: change return type of brcmf_sdio_hdparser
Gustavo Padovan (1):
Bluetooth: Replace *_init() for *_setup()
Hante Meuleman (20):
brcmfmac: remove obsolete i-scan and clean up related code.
brcmfmac: use fwil for netdev callbacks.
brcmfmac: handle exceptions in brcmf_bus_start correct.
brcmfmac: use wait_event_timeout for 8021x pending count
brcmfmac: fix pkt_filter sizeof calculation.
brcmfmac: remove obsolete function brcmf_c_mkiovar
brcmfmac: return immediately error for out of range key_idx.
brcmfmac: check bus state to be data before sending data.
brcmfmac: on halting driver check before release or free.
brcmfmac: add dedicated USB log level.
brcmfmac: cleanup of usb firmware download routines
brcmfmac: usb suspend/resume.
brcmfmac: fix NULL pointer access in brcmf_fweh_detach()
brcmfmac: Any error should result in failure of probe.
brcmfmac: Handle mmc exceptions during init correct.
brcmfmac: sdio unload fix.
brcmfmac: avoid usage of func->card->dev in sdio probe.
brcmfmac: sdio module load fix.
brcmfmac: limit hex dump on fwil.
brcmfmac: code cleanup
Harro Haan (1):
add Marvell 88W8688 support to libertas_sdio
Hauke Mehrtens (1):
bcma: add more package IDs
Jaume Delclòs (1):
Wireless: rt2x00: Add device id for Sweex LW323 to rt2800usb.c
Jeff Cook (1):
Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
Joe Perches (2):
wireless: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
brcmsmac: Add __printf verification to logging prototypes
Johan Hedberg (19):
Bluetooth: Add initial support for LE-only controllers
Bluetooth: Fix LE MTU reporting for HCIGETDEVINFO
Bluetooth: Add setting of the LE event mask
Bluetooth: Read adversiting channel TX power during init sequence
Bluetooth: Fix HCI command sending when powering on LE-only adapters
Bluetooth: mgmt: Restrict BR/EDR settings to BR/EDR-only adapters
Bluetooth: Fix updating host feature bits for LE
Bluetooth: Add missing feature test macros
Bluetooth: Make use feature test macros
Bluetooth: Add flag for LE GAP Peripheral role
Bluetooth: Disallow LE scanning and connecting in peripheral role
Bluetooth: Fix setting host feature bits for SSP
Bluetooth: Fix sending unnecessary HCI_Write_SSP_Mode command
Bluetooth: Fix unnecessary EIR update during powering on
Bluetooth: Fix sending unnecessary HCI_LE_Host_Enable
Bluetooth: Fix parameter order of hci_get_route
Bluetooth: Use proper invalid value for tx_power
Bluetooth: Add support for setting LE advertising data
Bluetooth: Fix updating advertising state flags and data
Johannes Berg (61):
mac80211: a few formatting fixes
mac80211: move AP teardown code to correct place
mac80211: add explicit AP/GO driver operations
iwlwifi: support host command with copied data
iwlwifi: clarify NOCOPY/DUP documentation
Merge remote-tracking branch 'wireless-next/master' into mac80211-next
mac80211_hwsim: allow using channel contexts
nl80211: move "can set channel" check
cfg80211: allow per interface TX power setting
mac80211: handle TX power per virtual interface
mac80211_hwsim: print per interface TX power
mac80211: combine status/drop reporting
mac80211: use a counter for remain-on-channel cookie
mac80211: send deauth only with channel context
iwlwifi: fix flush command
iwlwifi: don't clear CTL_AMPDU on frame status
iwlwifi: fix queue flush confusion
iwlwifi: use list_first_entry
wireless: add utility function to get P2P attribute
mac80211: pass P2P powersave parameters to driver
iwlwifi: remove EEPROM version message by default
iwlwifi: remove SKU/antenna messages by default
iwlwifi: remove useless messages
iwlwifi: fix typo in RX data tracing
mac80211: use mac_pton
mac80211: fix race in TKIP MIC test debugfs file
mac80211: use kstrtoull return value
mac80211: fix TX error path
mac80211: add debugfs file for HW queues
mac80211: remove unused tracepoint
mac80211: call driver method when restart completes
mac80211: clarify interface iteration and make it configurable
mac80211: reassign channel contexts before stations
iwlwifi: return commands with error on FW error
mwifiex: don't select lib80211
lib80211: hide Kconfig symbol
iwlwifi: disallow MFP with software crypto
mac80211: use CMAC_PN_LEN
mac80211: introduce IEEE80211_NUM_TIDS and use it
mac80211: support radiotap vendor namespace RX data
mac80211: fix channel context suspend/reconfig handling
mac80211: fix radiotap vendor area skipping
mac80211: fix RX chains configuration
mac80211: rename IEEE80211_STA_DISABLE_11N to HT
mac80211: disable HT advertising unless AP supports it
cfg80211: use DS or HT operation IEs to determine BSS channel
mac80211: fix managed mode channel flags handling
cfg80211: remove remain-on-channel channel type
nl80211: add documentation for channel type
cfg80211: pass a channel definition struct
nl80211/cfg80211: support VHT channel configuration
mac80211: convert to channel definition struct
nl80211/cfg80211: add VHT MCS support
mac80211: support drivers reporting VHT RX
mac80211: support VHT rates in TX info
wireless: add definitions for VHT MCS support
mac80211_hwsim: advertise VHT support
mac80211_hwsim: remove printing scan config
cfg80211: fix some tracing output issues
iwlegacy: initialize rx_status
iwlwifi: initialize rx_status
John W. Linville (14):
Merge branch 'for-upstream' of git://git.kernel.org/.../bluetooth/bluetooth-next
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211-next
Merge branch 'for-john' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
Merge branch 'for-linville' of git://github.com/kvalo/ath6kl
Merge tag 'nfc-next-3.8-2' of git://git.kernel.org/.../sameo/nfc-3.0
brcmfmac: check return from kzalloc in brcmf_fweh_process_event
brcmfmac: include linux/vmalloc.h from usb.c
Merge branch 'master' of git://git.kernel.org/.../linville/wireless
Merge branch 'for-upstream' of git://git.kernel.org/.../bluetooth/bluetooth-next
Merge branch 'for-john' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211-next
rtl8723ae: fix build break from "mac80211: support RX_FLAG_MACTIME_END"
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211-next
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next into for-davem
Jouni Malinen (1):
cfg80211: Add TDLS event to allow drivers to request operations
Julia Lawall (1):
drivers/net/wireless/ath/ath6kl/hif.c: drop if around WARN_ON
Kalle Valo (5):
ath6kl: move ath6kl_wmi_startscan_cmd()
ath6kl: refactor wmi scan command
ath6kl: add support for changing contry code
ath6kl: fix incorrect use of IEEE80211_NUM_BANDS
ath6kl: support NL80211_USER_REG_HINT_CELL_BASE events
Larry Finger (3):
rtlwifi: rtl8723ae: Add new driver
rtlwifi: Modify files for addition of rtl8723ae
rtlwifi: rtl8192ce: rtl8192cu: rtl8192se: rtl81723ae: Turn on building of the new driver
Luis R. Rodriguez (1):
carl9170: kill MODULE_VERSION
Marcel Holtmann (3):
NFC: Remove unused details from pn544.h header file
NFC: Move pn544.h to linux/platform_data/
MAINTAINERS: Add reference to pn544.h platform data header
Marco Porsch (3):
mac80211: move Mesh Capability field definition to ieee80211.h
mac80211: refactor ieee80211_set_qos_hdr
mac80211: remove mesh config macros from mesh_plink.c
Marina Makienko (1):
ath6kl: check usb_register() return value
Mat Martineau (18):
Bluetooth: Add new l2cap_chan struct members for high speed channels
Bluetooth: Add L2CAP create channel request handling
Bluetooth: Remove unnecessary intermediate function
Bluetooth: Lookup channel structure based on DCID
Bluetooth: Channel move request handling
Bluetooth: Add new ERTM receive states for channel move
Bluetooth: Add move channel confirm handling
Bluetooth: Add state to hci_chan
Bluetooth: Move channel response
Bluetooth: Add logical link confirm
Bluetooth: Add move confirm response handling
Bluetooth: Handle physical link completion
Bluetooth: Flag ACL frames as complete for AMP controllers
Bluetooth: Do not send data during channel move
Bluetooth: Configure appropriate timeouts for AMP controllers
Bluetooth: Ignore BR/EDR packet size constraints when fragmenting for AMP
Bluetooth: Do not retransmit data during a channel move
Bluetooth: Start channel move when socket option is changed
Mohammed Shafi Shajakhan (7):
ath6kl: trivial cleanup on interface type selection
ath6kl: Remove obselete USB device related checks
ath6kl: Return error case when ath6kl_usb_alloc_pipe_resources fails
ath6kl: Rename ATH6KL_HW_FLAG_64BIT_RATES
ath6kl: Fix inactivity timeout for AR6004
ath6kl: Fix mapping uplink endpoint for AR6004
ath6kl: Add a hardware flag for SDIO CRC error workaround
Nishant Sarmukadam (3):
mwl8k: Unmap the pci DMA address in xmit error path
mwl8k: Do not expire eapol frames
mwl8k: Set packet timestamp to 0 when life time expiry is not used
Pandiyarajan Pitchaimuthu (5):
ath6kl: Make use of return value from ath6kl_diag_read()
ath6kl: Max clients reached notification
ath6kl: Blocked client notification
ath6kl: Array index out of bounds check
ath6kl: Check for valid endpoint ID in ath6kl_tx_complete()
Piotr Haber (1):
ssb: fix SPROM offset
Pontus Fuchs (2):
ar5523: Fix sparse endianness warnings
ar5523: Don't dereference sta if NULL
Raja Mani (3):
ath6kl: Avoid null ptr dereference while printing reg domain pair
ath6kl: Check for valid rate table index
ath6kl: Check for valid endpoint ID values in ath6kl_control_tx()
Rajkumar Manoharan (4):
ath9k_hw: Fix wrong peak detector DC offset
ath9k: Process FATAL interrupts at first
ath9k: Fix MCI reset in BT cal_req
ath9k: stomp audio profiles on weak signal strength
Sachin Kamat (1):
iwlwifi: Remove duplicate inclusion of iwl-trans.h in pcie/drv.c
Samuel Ortiz (3):
NFC: Copy user space buffer when sending UI frames
NFC: Stop sending LLCP frames when tx queues are getting too deep
NFC: Queue a copy of the transmitted LLCP skb
Seth Forshee (24):
brcmsmac: Introduce AMPDU sessions for assembling AMPDUs
brcmsmac: Don't weight AMPDU packets in txfifo
brcmsmac: Add helper function for updating txavail count
brcmsmac: Remove unimplemented flow control functions
brcmsmac: Use IEEE 802.11 AC levels for pktq precedence levels
brcmsmac: Remove internal tx queue
brcmsmac: Use correct descriptor count when calculating next rx descriptor
brcmsmac: Reduce number of entries in tx DMA rings
brcm80211: Allow trace support to be enabled separately from debug
brcm80211: Convert log message levels to debug levels
brcmsmac: Add module parameter for setting the debug level
brcmsmac: Add support for writing debug messages to the trace buffer
brcmsmac: Use debug macros for general error and debug statements
brcmsmac: Add brcms_dbg_mac80211() debug macro
brcmsmac: Add rx and tx debug macros
brcmsmac: Add brcms_dbg_int() debug macro
brcmsmac: Add brcms_dbg_dma() debug macro
brcmsmac: Add brcms_dbg_ht() debug macro
brcmsmac: Improve tx trace and debug support
brcmsmac: Add tracepoint for macintstatus
brcmsmac: Add tracepoint for AMPDU session information
brcmsmac: Remove some noisy and uninformative debug messages
brcmsmac: Remove unused wlc_prio2prec_map and _BRCMS_PREC_* constants
brcmsmac: Remove stray argument from debug macro
Stanislav Yakovlev (2):
net/wireless: ipw2x00: remove unreachable code
net/wireless: ipw2200: introduce ipw_set_geo function
Sujith Manoharan (11):
ath9k_hw: Update AR9485 initvals
ath9k: Remove unused workaround
ath9k_hw: Program filter coefficients correctly
ath9k: Fix BTCOEX debugfs file usage
mac80211: Add debugfs callbacks for station addition/removal
ath9k/ath9k_htc: Remove WME macros
ath9k: Fix the 'xmit' debugfs file
ath9k: Add a debugfs file to dump queue statistics
ath9k: Fill remove_sta_debugfs() callback
ath9k: Fix rate control debugging
ath9k: Remove 'stations' debugfs file
Syam Sidhardhan (5):
Bluetooth: trivial: Remove newline before EOF
Bluetooth: Replace include linux/module.h with linux/export.h
Bluetooth: Remove unnecessary include export.h
Bluetooth: mgmt: Use __constant when dealing with constants
ath5k: Use module_platform_driver macro for ahb.c
Szymon Janc (2):
Bluetooth: Increase HCI command tx timeout
Bluetooth: Remove OOB data if device was discovered in band
Thomas Pedersen (8):
ath6kl: support rssi threshold for sched scan
ath6kl: support TX error rate notification
ath6kl: configure wow filters per-vif
ath6kl: restart concurrent vifs on failed connect
ath6kl: reconfigure RSN capabilities when restarting AP
ath6kl: rework scheduled scan
ath6kl: consolidate WoW pattern length
mac80211: support RX_FLAG_MACTIME_END
Vasanthakumar Thiagarajan (12):
ath6kl: Fix potential skb double free in ath6kl_wmi_sync_point()
ath6kl: Fix potential memory leak in ath6kl_tx_complete()
ath6kl: Refactor ath6kl_init_hw_start() and ath6kl_init_hw_stop()
ath6kl: Recover from fw crash
ath6kl: Add support to detect fw error through heart beat
ath6kl: Recover from "wmi ctrl ep is full" condition
ath6kl: Fix bug in scheduling hb_timer
ath6kl: Remove unnecessary recovery state check in ath6kl_recovery_hb_timer()
ath6kl: Add a bit to ath6kl_dev_state for recovery cleanup state
ath6kl: Make fw error recovery configurable
ath6kl: Fix reconnection issue after recovery
ath6kl: Fix random rx data corruption
Wei Yongjun (4):
ath6kl: use list_move_tail instead of list_del/list_add_tail
ar5523: use module_usb_driver to simplify the code
brcmfmac: remove duplicated include from dhd_dbg.c
rtlwifi: use eth_zero_addr() to assign zero address
Yogesh Ashok Powar (3):
mwl8k: defining interface combinations
mwl8k: recheck if station still has valid rates
mwl8k: Send BASTREAM firmware commands per vif
Zefir Kurtisi (3):
ath9k: resolve name collision in DFS detector
ath9k: fix memory leak in DFS pattern detector
ath9k: [DFS] add pulse width tolerance for ETSI
MAINTAINERS | 1 +
drivers/bluetooth/btusb.c | 1 +
drivers/net/wireless/at76c50x-usb.c | 85 +-
drivers/net/wireless/ath/ar5523/ar5523.c | 60 +-
drivers/net/wireless/ath/ar5523/ar5523_hw.h | 2 +-
drivers/net/wireless/ath/ath5k/ahb.c | 15 +-
drivers/net/wireless/ath/ath5k/base.c | 12 +-
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 5 +-
drivers/net/wireless/ath/ath5k/reset.c | 6 +-
drivers/net/wireless/ath/ath6kl/Kconfig | 9 +
drivers/net/wireless/ath/ath6kl/Makefile | 1 +
drivers/net/wireless/ath/ath6kl/cfg80211.c | 406 ++--
drivers/net/wireless/ath/ath6kl/cfg80211.h | 1 -
drivers/net/wireless/ath/ath6kl/core.c | 21 +
drivers/net/wireless/ath/ath6kl/core.h | 69 +-
drivers/net/wireless/ath/ath6kl/debug.h | 1 +
drivers/net/wireless/ath/ath6kl/hif.c | 12 +-
drivers/net/wireless/ath/ath6kl/htc_mbox.c | 13 +-
drivers/net/wireless/ath/ath6kl/htc_pipe.c | 14 +-
drivers/net/wireless/ath/ath6kl/init.c | 92 +-
drivers/net/wireless/ath/ath6kl/main.c | 55 +-
drivers/net/wireless/ath/ath6kl/recovery.c | 160 ++
drivers/net/wireless/ath/ath6kl/sdio.c | 27 +-
drivers/net/wireless/ath/ath6kl/txrx.c | 47 +-
drivers/net/wireless/ath/ath6kl/usb.c | 32 +-
drivers/net/wireless/ath/ath6kl/wmi.c | 284 ++-
drivers/net/wireless/ath/ath6kl/wmi.h | 78 +-
drivers/net/wireless/ath/ath9k/ar9003_calib.c | 76 +
drivers/net/wireless/ath/ath9k/ar9003_hw.c | 22 +-
drivers/net/wireless/ath/ath9k/ar9003_mci.c | 1 -
drivers/net/wireless/ath/ath9k/ar9003_phy.c | 2 +-
drivers/net/wireless/ath/ath9k/ar9003_phy.h | 46 +-
.../net/wireless/ath/ath9k/ar9462_2p0_initvals.h | 2 +-
drivers/net/wireless/ath/ath9k/ar9485_initvals.h | 338 ++-
drivers/net/wireless/ath/ath9k/ath9k.h | 34 +-
drivers/net/wireless/ath/ath9k/beacon.c | 2 +-
drivers/net/wireless/ath/ath9k/btcoex.c | 1 +
drivers/net/wireless/ath/ath9k/btcoex.h | 1 +
drivers/net/wireless/ath/ath9k/common.h | 7 -
drivers/net/wireless/ath/ath9k/debug.c | 198 +-
drivers/net/wireless/ath/ath9k/debug.h | 18 +-
.../net/wireless/ath/ath9k/dfs_pattern_detector.c | 12 +-
.../net/wireless/ath/ath9k/dfs_pattern_detector.h | 4 +-
drivers/net/wireless/ath/ath9k/gpio.c | 58 +-
drivers/net/wireless/ath/ath9k/htc.h | 4 +-
drivers/net/wireless/ath/ath9k/htc_drv_beacon.c | 8 +-
drivers/net/wireless/ath/ath9k/htc_drv_debug.c | 8 +-
drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | 2 +-
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 8 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 24 +-
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 28 +-
drivers/net/wireless/ath/ath9k/hw.c | 5 -
drivers/net/wireless/ath/ath9k/hw.h | 4 -
drivers/net/wireless/ath/ath9k/init.c | 6 +-
drivers/net/wireless/ath/ath9k/link.c | 5 +-
drivers/net/wireless/ath/ath9k/main.c | 78 +-
drivers/net/wireless/ath/ath9k/mci.c | 39 +-
drivers/net/wireless/ath/ath9k/pci.c | 12 -
drivers/net/wireless/ath/ath9k/rc.c | 53 +-
drivers/net/wireless/ath/ath9k/rc.h | 16 +
drivers/net/wireless/ath/ath9k/recv.c | 2 +-
drivers/net/wireless/ath/ath9k/xmit.c | 12 +-
drivers/net/wireless/ath/carl9170/fw.c | 5 -
drivers/net/wireless/b43/xmit.c | 2 +-
drivers/net/wireless/b43legacy/xmit.c | 2 +-
drivers/net/wireless/brcm80211/Kconfig | 15 +-
drivers/net/wireless/brcm80211/brcmfmac/Makefile | 1 +
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 43 +-
.../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 140 +-
drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 186 +-
drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 3 +-
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 72 -
.../net/wireless/brcm80211/brcmfmac/dhd_common.c | 452 +---
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c | 6 -
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 10 +-
.../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 509 ++---
.../net/wireless/brcm80211/brcmfmac/dhd_proto.h | 7 -
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 252 ++-
drivers/net/wireless/brcm80211/brcmfmac/fweh.c | 509 +++++
drivers/net/wireless/brcm80211/brcmfmac/fweh.h | 207 ++
drivers/net/wireless/brcm80211/brcmfmac/fwil.c | 26 +-
drivers/net/wireless/brcm80211/brcmfmac/usb.c | 278 +--
drivers/net/wireless/brcm80211/brcmfmac/usb.h | 18 +-
.../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 1010 ++-------
.../net/wireless/brcm80211/brcmfmac/wl_cfg80211.h | 120 +-
drivers/net/wireless/brcm80211/brcmsmac/Makefile | 3 +-
drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | 723 +++---
drivers/net/wireless/brcm80211/brcmsmac/ampdu.h | 29 +-
drivers/net/wireless/brcm80211/brcmsmac/antsel.c | 4 +-
.../brcm80211/brcmsmac/brcms_trace_events.h | 175 +-
drivers/net/wireless/brcm80211/brcmsmac/channel.c | 10 +-
drivers/net/wireless/brcm80211/brcmsmac/debug.c | 44 +
drivers/net/wireless/brcm80211/brcmsmac/debug.h | 52 +
drivers/net/wireless/brcm80211/brcmsmac/dma.c | 343 ++-
drivers/net/wireless/brcm80211/brcmsmac/dma.h | 11 +-
.../net/wireless/brcm80211/brcmsmac/mac80211_if.c | 123 +-
drivers/net/wireless/brcm80211/brcmsmac/main.c | 1195 +++-------
drivers/net/wireless/brcm80211/brcmsmac/main.h | 48 +-
drivers/net/wireless/brcm80211/brcmsmac/pub.h | 37 -
drivers/net/wireless/brcm80211/brcmsmac/stf.c | 8 +-
drivers/net/wireless/brcm80211/brcmsmac/types.h | 3 +-
drivers/net/wireless/brcm80211/include/defs.h | 11 +-
drivers/net/wireless/ipw2x00/ipw2100.c | 5 +-
drivers/net/wireless/ipw2x00/ipw2200.c | 40 +-
drivers/net/wireless/ipw2x00/libipw.h | 2 +-
drivers/net/wireless/ipw2x00/libipw_geo.c | 3 +-
drivers/net/wireless/iwlegacy/3945.c | 2 +-
drivers/net/wireless/iwlegacy/4965-mac.c | 4 +-
drivers/net/wireless/iwlegacy/common.h | 5 +-
drivers/net/wireless/iwlwifi/Kconfig | 9 -
drivers/net/wireless/iwlwifi/dvm/agn.h | 4 +-
drivers/net/wireless/iwlwifi/dvm/commands.h | 7 +-
drivers/net/wireless/iwlwifi/dvm/debugfs.c | 2 +-
drivers/net/wireless/iwlwifi/dvm/dev.h | 1 -
drivers/net/wireless/iwlwifi/dvm/lib.c | 37 +-
drivers/net/wireless/iwlwifi/dvm/mac80211.c | 16 +-
drivers/net/wireless/iwlwifi/dvm/main.c | 20 +-
drivers/net/wireless/iwlwifi/dvm/rx.c | 6 +-
drivers/net/wireless/iwlwifi/dvm/tx.c | 9 +-
drivers/net/wireless/iwlwifi/dvm/ucode.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-config.h | 2 +-
drivers/net/wireless/iwlwifi/iwl-devtrace.h | 2 +-
drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c | 4 +-
drivers/net/wireless/iwlwifi/iwl-fh.h | 2 +-
drivers/net/wireless/iwlwifi/iwl-trans.h | 27 +-
drivers/net/wireless/iwlwifi/pcie/drv.c | 1 -
drivers/net/wireless/iwlwifi/pcie/internal.h | 117 +-
drivers/net/wireless/iwlwifi/pcie/rx.c | 396 +++-
drivers/net/wireless/iwlwifi/pcie/trans.c | 1047 +--------
drivers/net/wireless/iwlwifi/pcie/tx.c | 1263 ++++++++---
drivers/net/wireless/libertas/cfg.c | 24 +-
drivers/net/wireless/libertas/if_sdio.c | 39 +-
drivers/net/wireless/mac80211_hwsim.c | 580 ++++-
drivers/net/wireless/mwifiex/11n_aggr.c | 8 +-
drivers/net/wireless/mwifiex/Kconfig | 1 -
drivers/net/wireless/mwifiex/cfg80211.c | 54 +-
drivers/net/wireless/mwifiex/cmdevt.c | 3 +
drivers/net/wireless/mwifiex/debugfs.c | 10 +-
drivers/net/wireless/mwifiex/init.c | 20 +-
drivers/net/wireless/mwifiex/join.c | 6 +-
drivers/net/wireless/mwifiex/main.c | 86 +-
drivers/net/wireless/mwifiex/main.h | 6 +-
drivers/net/wireless/mwifiex/sdio.c | 39 +-
drivers/net/wireless/mwifiex/sdio.h | 1 +
drivers/net/wireless/mwifiex/sta_event.c | 10 +-
drivers/net/wireless/mwifiex/sta_ioctl.c | 9 +-
drivers/net/wireless/mwifiex/txrx.c | 28 +-
drivers/net/wireless/mwifiex/uap_event.c | 7 +
drivers/net/wireless/mwifiex/usb.c | 2 +-
drivers/net/wireless/mwifiex/wmm.c | 12 +-
drivers/net/wireless/mwifiex/wmm.h | 2 +
drivers/net/wireless/mwl8k.c | 57 +-
drivers/net/wireless/orinoco/cfg.c | 11 +-
drivers/net/wireless/p54/txrx.c | 6 +-
drivers/net/wireless/rndis_wlan.c | 12 +-
drivers/net/wireless/rt2x00/rt2800usb.c | 1 +
drivers/net/wireless/rt2x00/rt2x00dev.c | 19 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 6 +-
drivers/net/wireless/rtl818x/rtl8180/dev.c | 2 +-
drivers/net/wireless/rtl818x/rtl8187/dev.c | 2 +-
drivers/net/wireless/rtlwifi/Kconfig | 11 +
drivers/net/wireless/rtlwifi/Makefile | 4 +-
drivers/net/wireless/rtlwifi/base.c | 24 +
drivers/net/wireless/rtlwifi/base.h | 2 +
drivers/net/wireless/rtlwifi/cam.c | 2 +-
drivers/net/wireless/rtlwifi/core.c | 5 +-
drivers/net/wireless/rtlwifi/debug.h | 2 +
drivers/net/wireless/rtlwifi/pci.c | 20 +-
drivers/net/wireless/rtlwifi/pci.h | 2 +
drivers/net/wireless/rtlwifi/rc.c | 3 +-
drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | 2 +-
drivers/net/wireless/rtlwifi/rtl8192cu/trx.c | 2 +-
drivers/net/wireless/rtlwifi/rtl8192de/trx.c | 2 +-
drivers/net/wireless/rtlwifi/rtl8192se/trx.c | 2 +-
drivers/net/wireless/rtlwifi/rtl8723ae/Makefile | 22 +
drivers/net/wireless/rtlwifi/rtl8723ae/btc.h | 41 +
drivers/net/wireless/rtlwifi/rtl8723ae/def.h | 163 ++
drivers/net/wireless/rtlwifi/rtl8723ae/dm.c | 920 ++++++++
drivers/net/wireless/rtlwifi/rtl8723ae/dm.h | 149 ++
drivers/net/wireless/rtlwifi/rtl8723ae/fw.c | 745 ++++++
drivers/net/wireless/rtlwifi/rtl8723ae/fw.h | 101 +
.../wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c | 542 +++++
.../wireless/rtlwifi/rtl8723ae/hal_bt_coexist.h | 160 ++
drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c | 1786 +++++++++++++++
drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.h | 151 ++
drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | 2380 ++++++++++++++++++++
drivers/net/wireless/rtlwifi/rtl8723ae/hw.h | 73 +
drivers/net/wireless/rtlwifi/rtl8723ae/led.c | 151 ++
drivers/net/wireless/rtlwifi/rtl8723ae/led.h | 39 +
drivers/net/wireless/rtlwifi/rtl8723ae/phy.c | 2044 +++++++++++++++++
drivers/net/wireless/rtlwifi/rtl8723ae/phy.h | 224 ++
drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.c | 109 +
drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h | 322 +++
drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.c | 129 ++
drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.h | 98 +
drivers/net/wireless/rtlwifi/rtl8723ae/reg.h | 2097 +++++++++++++++++
drivers/net/wireless/rtlwifi/rtl8723ae/rf.c | 505 +++++
drivers/net/wireless/rtlwifi/rtl8723ae/rf.h | 43 +
drivers/net/wireless/rtlwifi/rtl8723ae/sw.c | 387 ++++
drivers/net/wireless/rtlwifi/rtl8723ae/sw.h | 37 +
drivers/net/wireless/rtlwifi/rtl8723ae/table.c | 738 ++++++
drivers/net/wireless/rtlwifi/rtl8723ae/table.h | 50 +
drivers/net/wireless/rtlwifi/rtl8723ae/trx.c | 670 ++++++
drivers/net/wireless/rtlwifi/rtl8723ae/trx.h | 725 ++++++
drivers/net/wireless/rtlwifi/stats.c | 268 +++
drivers/net/wireless/rtlwifi/stats.h | 46 +
drivers/net/wireless/rtlwifi/wifi.h | 108 +-
drivers/net/wireless/ti/wl1251/rx.c | 2 +-
drivers/net/wireless/ti/wlcore/main.c | 11 +-
drivers/nfc/pn544/i2c.c | 2 +-
include/linux/bcma/bcma.h | 5 +
include/linux/ieee80211.h | 72 +
include/linux/nfc/pn544.h | 104 -
include/linux/platform_data/pn544.h | 44 +
include/linux/ssb/ssb_regs.h | 2 +-
include/net/bluetooth/amp.h | 4 +
include/net/bluetooth/hci.h | 29 +-
include/net/bluetooth/hci_core.h | 48 +-
include/net/bluetooth/l2cap.h | 38 +-
include/net/cfg80211.h | 223 +-
include/net/mac80211.h | 158 +-
include/net/nfc/hci.h | 3 +
include/uapi/linux/nl80211.h | 113 +-
net/bluetooth/Kconfig | 1 -
net/bluetooth/a2mp.c | 4 +-
net/bluetooth/amp.c | 97 +
net/bluetooth/bnep/netdev.c | 1 -
net/bluetooth/cmtp/capi.c | 2 +-
net/bluetooth/cmtp/sock.c | 2 +-
net/bluetooth/hci_conn.c | 6 +
net/bluetooth/hci_core.c | 163 +-
net/bluetooth/hci_event.c | 351 ++-
net/bluetooth/l2cap_core.c | 1010 ++++++++-
net/bluetooth/l2cap_sock.c | 5 +
net/bluetooth/mgmt.c | 100 +-
net/mac80211/aes_cmac.c | 1 +
net/mac80211/agg-rx.c | 2 +-
net/mac80211/agg-tx.c | 12 +-
net/mac80211/cfg.c | 258 ++-
net/mac80211/chan.c | 130 +-
net/mac80211/debugfs_key.c | 6 +-
net/mac80211/debugfs_netdev.c | 68 +-
net/mac80211/debugfs_sta.c | 19 +-
net/mac80211/driver-ops.h | 75 +-
net/mac80211/ht.c | 4 +-
net/mac80211/ibss.c | 75 +-
net/mac80211/ieee80211_i.h | 50 +-
net/mac80211/iface.c | 60 +-
net/mac80211/key.c | 15 +-
net/mac80211/key.h | 8 +-
net/mac80211/main.c | 50 +-
net/mac80211/mesh.c | 36 +-
net/mac80211/mesh.h | 14 -
net/mac80211/mesh_plink.c | 47 +-
net/mac80211/mesh_sync.c | 46 +-
net/mac80211/mlme.c | 198 +-
net/mac80211/offchannel.c | 13 +-
net/mac80211/pm.c | 48 +-
net/mac80211/rate.c | 5 +-
net/mac80211/rate.h | 2 +-
net/mac80211/rx.c | 169 +-
net/mac80211/scan.c | 9 +-
net/mac80211/sta_info.c | 12 +-
net/mac80211/sta_info.h | 27 +-
net/mac80211/status.c | 145 +-
net/mac80211/trace.h | 116 +-
net/mac80211/tx.c | 21 +-
net/mac80211/util.c | 194 +-
net/mac80211/wme.c | 40 +-
net/nfc/hci/command.c | 4 +-
net/nfc/hci/core.c | 25 +-
net/nfc/llcp/commands.c | 32 +-
net/nfc/llcp/llcp.c | 17 +-
net/wireless/Kconfig | 5 +-
net/wireless/ap.c | 1 +
net/wireless/chan.c | 280 ++-
net/wireless/core.c | 7 +
net/wireless/core.h | 30 +-
net/wireless/ibss.c | 27 +-
net/wireless/mesh.c | 49 +-
net/wireless/mlme.c | 36 +-
net/wireless/nl80211.c | 590 +++--
net/wireless/nl80211.h | 8 +-
net/wireless/rdev-ops.h | 53 +-
net/wireless/scan.c | 45 +-
net/wireless/trace.h | 338 +--
net/wireless/util.c | 174 +-
net/wireless/wext-compat.c | 32 +-
net/wireless/wext-sme.c | 11 +-
289 files changed, 27506 insertions(+), 8374 deletions(-)
create mode 100644 drivers/net/wireless/ath/ath6kl/recovery.c
create mode 100644 drivers/net/wireless/brcm80211/brcmfmac/fweh.c
create mode 100644 drivers/net/wireless/brcm80211/brcmfmac/fweh.h
create mode 100644 drivers/net/wireless/brcm80211/brcmsmac/debug.c
create mode 100644 drivers/net/wireless/brcm80211/brcmsmac/debug.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/Makefile
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/btc.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/def.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/dm.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/dm.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/fw.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/fw.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hal_bt_coexist.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hw.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/hw.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/led.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/led.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/phy.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/phy.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/reg.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/rf.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/rf.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/sw.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/table.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/table.h
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
create mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/trx.h
create mode 100644 drivers/net/wireless/rtlwifi/stats.c
create mode 100644 drivers/net/wireless/rtlwifi/stats.h
delete mode 100644 include/linux/nfc/pn544.h
create mode 100644 include/linux/platform_data/pn544.h
--
John W. Linville Someday the world will need a hero, and you
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org might be all we have. Be ready.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* [net-next:master 47/69] drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c:10137:48: sparse: cast truncates bits from constant value (ffff7fff becomes 7fff)
From: kbuild test robot @ 2012-11-28 19:15 UTC (permalink / raw)
To: Yaniv Rosner; +Cc: netdev, Eilon Greenstein
tree: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git master
head: f4e0b4c5e1c3eac9b7376ce73fb63de436057db1
commit: 503976e99842665b3ebd6aec602525b9e8f38812 [47/69] bnx2x: Cosmetic changes
sparse warnings:
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c:13031:5: sparse: symbol 'bnx2x_pre_init_phy' was not declared. Should it be static?
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c:10137:48: sparse: cast truncates bits from constant value (ffff7fff becomes 7fff)
vim +10137 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10121 else
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10122 rc = bnx2x_8483x_disable_eee(phy, params, vars);
d231023e drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-20 10123 if (rc) {
efc7ce03 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Masanari Iida 2012-11-02 10124 DP(NETIF_MSG_LINK, "Failed to set EEE advertisement\n");
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10125 return rc;
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10126 }
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10127 } else {
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10128 vars->eee_status &= ~SHMEM_EEE_SUPPORTED_MASK;
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10129 }
c8c60d88 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yuval Mintz 2012-06-06 10130
0f6bb03d drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 10131 if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833) ||
0f6bb03d drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 10132 (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834)) {
11b2ec6b drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-01-17 10133 /* Bring PHY out of super isolate mode as the final step. */
503976e9 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 10134 bnx2x_cl45_read_and_write(bp, phy,
503976e9 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 10135 MDIO_CTL_DEVAD,
503976e9 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 10136 MDIO_84833_TOP_CFG_XGPHY_STRAP1,
503976e9 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-11-27 @10137 (u16)~MDIO_84833_SUPER_ISOLATE);
11b2ec6b drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c Yaniv Rosner 2012-01-17 10138 }
a22f0788 drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2010-09-07 10139 return rc;
de6eae1f drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2010-09-07 10140 }
ea4e040a drivers/net/bnx2x_link.c Yaniv Rosner 2008-06-23 10141
de6eae1f drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2010-09-07 10142 static u8 bnx2x_848xx_read_status(struct bnx2x_phy *phy,
cd88ccee drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2011-01-31 10143 struct link_params *params,
cd88ccee drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2011-01-31 10144 struct link_vars *vars)
de6eae1f drivers/net/bnx2x/bnx2x_link.c Yaniv Rosner 2010-09-07 10145 {
---
0-DAY kernel build testing backend Open Source Technology Center
Fengguang Wu, Yuanhan Liu Intel Corporation
^ permalink raw reply
* Re: [GIT net] Open vSwitch
From: Jesse Gross @ 2012-11-28 19:08 UTC (permalink / raw)
To: David Miller; +Cc: netdev, dev
In-Reply-To: <20121128.134839.2194749267751942776.davem@davemloft.net>
On Wed, Nov 28, 2012 at 10:48 AM, David Miller <davem@davemloft.net> wrote:
>
> Date: Tue, 27 Nov 2012 10:37:01 -0800
>
> Is it really Tuesday morning where you are?
Unfortunately, no. It's VM clock slew, which I've fixed now.
^ 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