Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH net-next 1/1] net: fec: fix build error at m68k platform
From: Zhi Li @ 2014-10-03 20:14 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: Frank Li, David S. Miller, netdev@vger.kernel.org,
	Duan Fugang-B38611
In-Reply-To: <CAOMZO5B=cgVT1gr5VJ78x_Aj5ssvrsTOq4t0DrrLK4kz7vNMjQ@mail.gmail.com>

On Fri, Oct 3, 2014 at 3:07 PM, Fabio Estevam <festevam@gmail.com> wrote:
> On Fri, Oct 3, 2014 at 4:00 PM, Frank Li <Frank.Li@freescale.com> wrote:
>> reproduce:
>>   wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>>   chmod +x ~/bin/make.cross
>>   git checkout 1b7bde6d659d30f171259cc2dfba8e5dab34e735
>>   # save the attached .config to linux build tree
>
> There is no attached config ;-)

It is copy from kbuild report.

Can I change to
config: m68k-m5275evb_defconfig (attached as .config)


>
>>   make.cross ARCH=m68k
>>
>> All error/warnings:
>>
>>    drivers/net/ethernet/freescale/fec_main.c: In function 'fec_enet_rx_queue':
>>>> drivers/net/ethernet/freescale/fec_main.c:1470:3: error: implicit declaration of function 'prefetch' [-Werror=implicit-function-declaration]
>>       prefetch(skb->data - NET_IP_ALIGN);
>>       ^
>>    cc1: some warnings being treated as errors
>>
>> missed included prefetch.h
>>
>> Signed-off-by: Frank Li <Frank.Li@freescale.com>
>
> It seems you missed the Reported-by: kbuild test robot
> <fengguang.wu@intel.com> tag.

Okay I can add it.

^ permalink raw reply

* Re: [PATCH v1 5/5] driver-core: add driver asynchronous probe support
From: Luis R. Rodriguez @ 2014-10-03 20:11 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: gregkh, dmitry.torokhov, tiwai, tj, arjan, teg, rmilasan, werner,
	oleg, hare, bpoirier, santosh, pmladek, dbueso, linux-kernel,
	Tetsuo Handa, Joseph Salisbury, Kay Sievers, One Thousand Gnomes,
	Tim Gardner, Pierre Fersing, Andrew Morton, Nagalakshmi Nandigama,
	Praveen Krishnamoorthy, Sreekanth Reddy, Abhijit Mahajan,
	Casey Leedom, Hariprasad S <haripra
In-Reply-To: <1411768637-6809-6-git-send-email-mcgrof@do-not-panic.com>

On Fri, Sep 26, 2014 at 02:57:17PM -0700, Luis R. Rodriguez wrote:
> +	queue_work(system_unbound_wq, &priv->attach_work->work);

Tejun,

based on my testing so far using system_highpri_wq instead of
system_unbound_wq yields close to par / better boot times
than synchronous probe support for all modules. How set are
you on using system_unbound_wq? About to punt out a new
series which also addresses built-in.

  Luis

^ permalink raw reply

* Re: [PATCH net-next 0/4] net: Generic UDP Encapsulation
From: David Miller @ 2014-10-03 20:10 UTC (permalink / raw)
  To: therbert; +Cc: netdev
In-Reply-To: <1412225199-24942-1-git-send-email-therbert@google.com>

From: Tom Herbert <therbert@google.com>
Date: Wed,  1 Oct 2014 21:46:35 -0700

> Generic UDP Encapsulation (GUE) is UDP encapsulation protocol that
> encapsulates packets of various IP protocols. The GUE protocol is
> described in http://tools.ietf.org/html/draft-herbert-gue-01.

Series applied, thanks Tom.

^ permalink raw reply

* Re: [PATCH net-next 1/1] net: fec: fix build error at m68k platform
From: Fabio Estevam @ 2014-10-03 20:07 UTC (permalink / raw)
  To: Frank Li
  Cc: David S. Miller, 李智, netdev@vger.kernel.org,
	Duan Fugang-B38611
In-Reply-To: <1412362831-59318-1-git-send-email-Frank.Li@freescale.com>

On Fri, Oct 3, 2014 at 4:00 PM, Frank Li <Frank.Li@freescale.com> wrote:
> reproduce:
>   wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>   chmod +x ~/bin/make.cross
>   git checkout 1b7bde6d659d30f171259cc2dfba8e5dab34e735
>   # save the attached .config to linux build tree

There is no attached config ;-)

>   make.cross ARCH=m68k
>
> All error/warnings:
>
>    drivers/net/ethernet/freescale/fec_main.c: In function 'fec_enet_rx_queue':
>>> drivers/net/ethernet/freescale/fec_main.c:1470:3: error: implicit declaration of function 'prefetch' [-Werror=implicit-function-declaration]
>       prefetch(skb->data - NET_IP_ALIGN);
>       ^
>    cc1: some warnings being treated as errors
>
> missed included prefetch.h
>
> Signed-off-by: Frank Li <Frank.Li@freescale.com>

It seems you missed the Reported-by: kbuild test robot
<fengguang.wu@intel.com> tag.

^ permalink raw reply

* Re: [PATCH] drivers:ethernet:davinci_emac.c:Fixes flaw in mac address handling.
From: David Miller @ 2014-10-03 20:03 UTC (permalink / raw)
  To: mwelling; +Cc: tony, netdev, linux-kernel
In-Reply-To: <1412217125-11057-1-git-send-email-mwelling@ieee.org>

From: Michael Welling <mwelling@ieee.org>
Date: Wed,  1 Oct 2014 21:32:05 -0500

> The code currently checks the mac_addr variable that is clearly
> zero'd out during allocation.
> 
> Further code is added to bring the mac_addr from the partial pdata.
> 
> Signed-off-by: Michael Welling <mwelling@ieee.org>

I don't see anyone specifying a MAC address in the partial pdata,
so better to just delete that field.

Even if people did, I am not so sure that the partial pdata should
unconditionally trump an OF provided MAC address.

^ permalink raw reply

* Re: Small fixes/changes for RDS
From: David Miller @ 2014-10-03 19:52 UTC (permalink / raw)
  To: herton; +Cc: chien.yen, rds-devel, netdev, linux-kernel, rmanes, dledford
In-Reply-To: <1412200194-28902-1-git-send-email-herton@redhat.com>

From: "Herton R. Krzesinski" <herton@redhat.com>
Date: Wed,  1 Oct 2014 18:49:51 -0300

> I got a report of one issue within RDS (after investigation it was a double
> free), and I'm sending the fix (patch 3/3) which reporter said it works (no more
> WARNING triggered on a specially instrumented kernel). The report/test was done
> on a very old kernel (RHEL 5, 2.6.18 based with backports), but the problem the
> patch handles still exists and should not change. Besides that, while
> reviewing some of the code but being unable to reproduce with rds_tcp, I
> noticed two small improvements/fixes which are in patches 1 and 2.

Series applied, thanks.

^ permalink raw reply

* Re: [PATCH net-next] net: phy: adjust fixed_phy_register() return value
From: David Miller @ 2014-10-03 19:47 UTC (permalink / raw)
  To: f.fainelli; +Cc: pgynther, netdev, thomas.petazzoni
In-Reply-To: <542C9D50.9050301@gmail.com>

From: Florian Fainelli <f.fainelli@gmail.com>
Date: Wed, 01 Oct 2014 17:33:20 -0700

> I let Thomas comment on whether he likes this or not.

I'm still waiting to see Thomas's feedback.

^ permalink raw reply

* Re: [net-next 1/6] net: Add Geneve tunneling protocol driver
From: Andy Zhou @ 2014-10-03 19:45 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: David Miller, netdev@vger.kernel.org, Jesse Gross
In-Reply-To: <542EA847.4000904@6wind.com>

>
> Do you plan too add the full support (ie being able to configure a
> geneve netdev interface with iproute2)?
>
According to the following email thread, John Linville is looking at adding it.
http://lists.openwall.net/netdev/2014/07/22/198

> Another small comment below.
>
>> +config GENEVE
>> +       tristate "Generic Network Virtualization Encapsulation (Geneve)"
>> +       depends on INET
>> +       select NET_IP_TUNNEL
>> +       select NET_UDP_TUNNEL
>> +       ---help---
>
> Use tabs instead of spaces for the baove lines.

Sure, I will fix this.

^ permalink raw reply

* Re: HW bridging support using notifiers?
From: Benjamin LaHaise @ 2014-10-03 19:42 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: netdev, davem, jiri, stephen, andy, tgraf, nbd, john.r.fastabend,
	edumazet, vyasevic, buytenh, sfeldma, Jamal Hadi Salim
In-Reply-To: <542EF3C4.3050201@gmail.com>

On Fri, Oct 03, 2014 at 12:06:44PM -0700, Florian Fainelli wrote:
> Hi Benjamin,
> 
> On 10/03/2014 07:22 AM, Benjamin LaHaise wrote:
> > Hi Florian et al,
> > 
> > On Thu, Oct 02, 2014 at 06:48:57PM -0700, Florian Fainelli wrote:
> >> Hi all,
> >>
> >> I am taking a look at adding HW bridging support to DSA, in way that's
> >> usable outside of DSA.
> > 
> > I've been working on support for the RTL8366S switch, and our work is 
> > directly overlapping here.  I actually have something that is working at 
> > configuring port and tag based vlans on the RTL8366S.  I'll try to clean 
> > up the code to post something for discussion over the next couple of days.
> 
> Cool, please do!
> 
> > 
> >> Lennert's approach in 2008 [1] looks conceptually good to me,as he
> >> noted, it uses a bunch of new ndo's which is not only limiting to one
> >> ndo implementer per struct net_device, but also is mostly consuming the
> >> information from the bridge layer, while the ndo is an action
> > 
> > I think having ndo implementer methods for hardware switch offloads makes 
> > more sense.  Such a scheme is needed in order to implement the stacking of 
> > devices that is required in order to transparently handle configuration of 
> > vlans on switch ports where the 8021q device has to pass on the vlan tag 
> > to the switch device.  The ndo methods do perform an action of causing the 
> > switch to be configured to match the bridge config.  Additionally, they 
> > can be used to veto changes that cannot be offloaded to hardware -- this 
> > (configurable) behaviour is desired by some users of these APIs who wish 
> > to be made aware when a particuarly configuration is not supported by the 
> > underlying hardware.
> 
> Humm, that's a fair point, so not only would we want new NDOs, but we'd
> also need to specify the return values (invalid, no space etc...).
> 
> As far as bridging alone is concerned (not including VLANs for now), I
> don't think there are restrictions in terms of what the hardware can do,
> since we mostly tell it to "group" N-ports together.
> 
> For VLANs, there should be a way for the switch driver to tell whether
> that's supported or not.

What the hardware can support varies widely.  For example, the RTL8366S 
happens to support a total of 8 FDBs in hardware, which, given how the Linux 
bridge works, implies a total of at most 8 VLANs.  However, it can use more 
VLANs if they share overlapping FDBs (which Linux doesn't support).  There 
are also features like VLAN remapping, q-in-q support...  We're going to 
have to do a fair amount of work to learn about all these quirks of hardware 
features that need to be identified and reported.

> > 
> >> So here's what I am up to now:
> >>
> >> - use the NETDEV_JOIN notifier to discover when a bridge port is added
> >> - use the NETDEV_LEAVE notifier, still need to verify this does not
> >> break netconsole as indicated in net/bridge/br_if.c
> >> - use the NETDEV_CHANGEINFODATA notifier to notify about STP state changes
> > 
> > To me, notifiers are the wrong model for join and leave.  Implementing 
> > stacking on top of notifiers is somewhat more complicated.  Here are the 
> > ndo methods I've implemented so far which are sufficient for basic config 
> > of the RTL8366S.  They're fairly similar to those in [1].
> > 
> > +	int			(*ndo_join_bridge)(struct net_bridge *bridge,
> > +						   struct net_device *dev,
> > +						   int *switch_nr,
> > +						   int *switch_port_nr,
> > +						   int vlan);
> > +	int			(*ndo_leave_bridge)(struct net_bridge *bridge,
> > +						    struct net_device *dev,
> > +						    int switch_nr,
> > +						    int switch_port_nr,
> > +						    int vlan);
> > +	int			(*ndo_flood_xmit)(struct switch_info *dev,
> > +						  struct sk_buff *skb,
> > +						  u64 port_mask);
> 
> I don't think the switch_port_nr belongs here, this is something that
> should be resolved within the implementer of these ndo's, whether that
> is DSA, or Jiri's switchdev, since the net_device argument should be
> linked to both the switch port number, and the switch number.

The switch_port_nr is absolutely required for flood offloading.  (more below)

> > 
> > There are a couple of important points here.  In the case of joining and 
> > leaving a bridge, the bridge needs to be provided with information it can 
> > use to identify switch ports.  This is needed in order to offload the 
> > flooding of packets to multiple ports, as otherwise the Linux bridge code 
> > doesn't have any way to figure out which packets can be merged into a 
> > single transmit via the ndo_flood_xmit() method.
> 
> I am not exactly sure yet how ndo_flood_xmit() fits in the picture here,
> but it might be optional based on how the switch has been configured I
> presume?

ndo_flood_xmit() is a method that sends a single packet to a bitmask of 
the ports attached to the switch.  This is quite useful for saving bandwidth 
on the CPU port of a switch when sending out broadcast packets, and, more 
importantly, multicast packets.  The bits in that bitmask correspond to 
the switch_port_nr reported ny ndo_join_bridge(), and I modified the Linux 
bridge code to group ports attached to the same switch together and use the 
switch_nr to identify that ports are on the same switch and collapse flooding 
to multiple ports into a single call of ndo_flood_xmit().  The RTL8366S has 
support for this feature (that's why I implemented it), and I'm pretty sure 
other switches do as well -- at the very least I know one of the Marvell 
switches I was exposed to in the past that had this capability, but I don't 
recall the precise details of the interface since I wasn't directly involved 
in the coding for that driver.

I'm sure there are other hardware features we'll have to come up with a 
model for.  Cheers,

		-ben
-- 
"Thought is the essence of where you are now."

^ permalink raw reply

* Re: [PATCH] team: add rescheduling jiffy delay on !rtnl_trylock
From: Joe Lawrence @ 2014-10-03 19:37 UTC (permalink / raw)
  To: paulmck; +Cc: Tejun Heo, netdev, Jiri Pirko
In-Reply-To: <20141002064308.GN5015@linux.vnet.ibm.com>

On Wed, 1 Oct 2014 23:43:08 -0700
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:

> On Mon, Sep 29, 2014 at 12:06:01PM -0400, Tejun Heo wrote:
> > (cc'ing Paul and quoting the whole body)
> > 
> > Paul, this is a fix for RCU sched stall observed w/ a work item
> > requeueing itself waiting for the RCU grace period.  As the self
> > requeueing work item ends up being executed by the same kworker, the
> > worker task never stops running in the absence of a higher priority
> > task and it seems to delay RCU grace period for a very long time on
> > !PREEMPT kernels.  As each work item denotes a boundary which no
> > synchronization construct stretches across, I wonder whether it'd be a
> > good idea to add a notification for the end of RCU critical section
> > between executions of work items.
> 
> It sounds like a great idea to me!  I suggest invoking
> rcu_note_context_switch() between executions of work items.
> 
> 							Thanx, Paul

I gave this a spin, probably inserting the call in the wrong place:

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 5dbe22a..77f128e 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2045,7 +2045,8 @@ __acquires(&pool->lock)
         * indefinitely requeue itself while all other CPUs are trapped in
         * stop_machine.
         */
-       cond_resched();
+       if (!cond_resched())
+               rcu_note_context_switch(raw_smp_processor_id());
 
        spin_lock_irq(&pool->lock);

this results in RCU grace periods progressing (dyntick remains
fixed) as advertised, even with the test-module from [1] loaded:

Fri Oct  3 14:37:14 2014
  4 c=9635 g=9636 pq=1 qp=0 dt=51693/140000000000000/0 df=163 of=0 ql=0/1 qs=...D b=10 ci=0 nci=34184 co=0 ca=0

Fri Oct  3 14:50:24 2014
  4 c=13072 g=13073 pq=1 qp=0 dt=51693/140000000000000/0 df=163 of=0 ql=0/1 qs=...D b=10 ci=0 nci=34191 co=0 ca=0

I'll leave it up to Tejun to determine where/how that call should be
made.

Thanks!

-- Joe

[1] http://marc.info/?l=linux-kernel&m=141192244232345

^ permalink raw reply related

* Re: [net-next PATCH V6 0/2] qdisc: bulk dequeue support
From: David Miller @ 2014-10-03 19:38 UTC (permalink / raw)
  To: brouer
  Cc: netdev, therbert, eric.dumazet, hannes, fw, dborkman, jhs,
	alexander.duyck, john.r.fastabend, dave.taht, toke
In-Reply-To: <20141001203345.3321.99675.stgit@dragon>

From: Jesper Dangaard Brouer <brouer@redhat.com>
Date: Wed, 01 Oct 2014 22:35:31 +0200

> This patchset uses DaveM's recent API changes to dev_hard_start_xmit(),
> from the qdisc layer, to implement dequeue bulking.

Series applied, thanks for all of your hard work!

^ permalink raw reply

* Re: [PATCH net-next 1/2] pgtable: Add API to query if write combining is available
From: David Miller @ 2014-10-03 19:31 UTC (permalink / raw)
  To: ogerlitz; +Cc: netdev, amirv, jackm, moshel, talal, yevgenyp
In-Reply-To: <1412175282-25212-2-git-send-email-ogerlitz@mellanox.com>

From: Or Gerlitz <ogerlitz@mellanox.com>
Date: Wed,  1 Oct 2014 17:54:41 +0300

> +#define writecombine_available writecombine_available
> +static inline int writecombine_available(void)
> +{
> +	return 1;
> +}
> +

Please use 'bool' and 'true'/'false'.

^ permalink raw reply

* Re: [PATCH net-next] et131x: Add PCIe gigabit ethernet driver et131x to drivers/net
From: David Miller @ 2014-10-03 19:25 UTC (permalink / raw)
  To: mark.einon; +Cc: gregkh, linux-kernel, netdev
In-Reply-To: <1412112586-2194-1-git-send-email-mark.einon@gmail.com>


Applied, thanks.

^ permalink raw reply

* [PATCH net-next] net: bcmgenet: improve bcmgenet_mii_setup()
From: Petri Gynther @ 2014-10-03 19:25 UTC (permalink / raw)
  To: netdev; +Cc: davem, f.fainelli

bcmgenet_mii_setup() is called from the PHY state machine every 1-2 seconds
when the PHYs are in PHY_POLL mode.

Improve bcmgenet_mii_setup() so that it touches the MAC registers only when
the link is up and there was a change to link, speed, duplex, or pause status.

Signed-off-by: Petri Gynther <pgynther@google.com>
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c |  3 +-
 drivers/net/ethernet/broadcom/genet/bcmgenet.h |  3 +-
 drivers/net/ethernet/broadcom/genet/bcmmii.c   | 73 ++++++++++++++++----------
 3 files changed, 48 insertions(+), 31 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index d51729c..e0a6238 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2162,9 +2162,10 @@ static void bcmgenet_netif_stop(struct net_device *dev)
 	 */
 	cancel_work_sync(&priv->bcmgenet_irq_work);
 
-	priv->old_pause = -1;
 	priv->old_link = -1;
+	priv->old_speed = -1;
 	priv->old_duplex = -1;
+	priv->old_pause = -1;
 }
 
 static int bcmgenet_close(struct net_device *dev)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
index ad95fe5..321b1db 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
@@ -548,8 +548,9 @@ struct bcmgenet_priv {
 	u16 gphy_rev;
 
 	/* PHY device variables */
-	int old_duplex;
 	int old_link;
+	int old_speed;
+	int old_duplex;
 	int old_pause;
 	phy_interface_t phy_interface;
 	int phy_addr;
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 75b26cba..9ff799a 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -82,24 +82,33 @@ static void bcmgenet_mii_setup(struct net_device *dev)
 	struct bcmgenet_priv *priv = netdev_priv(dev);
 	struct phy_device *phydev = priv->phydev;
 	u32 reg, cmd_bits = 0;
-	unsigned int status_changed = 0;
+	bool status_changed = false;
 
 	if (priv->old_link != phydev->link) {
-		status_changed = 1;
+		status_changed = true;
 		priv->old_link = phydev->link;
 	}
 
 	if (phydev->link) {
-		/* program UMAC and RGMII block based on established link
-		 * speed, pause, and duplex.
-		 * the speed set in umac->cmd tell RGMII block which clock
-		 * 25MHz(100Mbps)/125MHz(1Gbps) to use for transmit.
-		 * receive clock is provided by PHY.
-		 */
-		reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
-		reg &= ~OOB_DISABLE;
-		reg |= RGMII_LINK;
-		bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
+		/* check speed/duplex/pause changes */
+		if (priv->old_speed != phydev->speed) {
+			status_changed = true;
+			priv->old_speed = phydev->speed;
+		}
+
+		if (priv->old_duplex != phydev->duplex) {
+			status_changed = true;
+			priv->old_duplex = phydev->duplex;
+		}
+
+		if (priv->old_pause != phydev->pause) {
+			status_changed = true;
+			priv->old_pause = phydev->pause;
+		}
+
+		/* done if nothing has changed */
+		if (!status_changed)
+			return;
 
 		/* speed */
 		if (phydev->speed == SPEED_1000)
@@ -110,36 +119,39 @@ static void bcmgenet_mii_setup(struct net_device *dev)
 			cmd_bits = UMAC_SPEED_10;
 		cmd_bits <<= CMD_SPEED_SHIFT;
 
-		if (priv->old_duplex != phydev->duplex) {
-			status_changed = 1;
-			priv->old_duplex = phydev->duplex;
-		}
-
 		/* duplex */
 		if (phydev->duplex != DUPLEX_FULL)
 			cmd_bits |= CMD_HD_EN;
 
-		if (priv->old_pause != phydev->pause) {
-			status_changed = 1;
-			priv->old_pause = phydev->pause;
-		}
-
 		/* pause capability */
 		if (!phydev->pause)
 			cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE;
-	}
 
-	if (!status_changed)
-		return;
+		/*
+		 * Program UMAC and RGMII block based on established
+		 * link speed, duplex, and pause. The speed set in
+		 * umac->cmd tell RGMII block which clock to use for
+		 * transmit -- 25MHz(100Mbps) or 125MHz(1Gbps).
+		 * Receive clock is provided by the PHY.
+		 */
+		reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
+		reg &= ~OOB_DISABLE;
+		reg |= RGMII_LINK;
+		bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
 
-	if (phydev->link) {
 		reg = bcmgenet_umac_readl(priv, UMAC_CMD);
 		reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) |
 			       CMD_HD_EN |
 			       CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE);
 		reg |= cmd_bits;
 		bcmgenet_umac_writel(priv, reg, UMAC_CMD);
+	} else {
+		/* done if nothing has changed */
+		if (!status_changed)
+			return;
 
+		/* needed for MoCA fixed PHY to reflect correct link status */
+		netif_carrier_off(dev);
 	}
 
 	phy_print_status(phydev);
@@ -318,6 +330,12 @@ static int bcmgenet_mii_probe(struct net_device *dev)
 	/* Communicate the integrated PHY revision */
 	phy_flags = priv->gphy_rev;
 
+	/* Initialize link state variables that bcmgenet_mii_setup() uses */
+	priv->old_link = -1;
+	priv->old_speed = -1;
+	priv->old_duplex = -1;
+	priv->old_pause = -1;
+
 	phydev = of_phy_connect(dev, priv->phy_dn, bcmgenet_mii_setup,
 				phy_flags, priv->phy_interface);
 	if (!phydev) {
@@ -325,9 +343,6 @@ static int bcmgenet_mii_probe(struct net_device *dev)
 		return -ENODEV;
 	}
 
-	priv->old_link = -1;
-	priv->old_duplex = -1;
-	priv->old_pause = -1;
 	priv->phydev = phydev;
 
 	/* Configure port multiplexer based on what the probed PHY device since
-- 
2.1.0.rc2.206.gedb03e5

^ permalink raw reply related

* Re: HW bridging support using notifiers?
From: Florian Fainelli @ 2014-10-03 19:06 UTC (permalink / raw)
  To: Benjamin LaHaise
  Cc: netdev, davem, jiri, stephen, andy, tgraf, nbd, john.r.fastabend,
	edumazet, vyasevic, buytenh, sfeldma, Jamal Hadi Salim
In-Reply-To: <20141003142215.GR17057@kvack.org>

Hi Benjamin,

On 10/03/2014 07:22 AM, Benjamin LaHaise wrote:
> Hi Florian et al,
> 
> On Thu, Oct 02, 2014 at 06:48:57PM -0700, Florian Fainelli wrote:
>> Hi all,
>>
>> I am taking a look at adding HW bridging support to DSA, in way that's
>> usable outside of DSA.
> 
> I've been working on support for the RTL8366S switch, and our work is 
> directly overlapping here.  I actually have something that is working at 
> configuring port and tag based vlans on the RTL8366S.  I'll try to clean 
> up the code to post something for discussion over the next couple of days.

Cool, please do!

> 
>> Lennert's approach in 2008 [1] looks conceptually good to me,as he
>> noted, it uses a bunch of new ndo's which is not only limiting to one
>> ndo implementer per struct net_device, but also is mostly consuming the
>> information from the bridge layer, while the ndo is an action
> 
> I think having ndo implementer methods for hardware switch offloads makes 
> more sense.  Such a scheme is needed in order to implement the stacking of 
> devices that is required in order to transparently handle configuration of 
> vlans on switch ports where the 8021q device has to pass on the vlan tag 
> to the switch device.  The ndo methods do perform an action of causing the 
> switch to be configured to match the bridge config.  Additionally, they 
> can be used to veto changes that cannot be offloaded to hardware -- this 
> (configurable) behaviour is desired by some users of these APIs who wish 
> to be made aware when a particuarly configuration is not supported by the 
> underlying hardware.

Humm, that's a fair point, so not only would we want new NDOs, but we'd
also need to specify the return values (invalid, no space etc...).

As far as bridging alone is concerned (not including VLANs for now), I
don't think there are restrictions in terms of what the hardware can do,
since we mostly tell it to "group" N-ports together.

For VLANs, there should be a way for the switch driver to tell whether
that's supported or not.

> 
>> So here's what I am up to now:
>>
>> - use the NETDEV_JOIN notifier to discover when a bridge port is added
>> - use the NETDEV_LEAVE notifier, still need to verify this does not
>> break netconsole as indicated in net/bridge/br_if.c
>> - use the NETDEV_CHANGEINFODATA notifier to notify about STP state changes
> 
> To me, notifiers are the wrong model for join and leave.  Implementing 
> stacking on top of notifiers is somewhat more complicated.  Here are the 
> ndo methods I've implemented so far which are sufficient for basic config 
> of the RTL8366S.  They're fairly similar to those in [1].
> 
> +	int			(*ndo_join_bridge)(struct net_bridge *bridge,
> +						   struct net_device *dev,
> +						   int *switch_nr,
> +						   int *switch_port_nr,
> +						   int vlan);
> +	int			(*ndo_leave_bridge)(struct net_bridge *bridge,
> +						    struct net_device *dev,
> +						    int switch_nr,
> +						    int switch_port_nr,
> +						    int vlan);
> +	int			(*ndo_flood_xmit)(struct switch_info *dev,
> +						  struct sk_buff *skb,
> +						  u64 port_mask);

I don't think the switch_port_nr belongs here, this is something that
should be resolved within the implementer of these ndo's, whether that
is DSA, or Jiri's switchdev, since the net_device argument should be
linked to both the switch port number, and the switch number.

> 
> There are a couple of important points here.  In the case of joining and 
> leaving a bridge, the bridge needs to be provided with information it can 
> use to identify switch ports.  This is needed in order to offload the 
> flooding of packets to multiple ports, as otherwise the Linux bridge code 
> doesn't have any way to figure out which packets can be merged into a 
> single transmit via the ndo_flood_xmit() method.

I am not exactly sure yet how ndo_flood_xmit() fits in the picture here,
but it might be optional based on how the switch has been configured I
presume?

> 
>> Now, this raises a bunch of questions:
>>
>> - we would need a getter to return the stp state of a given network
>> device when called with NETDEV_CHANGEINFODATA, is that acceptable? This
>> would be the first function exported by the bridge layer to expose
>> internal data
> 
> I have yet to dig into STP, so I'll refrain from commenting on these parts 
> for now.

The idea is to use the Linux STP result and apply the results to the
bridge port/switch ports members directly, since switches (at least
those from Marvell and Broadcom) have that semantic built into their
hardware logic.

> 
>> NB: this also raises the question of the race condition and locking
>> within br_set_stp_state() and when the network devices notifier callback
>> runs
> U
>> - or do we need a new network device notifier accepting an opaque
>> pointer which could provide us with the data we what, something like
>> this: call_netdevices_notifier_data(NETDEV_CHANGEINFODATA, dev, info),
>> where info would be a structure/union telling what's this data about
>>
>> Let me know what you think, thanks!
>>
>> [1]: http://patchwork.ozlabs.org/patch/16578/
> 
> Thanks for the pointer to this.  Cheers!
> 
> 		-ben
> 
>> --
>> Florian
>> --
>> To unsubscribe from this list: send the line "unsubscribe netdev" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply

* Re: [PATCH net-next 0/2] sunvnet: Packet processing in non-interrupt context.
From: David Miller @ 2014-10-03 19:08 UTC (permalink / raw)
  To: sowmini.varadhan; +Cc: raghuram.kothakota, netdev
In-Reply-To: <20141003144024.GA12448@oracle.com>

From: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Date: Fri, 3 Oct 2014 10:40:24 -0400

> On (10/02/14 13:43), David Miller wrote:
>> For example, you can now move everything into software IRQ context,
>> just disable the VIO interrupt and unconditionally go into NAPI
>> context from the VIO event.
>> No more irqsave/irqrestore.
>> Then the TX path even can run mostly lockless, it just needs
>> to hold the VIO lock for a minute period of time.  The caller
>> holds the xmit_lock of the network device to prevent re-entry
>> into the ->ndo_start_xmit() path.
>> 
> 
> let me check into this and get back. I think the xmit path
> may also need to have some kind of locking for the dring access
> and ldc_write? I think you are suggesting that I should also
> move the control-packet processing to vnet_event_napi(), which
> I have not done in my patch. I will examine where that leads.

I think you should be able to get rid of all of the in-driver
locking in the fast paths.

NAPI ->poll() is non-reentrant, so all RX processing occurs
strictly in a serialized environment.

Once you do TX reclaim in NAPI context, then all you have to do is
take the generic netdev TX queue lock during the evaluation of whether
to wakeup the TX queue or not.  Worst case you need to hold the
TX netdev queue lock across the whole TX reclaim operation.

The VIO lock really ought to be entirely superfluous in the data
paths.

^ permalink raw reply

* [PATCH net-next 1/1] net: fec: fix build error at m68k platform
From: Frank Li @ 2014-10-03 19:00 UTC (permalink / raw)
  To: davem, lznuaa; +Cc: netdev, b38611, Frank Li

reproduce:
  wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
  chmod +x ~/bin/make.cross
  git checkout 1b7bde6d659d30f171259cc2dfba8e5dab34e735
  # save the attached .config to linux build tree
  make.cross ARCH=m68k

All error/warnings:

   drivers/net/ethernet/freescale/fec_main.c: In function 'fec_enet_rx_queue':
>> drivers/net/ethernet/freescale/fec_main.c:1470:3: error: implicit declaration of function 'prefetch' [-Werror=implicit-function-declaration]
      prefetch(skb->data - NET_IP_ALIGN);
      ^
   cc1: some warnings being treated as errors

missed included prefetch.h

Signed-off-by: Frank Li <Frank.Li@freescale.com>
---
 drivers/net/ethernet/freescale/fec_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 1f07db8..e190eb0 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -57,6 +57,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/if_vlan.h>
 #include <linux/pinctrl/consumer.h>
+#include <linux/prefetch.h>
 
 #include <asm/cacheflush.h>
 
-- 
1.9.1

^ permalink raw reply related

* Re: netlink NETLINK_ROUTE failure & Can the kernel really handle IPv6 properly
From: David Miller @ 2014-10-03 18:49 UTC (permalink / raw)
  To: ulf.samuelsson; +Cc: dcbw, netdev, hannes, netdev
In-Reply-To: <542E576B.50708@ericsson.com>

From: Ulf Samuelsson <ulf.samuelsson@ericsson.com>
Date: Fri, 3 Oct 2014 09:59:39 +0200

> The kernel module is a control module which collects information
> both from the kernel and from H/W, and talks to a userspace interface
> manager.
> 
> There is a proprietary management application which is used to
> configure the stack.
> This talks to the interface manager to handle different operations for
> IPv6.
> 
> The kernel module needs to know when interfaces are ready to use,
> I.E: know when it exits "tentative" mode to do its job properly,
> so the kernel module has to listen for RTM_NEWADDR.
> 
> In a simpler system, your approach would be OK.

Sorry, we're not going to help you with a proprietary driver
of this kind.

They should really just follow our upstream efforts to design
a usable kernel framework for bridge and routing hardware offloads.

^ permalink raw reply

* Re: [net 1/8] net/fsl_pq_mdio: Fix asm/ucc.h compile error for ARM
From: Sergei Shtylyov @ 2014-10-03 18:39 UTC (permalink / raw)
  To: Claudiu Manoil, netdev; +Cc: David S. Miller, Xiubo Li, Shruti Kanetkar
In-Reply-To: <1412352169-14414-2-git-send-email-claudiu.manoil@freescale.com>

Hello.

On 10/03/2014 08:02 PM, Claudiu Manoil wrote:

> The UCC specific code included in fsl_pq_mdio.c (with
> function calls from asm/ucc.h) is already guarded
> by these config options, so this ARM build fix provides
> consistency with the rest UCC specific code.

> Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
> ---
>   drivers/net/ethernet/freescale/fsl_pq_mdio.c | 2 ++
>   1 file changed, 2 insertions(+)

> diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
> index 583e71a..89b3fea 100644
> --- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
> +++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
> @@ -28,7 +28,9 @@
>   #include <linux/of_device.h>
>
>   #include <asm/io.h>
> +#if defined(CONFIG_UCC_GETH) || defined(CONFIG_UCC_GETH_MODULE)

    Use IS_ENABLED(CONFIG_UCC_GETH) instead.

WBR, Sergei

^ permalink raw reply

* [PATCH net-next 2/2] Altera TSE: Add support for no PHY
From: Walter Lozano @ 2014-10-03 18:09 UTC (permalink / raw)
  To: netdev
  Cc: davem, tobias.klauser, vbridgers2013, f.fainelli, nios2-dev,
	ezequiel, guido, Walter Lozano
In-Reply-To: <1412359741-8423-1-git-send-email-walter@vanguardiasur.com.ar>

This patch avoids PHY and MDIO probing if no PHY chip is present.
This is the case mainly in optical links where there is no need for
PHY chip, and therefore no need of MDIO. In this scenario Ethernet
MAC is directly connected to an optical module through an external
SFP transceiver.

Signed-off-by: Walter Lozano <walter@vanguardiasur.com.ar>
---
 drivers/net/ethernet/altera/altera_tse_main.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
index c85d029..b44a5f7 100644
--- a/drivers/net/ethernet/altera/altera_tse_main.c
+++ b/drivers/net/ethernet/altera/altera_tse_main.c
@@ -736,6 +736,10 @@ static int altera_tse_phy_get_addr_mdio_create(struct net_device *dev)
 
 	priv->phy_iface = of_get_phy_mode(np);
 
+	/* Avoid get phy addr and create mdio if no phy is present */
+	if (!priv->phy_iface)
+		return 0;
+
 	/* try to get PHY address from device tree, use PHY autodetection if
 	 * no valid address is given
 	 */
@@ -770,6 +774,10 @@ static int init_phy(struct net_device *dev)
 	struct phy_device *phydev;
 	struct device_node *phynode;
 
+	/* Avoid init phy in case of no phy present */
+	if (!priv->phy_iface)
+		return 0;
+
 	priv->oldlink = 0;
 	priv->oldspeed = 0;
 	priv->oldduplex = -1;
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH net-next 1/2] Altera TSE: Move PHY get addr and MDIO create
From: Walter Lozano @ 2014-10-03 18:09 UTC (permalink / raw)
  To: netdev
  Cc: davem, tobias.klauser, vbridgers2013, f.fainelli, nios2-dev,
	ezequiel, guido, Walter Lozano
In-Reply-To: <1412359741-8423-1-git-send-email-walter@vanguardiasur.com.ar>

Move PHY get addr and MDIO create to a new function to improve readability
and make it easier to avoid its usage. This will be useful for example in
the case where there is no PHY chip.

Signed-off-by: Walter Lozano <walter@vanguardiasur.com.ar>
---
 drivers/net/ethernet/altera/altera_tse_main.c |   57 ++++++++++++++++---------
 1 file changed, 36 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
index 7330681..c85d029 100644
--- a/drivers/net/ethernet/altera/altera_tse_main.c
+++ b/drivers/net/ethernet/altera/altera_tse_main.c
@@ -728,6 +728,40 @@ static struct phy_device *connect_local_phy(struct net_device *dev)
 	return phydev;
 }
 
+static int altera_tse_phy_get_addr_mdio_create(struct net_device *dev)
+{
+	struct altera_tse_private *priv = netdev_priv(dev);
+	struct device_node *np = priv->device->of_node;
+	int ret = 0;
+
+	priv->phy_iface = of_get_phy_mode(np);
+
+	/* try to get PHY address from device tree, use PHY autodetection if
+	 * no valid address is given
+	 */
+
+	if (of_property_read_u32(priv->device->of_node, "phy-addr",
+			 &priv->phy_addr)) {
+		priv->phy_addr = POLL_PHY;
+	}
+
+	if (!((priv->phy_addr == POLL_PHY) ||
+		  ((priv->phy_addr >= 0) && (priv->phy_addr < PHY_MAX_ADDR)))) {
+		netdev_err(dev, "invalid phy-addr specified %d\n",
+			priv->phy_addr);
+		return -ENODEV;
+	}
+
+	/* Create/attach to MDIO bus */
+	ret = altera_tse_mdio_create(dev,
+					 atomic_add_return(1, &instance_count));
+
+	if (ret)
+		return -ENODEV;
+
+	return 0;
+}
+
 /* Initialize driver's PHY state, and attach to the PHY
  */
 static int init_phy(struct net_device *dev)
@@ -1231,7 +1265,6 @@ static int altera_tse_probe(struct platform_device *pdev)
 	struct resource *dma_res;
 	struct altera_tse_private *priv;
 	const unsigned char *macaddr;
-	struct device_node *np = pdev->dev.of_node;
 	void __iomem *descmap;
 	const struct of_device_id *of_id = NULL;
 
@@ -1408,26 +1441,8 @@ static int altera_tse_probe(struct platform_device *pdev)
 	else
 		eth_hw_addr_random(ndev);
 
-	priv->phy_iface = of_get_phy_mode(np);
-
-	/* try to get PHY address from device tree, use PHY autodetection if
-	 * no valid address is given
-	 */
-	if (of_property_read_u32(pdev->dev.of_node, "phy-addr",
-				 &priv->phy_addr)) {
-		priv->phy_addr = POLL_PHY;
-	}
-
-	if (!((priv->phy_addr == POLL_PHY) ||
-	      ((priv->phy_addr >= 0) && (priv->phy_addr < PHY_MAX_ADDR)))) {
-		dev_err(&pdev->dev, "invalid phy-addr specified %d\n",
-			priv->phy_addr);
-		goto err_free_netdev;
-	}
-
-	/* Create/attach to MDIO bus */
-	ret = altera_tse_mdio_create(ndev,
-				     atomic_add_return(1, &instance_count));
+	/* get phy addr and create mdio */
+	ret = altera_tse_phy_get_addr_mdio_create(ndev);
 
 	if (ret)
 		goto err_free_netdev;
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH net-next 0/2] Altera TSE with no PHY
From: Walter Lozano @ 2014-10-03 18:08 UTC (permalink / raw)
  To: netdev
  Cc: davem, tobias.klauser, vbridgers2013, f.fainelli, nios2-dev,
	ezequiel, guido, Walter Lozano

In some scenarios there is no PHY chip present, for example in optical links.
This serie of patches moves PHY get addr and MDIO create to a new function and
avoids PHY and MDIO probing in these cases.

Walter Lozano (2):
  Altera TSE: Move PHY get addr and MDIO create
  Altera TSE: Add support for no PHY

 drivers/net/ethernet/altera/altera_tse_main.c |   65 +++++++++++++++++--------
 1 file changed, 44 insertions(+), 21 deletions(-)

-- 
1.7.10.4

^ permalink raw reply

* pull request: wireless-next 2014-10-03
From: John W. Linville @ 2014-10-03 18:01 UTC (permalink / raw)
  To: davem; +Cc: linux-wireless, netdev, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 42813 bytes --]

Dave,

Please pull tihs batch of updates intended for the 3.18 stream!

For the iwlwifi bits, Emmanuel says:

"I have here a few things that depend on the latest mac80211's changes:
RRM, TPC, Quiet Period etc...  Eyal keeps improving our rate control
and we have a new device ID. This last patch should probably have
gone to wireless.git, but at that stage, I preferred to send it to
-next and CC stable."

For (most of) the Atheros bits, Kalle says:

"The only new feature is testmode support from me. Ben added a new method
to crash the firmware with an assert for debug purposes. As usual, we
have lots of smaller fixes from Michal. Matteo fixed a Kconfig
dependency with debugfs. I fixed some warnings recently added to
checkpatch."

For the NFC bits, Samuel says:

"We've had major updates for TI and ST Microelectronics drivers, and a
few NCI related changes.

For TI's trf7970a driver:

- Target mode support for trf7970a
- Suspend/resume support for trf7970a
- DT properties additions to handle different quirks
- A bunch of fixes for smartphone IOP related issues

For ST Microelectronics' ST21NFCA and ST21NFCB drivers:

- ISO15693 support for st21nfcb
- checkpatch and sparse related warning fixes
- Code cleanups and a few minor fixes

Finally, Marvell added ISO15693 support to the NCI stack, together with a
couple of NCI fixes."

For the Bluetooth bits, Johan says:

"This 3.18 pull request replaces the one I did on Monday ("bluetooth-next
2014-09-22", which hasn't been pulled yet). The additions since the last
request are:

 - SCO connection fix for devices not supporting eSCO
 - Cleanups regarding the SCO establishment logic
 - Remove unnecessary return value from logging functions
 - Header compression fix for 6lowpan
 - Cleanups to the ieee802154/mrf24j40 driver

Here's a copy from previous request that this one replaces:

'
Here are some more patches for 3.18. They include various fixes to the
btusb HCI driver, a fix for LE SMP, as well as adding Jukka to the
MAINTAINERS file for generic 6LoWPAN (as requested by Alexander Aring).

I've held on to this pull request a bit since we were waiting for a SCO
related fix to get sorted out first. However, since the merge window is
getting closer I decided not to wait for it. If we do get the fix sorted
out there'll probably be a second small pull request later this week.
'"

And,

"Unless 3.17 gets delayed this will probably be our last -next pull request for
3.18. We've got:

  - New Marvell hardware supportr
  - Multicast support for 6lowpan
  - Several of 6lowpan fixes & cleanups
  - Fix for a (false-positive) lockdep warning in L2CAP
  - Minor btusb cleanup"

On top of all that comes the usual sort of updates to ath5k, ath9k,
ath10k, brcmfmac, mwifiex, and wil6210.  This time around there are
also a number of rtlwifi updates to enable some new hardware and
to reconcile the in-kernel drivers with some newer releases of the
Realtek vendor drivers.  Also of note is some device tree work for
the bcma bus.

Please let me know if there are problems!

Thanks,

John

---

The following changes since commit 7a0a260a0f6ff0226c33cf28a5cc26711ab0ae5f:

  ath9k: enable ext channel pulse detection (2014-09-16 16:18:42 -0400)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git tags/master-2014-10-02

for you to fetch changes up to 3f08e47291879fb047d7d4464d2beaedfea4eb63:

  rtlwifi: Fix static checker warnings for various drivers (2014-10-02 14:26:32 -0400)

----------------------------------------------------------------
Alexander Bondar (1):
      iwlwifi: mvm: Allow schedule scan while connected

Amitkumar Karwar (4):
      Bluetooth: btmrvl: rename definitions from 88xx to 8897
      Bluetooth: btusb: remove redundant lock variable
      mwifiex: error path handling in pcie firmware dump
      mwifiex: add more dump information for PCIe interface

Andrei Otcheretianski (3):
      iwlwifi: mvm: Update TX power in TPC reports
      iwlwifi: mvm: Set RRM_ENABLED bit in scan commands
      iwlwifi: mvm: Refactor and fix max probe len computation

Arend van Spriel (1):
      brcmfmac: assure P2P discovery is disabled when setting P2P_DEVICE mac address

Assaf Krauss (1):
      iwlwifi: mvm: Announce Quiet Period support

Avinash Patil (6):
      mwifiex: ensure user_scan_in not NULL while setting scan channel gap
      mwifiex: fix soft lockup during iperf UDP RX
      mwifiex: do not decrement rx_pending count twice
      mwifiex: remove unnecessary rx_q lock
      mwifiex: few more register offset entries for sdio card structure
      mwifiex: add support for SD8887 chipset

Avri Altman (1):
      iwlwifi: mvm: prepare for scheduler config command

Axel Lin (1):
      NFC: st21nfca: Convert to use devm_gpio_request_one

Ben Greear (1):
      ath10k: support firmware crash-by-assert

Bernhard Thaler (1):
      Bluetooth: Check for SCO type before setting retransmission effort

Christophe Ricard (29):
      NFC: st21nfca: Fix sparse: cast to restricted __be32
      NFC: st21nfca: Fix scripts/checkpatch.pl warnings "Missing a blank line after declarations"
      NFC: st21nfcb: Fix scripts/checkpatch.pl error "code indent should use tabs where possible"
      NFC: st21nfcb: Convert to use devm_gpio_request_one
      NFC: st21nfcb: Remove double assignment of .owner in struct device_driver
      NFC: st21nfcb: Remove useless new line in nfc_err call
      NFC: st21nfcb: Remove inappropriate kfree on a previously devm_kzalloc pointer
      NFC: st21nfca: Fix logic when setting session_id
      NFC: st21nfca: Remove useless new line in nfc_err call
      NFC: st21nfca: Change nfcid3 generation
      NFC: st21nfca: Remove useless err == 0 condition
      NFC: st21nfca: Remove useless IS_ERR(skb) conditions
      NFC: st21nfca: Add condition to make sure atr_req->length is valid.
      NFC: st21nfcb: Fix logic when running into i2c read retry
      NFC: st21nfca: Clean up st21nfca.h macros
      NFC: st21nfca: Clean up macros alignment
      NFC: st21nfca: fix "WARNING: else is not generally useful after a break or return"
      NFC: st21nfcb: Remove useless headers
      NFC: st21nfca: Fix few coding style issue
      NFC: st21nfca: Fix potential skb leaks in NFC-DEP code
      NFC: st21nfca: Fix recursive fault when doing p2p in target mode.
      NFC: dts: st21nfcb_i2c: Fix invalid interrupts polarity.
      NFC: st21nfcb: Fix improper management of -EREMOTEIO error code.
      NFC: st21nfcb: Fix improper ndlc T2 management
      NFC: nci: Add support for proprietary RF Protocols
      NFC: st21nfcb: Add ISO15693 Reader/Writer support
      NFC: st21nfcb: remove error output
      NFC: st21nfca: ERR_PTR vs NULL fix
      NFC: st21nfca: Fix potential double kfree_skb error

Emil Goode (1):
      NFC: st21nfca: Remove double assignment of .owner in struct device_driver

Emmanuel Grumbach (1):
      iwlwifi: mvm: disable BT Co-running by default

Eyal Shapira (5):
      iwlwifi: mvm: choose an initial tx rate based on rssi conditions
      iwlwifi: mvm: rs: refactor to allow direct rs updating
      iwlwifi: mvm: limit aggregation size in low latency to 6
      iwlwifi: mvm: report all BA notifs to RS
      iwlwifi: mvm: rs: fix logic in case of multiple TIDs

Felix Fietkau (7):
      ath5k: add missing include for debug code
      ath9k: use ah->get_mac_revision for all SoC devices if available
      ath9k_hw: disable hardware ad-hoc flag on ar934x rev 3
      Revert "ath9k_hw: reduce ANI firstep range for older chips"
      ath9k_hw: reduce ANI spur immunity setting on HT40 extension channel
      ath9k_hw: fix PLL clock initialization for newer SoC
      ath9k: fix getting tx duration for dynack

Hante Meuleman (5):
      brcmfmac: On scan timeout do send received results.
      brcmfmac: Fix sign issue with IOCTL return code in msgbuf.
      brcmfmac: Avoid usage of GFP_ATOMIC.
      brcmfmac: Fix crash on cleanup.
      brcmfmac: Add wowl support for PCIE devices.

Hauke Mehrtens (1):
      bcma: register bcma as device tree driver

Ido Yariv (1):
      iwlwifi: mvm: support cloned tx skbs

Joe Perches (1):
      Bluetooth: Convert bt_<level> logging functions to return void

Johan Hedberg (6):
      Bluetooth: btusb: Use GFP_KERNEL in btusb_send_frame()
      Bluetooth: Fix setting correct security level when initiating SMP
      Bluetooth: Fix reason code used for rejecting SCO connections
      Bluetooth: Add retransmission effort into SCO parameter table
      Bluetooth: Rename sco_param_wideband table to esco_param_msbc
      Bluetooth: Fix lockdep warning with l2cap_chan_connect

John W. Linville (5):
      Merge branch 'master' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
      Merge branch 'for-linville' of git://github.com/kvalo/ath
      Merge tag 'nfc-next-3.18-1' of git://git.kernel.org/.../sameo/nfc-next
      Merge branch 'for-upstream' of git://git.kernel.org/.../bluetooth/bluetooth-next
      Merge branch 'for-upstream' of git://git.kernel.org/.../bluetooth/bluetooth-next

Jukka Rissanen (8):
      MAINTAINERS: add maintainer for generic 6LoWPAN
      Bluetooth: 6lowpan: Make sure skb exists before accessing it
      Bluetooth: 6lowpan: Ensure header compression does not corrupt IPv6 header
      Bluetooth: 6lowpan: Enable multicast support
      Bluetooth: 6lowpan: Memory leak as the skb is not freed
      Bluetooth: 6lowpan: Avoid memory leak if memory allocation fails
      Bluetooth: 6lowpan: Return EAGAIN error also for multicast packets
      Bluetooth: 6lowpan: Check transmit errors for multicast packets

Kalle Valo (12):
      ath10k: make ath10k_wmi_cmd_send() public
      ath10k: add testmode
      ath10k: fix parenthesis alignment warning in ath10k_htt_rx_alloc()
      ath10k: fix checkpatch warnings about parenthesis alignment
      ath10k: fix use of multiple blank lines
      ath10k: fix missing a blank line after declarations
      ath10k: fix space after a cast style errors
      ath10k: don't use return on void functions
      ath10k: else is not generally useful after a break or return
      ath10k: miscellaneous checkpatch fixes
      ath10k: reformat help text in ath10k_read_simulate_fw_crash()
      ath10k: use ether_addr_copy()

Larry Finger (21):
      rtlwifi: btcoexist: Fix Smatch warning
      rtlwifi: Remove extra workqueue for enter/leave power state
      rtlwifi: rtl_pci: Start modification for new drivers
      rtlwifi: Modify core.c for new drivers
      rtlwifi: Modify base.{c,h} for new drivers
      rtlwifi: Modify cam.{c,h} and efuse.{c,h} for new drivers
      rtlwifi: Update power-save routines for 062814 driver
      rtlwifi: Finish modifying core routines for new drivers
      rtlwifi: rtl8188ee: Update driver to match Realtek release of 06282014
      rtlwifi: rtl8821ae: Move driver from staging to regular tree
      rtlwifi: Fix problems with building an allyesconfig
      rtlwifi: rtl8188ee: rtl8821ae: Fix a queue locking problem
      rtlwifi: rtl8192ee: Move driver from staging to the regular tree
      rtlwifi: rtl8723ae: Update driver to match 06/28/14 Realtek version
      rtlwifi: rtl8723be: Update driver to match Realtek release of 06/28/14
      rtlwifi: rtl8192ce: rtl8192common: Update for latest version of Realtek drivers
      rtlwifi: rtl8188ee: rtl8192com: rtl8192cu: rtl8192ee: rtl8723ae: rtl87323be: rtl8821ae: Use common cmd_send_packet
      rtlwifi: rtl8188ee: rtl8723ae: rtl8821ae: Initialize some variables
      rtlwifi: Fix randconfig build error with next-20140930
      rtlwifi: Fix Kconfig for RTL8192EE
      rtlwifi: Fix static checker warnings for various drivers

Liad Kaufman (2):
      iwlwifi: pcie: fix HW_REV saving for 8000 series
      iwlwifi: 8000: fix fw name to account for revision

Luciano Coelho (1):
      iwlwifi: mvm: add debugfs entry to read the current temperature

Maithili Hinge (1):
      mwifiex: add client mac address while configuring keys on GO.

Marcel Holtmann (7):
      Bluetooth: btusb: Separate TX URB allocation and submission
      Bluetooth: Add BUILD_BUG_ON check for SKB control buffer size
      Bluetooth: Provide HCI command opcode information to driver
      Bluetooth: btusb: Fix old coding style issues
      Bluetooth: btusb: Split fragement receiption into separate functions
      Bluetooth: btusb: Implement driver internal packet reassembly
      Bluetooth: Remove exported hci_recv_fragment function

Mark A. Greer (44):
      NFC: digital: Add Inititor-side PSL support
      NFC: trf7970a: Add VIN voltage override support
      NFC: trf7970a: Document the 'vin-voltage-override' DTS property
      NFC: trf7970a: Move IRQ Status Read quirk to device tree
      NFC: trf7970a: Document the 'irq-status-read-quirk' DT property
      NFC: trf7970a: Add quirk to keep EN2 low
      NFC: trf7970a: Document the 'en2-rf-quirk' DT property
      NFC: trf7970a: Make gpio labels more readable
      NFC: trf7970a: Remove incorrect of_node_put() call
      NFC: trf7970a: Remove trf7970a_tg_listen_mdaa()
      NFC: trf7970a: Call spi_setup() to configure SPI communication
      NFC: trf7970a: Use spi_sync() instead of spi_write_then_read()
      NFC: trf7970a: Ignore Overflow bit in FIFO Status Register
      NFC: trf7970a: FIFO Size is really 127 bytes
      NFC: trf7970a: Remove unnecessary sleep
      NFC: trf7970a: Disable SYS_CLK Output
      NFC: trf7970a: Initialize when enabling RF
      NFC: trf7970a: Add RF technology specific guard times
      NFC: trf7970a: Recalculate driver timeout values
      NFC: trf7970a: Clear possible spurious interrupt before transmitting
      NFC: trf7970a: Remove unnecessary FIFO reset & RSSI read
      NFC: trf7970a: Prefix TX data when refilling FIFO
      NFC: trf7970a: Only fill FIFO if there is space
      NFC: trf7970a: Handle low-watermark IRQ when transmitting
      NFC: trf7970a: Reread FIFO Status Register when draining FIFO
      NFC: trf7970a: Ensure no more RX data before completing receive
      NFC: trf7970a: Return error code when turning on RF fails
      NFC: trf7970a: Rename TRF7970A_ST_OFF to TRF7970A_ST_RF_OFF
      NFC: trf7970a: Don't assume CONFIG_PM_RUNTIME is enabled
      NFC: trf7970a: Create startup and shutdown routines
      NFC: trf7970a: Add System Suspend/Resume support
      NFC: trf7970a: Delay after initialization
      NFC: trf7970a: Add '_in_' to initiator routines
      NFC: trf7970a: Don't turn off RF if its already off
      NFC: trf7970a: trf7970a_init() turns off the RF transmitter
      NFC: trf7970a: Don't turn on RF if there is already an RF field
      NFC: trf7970a: Cancel timer when error encountered
      NFC: trf7970a: Handle timeout values of zero
      NFC: trf7970a: Add Target Mode Support
      NFC: trf7970a: Add Target Mode Detection Support
      NFC: trf7970a: Remove useless local variable
      NFC: trf7970a: Remove unnecessary local variable initialization
      NFC: trf7970a: Unlock mutex before exiting trf7970a_irq()
      NFC: trf7970a: Unlock mutex before exiting _trf7970a_tg_listen()

Matteo Croce (1):
      ath10k: ATH10K_DEBUGFS depends on DEBUG_FS

Michal Kazior (11):
      ath10k: re-enable interrupts properly in hw recovery
      ath10k: fix num_legacy_stations tracking
      ath10k: kill tasklets after free_irq
      ath10k: fix monitor start/stop sequences
      ath10k: stop monitor vdev for sta assoc
      ath10k: remove diag_*_access functions
      ath10k: add device/driver strings to tracepoints
      ath10k: don't access tx_info while overwriting it
      ath10k: move fw_crash_dump allocation
      ath10k: use proper service bitmap size
      ath10k: fix debugfs_create_dir() checking

Oren Givon (1):
      iwlwifi: Add missing PCI IDs for the 7260 series

Paul Bolle (1):
      ath5k: Remove AHB bus support

Rafał Miłecki (3):
      bcma: print chip ID in a more user-friendly form
      bcma: gpio: use ChipCommon GPIO IRQ on BCM47XX arch only
      bcma: use chipcommon node from DT for SoC GPIO chip

Simon Vincent (1):
      ieee802154: 6lowpan: ensure header compression does not corrupt ipv6 header

Stanislaw Gruszka (2):
      rt2800: correct BBP1_TX_POWER_CTRL mask
      MAINTAINERS: change rt2x00 maintainer

Sujith Manoharan (16):
      ath9k: Cache BSS information
      ath9k: Fix p2p address management
      ath9k: Fix queue management
      ath9k: Use normal queues for offchannel frames
      ath9k: Fix offchannel queuing
      ath9k: Check early for HW reset
      ath: Add support for tracing
      ath9k: Print RoC expiration
      ath9k: Check pending frames properly
      ath9k: Fix pending frame check
      ath9k: Remove duplicate code
      ath9k: Fix queue handling in flush()
      ath9k: Pass context to ath9k_chanctx_wake_queues()
      ath9k: Add ath9k_chanctx_stop_queues()
      ath9k: Fix queue handling for channel contexts
      ath9k: Fix flushing in MCC mode

Varka Bhadram (3):
      mrf24j40: fix Missing a blank line after declarations
      mrf24j40: remove unnecessary return statement
      mrf24j40: use pr_* / dev_* instead of printk()

Vincent Cuissard (3):
      NFC: NCI: Add support of ISO15693
      NFC: NCI: Fix nci_register_device init sequence
      NFC: NCI: Fix NCI RF FRAME interface usage

Vladimir Kondratiev (3):
      wil6210: ethtool ops
      wil6210: manual FW error recovery mode
      wil6210: atomic I/O for the card memory

Xinming Hu (1):
      Bluetooth: btmrvl: support Marvell Bluetooth device SD8887

andrea.merello (1):
      rtl818x_pci: add RSSI information for rtl8187SE

 Documentation/devicetree/bindings/bus/bcma.txt     |   32 +
 .../devicetree/bindings/net/nfc/st21nfcb.txt       |    2 +-
 .../devicetree/bindings/net/nfc/trf7970a.txt       |    8 +
 MAINTAINERS                                        |    5 +-
 drivers/bcma/bcma_private.h                        |   14 +
 drivers/bcma/driver_gpio.c                         |    8 +-
 drivers/bcma/host_soc.c                            |   81 +
 drivers/bcma/main.c                                |   52 +-
 drivers/bcma/scan.c                                |    8 +-
 drivers/bluetooth/Kconfig                          |    4 +-
 drivers/bluetooth/btmrvl_sdio.c                    |   36 +-
 drivers/bluetooth/btusb.c                          |  515 ++-
 drivers/net/ieee802154/mrf24j40.c                  |   19 +-
 drivers/net/wireless/ath/Kconfig                   |    8 +
 drivers/net/wireless/ath/Makefile                  |    4 +
 drivers/net/wireless/ath/ath.h                     |    1 +
 drivers/net/wireless/ath/ath10k/Kconfig            |    2 +-
 drivers/net/wireless/ath/ath10k/Makefile           |    1 +
 drivers/net/wireless/ath/ath10k/bmi.h              |    1 -
 drivers/net/wireless/ath/ath10k/ce.c               |    2 -
 drivers/net/wireless/ath/ath10k/ce.h               |   13 +-
 drivers/net/wireless/ath/ath10k/core.c             |  106 +-
 drivers/net/wireless/ath/ath10k/core.h             |   25 +-
 drivers/net/wireless/ath/ath10k/debug.c            |  102 +-
 drivers/net/wireless/ath/ath10k/debug.h            |   12 +
 drivers/net/wireless/ath/ath10k/hif.h              |    1 -
 drivers/net/wireless/ath/ath10k/htc.c              |   10 +-
 drivers/net/wireless/ath/ath10k/htc.h              |    1 -
 drivers/net/wireless/ath/ath10k/htt.c              |    2 +-
 drivers/net/wireless/ath/ath10k/htt.h              |    3 +-
 drivers/net/wireless/ath/ath10k/htt_rx.c           |   54 +-
 drivers/net/wireless/ath/ath10k/htt_tx.c           |    2 -
 drivers/net/wireless/ath/ath10k/hw.h               |    2 +
 drivers/net/wireless/ath/ath10k/mac.c              |  192 +-
 drivers/net/wireless/ath/ath10k/pci.c              |  183 +-
 drivers/net/wireless/ath/ath10k/rx_desc.h          |    1 -
 drivers/net/wireless/ath/ath10k/targaddrs.h        |    1 -
 drivers/net/wireless/ath/ath10k/testmode.c         |  382 ++
 drivers/net/wireless/ath/ath10k/testmode.h         |   46 +
 drivers/net/wireless/ath/ath10k/testmode_i.h       |   70 +
 drivers/net/wireless/ath/ath10k/trace.h            |  105 +-
 drivers/net/wireless/ath/ath10k/txrx.c             |    2 +-
 drivers/net/wireless/ath/ath10k/wmi.c              |  103 +-
 drivers/net/wireless/ath/ath10k/wmi.h              |   33 +-
 drivers/net/wireless/ath/ath5k/Kconfig             |   14 +-
 drivers/net/wireless/ath/ath5k/Makefile            |    1 -
 drivers/net/wireless/ath/ath5k/ahb.c               |  234 -
 drivers/net/wireless/ath/ath5k/ath5k.h             |   28 -
 drivers/net/wireless/ath/ath5k/base.c              |   14 -
 drivers/net/wireless/ath/ath5k/debug.c             |    1 +
 drivers/net/wireless/ath/ath5k/led.c               |    6 -
 drivers/net/wireless/ath/ath9k/ar5008_phy.c        |    9 +-
 drivers/net/wireless/ath/ath9k/ar9002_mac.c        |   26 +-
 drivers/net/wireless/ath/ath9k/ar9003_mac.c        |   28 +-
 drivers/net/wireless/ath/ath9k/ar9003_phy.c        |   24 +-
 drivers/net/wireless/ath/ath9k/ath9k.h             |   16 +-
 drivers/net/wireless/ath/ath9k/channel.c           |   54 +-
 drivers/net/wireless/ath/ath9k/dynack.c            |    2 +-
 drivers/net/wireless/ath/ath9k/hw-ops.h            |    6 +
 drivers/net/wireless/ath/ath9k/hw.c                |   29 +-
 drivers/net/wireless/ath/ath9k/hw.h                |    1 +
 drivers/net/wireless/ath/ath9k/mac.h               |    2 +-
 drivers/net/wireless/ath/ath9k/main.c              |   79 +-
 drivers/net/wireless/ath/ath9k/reg.h               |   15 +
 drivers/net/wireless/ath/ath9k/xmit.c              |   29 +-
 drivers/net/wireless/ath/main.c                    |    3 +
 drivers/net/wireless/ath/trace.c                   |   20 +
 drivers/net/wireless/ath/trace.h                   |   71 +
 drivers/net/wireless/ath/wil6210/Makefile          |    2 +
 drivers/net/wireless/ath/wil6210/cfg80211.c        |    4 +
 drivers/net/wireless/ath/wil6210/debugfs.c         |   67 +
 drivers/net/wireless/ath/wil6210/ethtool.c         |  103 +
 drivers/net/wireless/ath/wil6210/interrupt.c       |   12 +-
 drivers/net/wireless/ath/wil6210/ioctl.c           |  173 +
 drivers/net/wireless/ath/wil6210/main.c            |   72 +-
 drivers/net/wireless/ath/wil6210/netdev.c          |   13 +
 drivers/net/wireless/ath/wil6210/wil6210.h         |   21 +-
 drivers/net/wireless/ath/wil6210/wmi.c             |    1 +
 drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h  |   11 +
 drivers/net/wireless/brcm80211/brcmfmac/feature.c  |    2 +
 drivers/net/wireless/brcm80211/brcmfmac/feature.h  |    3 +-
 drivers/net/wireless/brcm80211/brcmfmac/flowring.c |    4 +-
 .../net/wireless/brcm80211/brcmfmac/fwil_types.h   |   56 +
 drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c |    2 +-
 drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c   |  133 +-
 drivers/net/wireless/brcm80211/brcmfmac/p2p.c      |    5 +-
 drivers/net/wireless/brcm80211/brcmfmac/pcie.c     |   74 +-
 .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c  |  114 +-
 .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.h  |    7 +-
 drivers/net/wireless/brcm80211/include/defs.h      |    5 +-
 drivers/net/wireless/iwlwifi/iwl-8000.c            |    2 +-
 drivers/net/wireless/iwlwifi/iwl-drv.c             |   18 +
 drivers/net/wireless/iwlwifi/iwl-fw.h              |   17 +-
 drivers/net/wireless/iwlwifi/mvm/constants.h       |    3 +-
 drivers/net/wireless/iwlwifi/mvm/debugfs.c         |   25 +
 drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h     |    3 +
 drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h       |    2 +
 drivers/net/wireless/iwlwifi/mvm/fw-api.h          |   60 +
 drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c        |   20 +-
 drivers/net/wireless/iwlwifi/mvm/mac80211.c        |   37 +-
 drivers/net/wireless/iwlwifi/mvm/mvm.h             |   43 +
 drivers/net/wireless/iwlwifi/mvm/ops.c             |    3 +-
 drivers/net/wireless/iwlwifi/mvm/rs.c              |  240 +-
 drivers/net/wireless/iwlwifi/mvm/rs.h              |    4 +
 drivers/net/wireless/iwlwifi/mvm/rx.c              |   41 +-
 drivers/net/wireless/iwlwifi/mvm/scan.c            |   79 +-
 drivers/net/wireless/iwlwifi/mvm/sta.c             |   20 +-
 drivers/net/wireless/iwlwifi/mvm/sta.h             |    2 +
 drivers/net/wireless/iwlwifi/mvm/tt.c              |    2 +-
 drivers/net/wireless/iwlwifi/mvm/tx.c              |   60 +-
 drivers/net/wireless/iwlwifi/mvm/utils.c           |   46 +
 drivers/net/wireless/iwlwifi/pcie/drv.c            |    4 +
 drivers/net/wireless/iwlwifi/pcie/trans.c          |    2 +-
 drivers/net/wireless/mwifiex/Kconfig               |    4 +-
 drivers/net/wireless/mwifiex/init.c                |    1 -
 drivers/net/wireless/mwifiex/main.c                |   11 +-
 drivers/net/wireless/mwifiex/main.h                |    3 +-
 drivers/net/wireless/mwifiex/pcie.c                |   25 +-
 drivers/net/wireless/mwifiex/scan.c                |   33 +-
 drivers/net/wireless/mwifiex/sdio.c                |   47 +-
 drivers/net/wireless/mwifiex/sdio.h                |  114 +-
 drivers/net/wireless/mwifiex/sta_cmd.c             |    2 +-
 drivers/net/wireless/rt2x00/rt2800.h               |    2 +-
 drivers/net/wireless/rtl818x/rtl8180/dev.c         |   28 +-
 drivers/net/wireless/rtlwifi/Kconfig               |   29 +-
 drivers/net/wireless/rtlwifi/Makefile              |    2 +
 drivers/net/wireless/rtlwifi/base.c                |  661 ++-
 drivers/net/wireless/rtlwifi/base.h                |   55 +-
 .../net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c  |    2 +-
 .../net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h  |    2 +-
 drivers/net/wireless/rtlwifi/cam.c                 |   61 +-
 drivers/net/wireless/rtlwifi/cam.h                 |   10 +-
 drivers/net/wireless/rtlwifi/core.c                |  888 +++-
 drivers/net/wireless/rtlwifi/core.h                |   11 +-
 drivers/net/wireless/rtlwifi/debug.c               |   10 +-
 drivers/net/wireless/rtlwifi/debug.h               |   11 +-
 drivers/net/wireless/rtlwifi/efuse.c               |  228 +-
 drivers/net/wireless/rtlwifi/efuse.h               |   17 +-
 drivers/net/wireless/rtlwifi/pci.c                 |  853 ++--
 drivers/net/wireless/rtlwifi/pci.h                 |   56 +-
 drivers/net/wireless/rtlwifi/ps.c                  |  283 +-
 drivers/net/wireless/rtlwifi/ps.h                  |   71 +-
 .../wireless/rtlwifi/{rtl8723ae => }/pwrseqcmd.h   |    6 +-
 drivers/net/wireless/rtlwifi/rc.c                  |   97 +-
 drivers/net/wireless/rtlwifi/rc.h                  |    9 +-
 drivers/net/wireless/rtlwifi/regd.c                |  108 +-
 drivers/net/wireless/rtlwifi/regd.h                |   11 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/def.h       |   66 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/dm.c        |  881 ++--
 drivers/net/wireless/rtlwifi/rtl8188ee/dm.h        |   23 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/fw.c        |  259 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/fw.h        |   29 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/hw.c        | 1251 ++---
 drivers/net/wireless/rtlwifi/rtl8188ee/led.c       |   49 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/led.h       |    4 -
 drivers/net/wireless/rtlwifi/rtl8188ee/phy.c       | 2151 +++++----
 drivers/net/wireless/rtlwifi/rtl8188ee/phy.h       |   49 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.c    |  100 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseq.h    |  415 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c |  139 -
 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h |   97 -
 drivers/net/wireless/rtlwifi/rtl8188ee/reg.h       | 2936 ++++++------
 drivers/net/wireless/rtlwifi/rtl8188ee/rf.c        |  282 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/rf.h        |    7 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/sw.c        |   43 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/sw.h        |    6 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/table.c     |    6 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/table.h     |   12 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/trx.c       |  443 +-
 drivers/net/wireless/rtlwifi/rtl8188ee/trx.h       |   83 +-
 drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c  |    2 +-
 drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c  |  447 +-
 drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h  |   40 +-
 drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c |  815 ++--
 drivers/net/wireless/rtlwifi/rtl8192c/phy_common.h |    2 +-
 drivers/net/wireless/rtlwifi/rtl8192ce/def.h       |   15 -
 drivers/net/wireless/rtlwifi/rtl8192ce/dm.h        |   64 -
 drivers/net/wireless/rtlwifi/rtl8192ce/hw.c        |   16 +-
 drivers/net/wireless/rtlwifi/rtl8192ce/hw.h        |    2 +-
 drivers/net/wireless/rtlwifi/rtl8192ce/phy.c       |    3 +
 drivers/net/wireless/rtlwifi/rtl8192ce/phy.h       |  107 -
 drivers/net/wireless/rtlwifi/rtl8192ce/sw.c        |    5 +-
 drivers/net/wireless/rtlwifi/rtl8192ce/trx.c       |    8 +-
 drivers/net/wireless/rtlwifi/rtl8192cu/def.h       |    3 -
 drivers/net/wireless/rtlwifi/rtl8192cu/hw.c        |   17 +-
 drivers/net/wireless/rtlwifi/rtl8192cu/mac.c       |    3 +-
 drivers/net/wireless/rtlwifi/rtl8192cu/phy.c       |    3 +
 drivers/net/wireless/rtlwifi/rtl8192cu/sw.c        |    4 +-
 drivers/net/wireless/rtlwifi/rtl8192cu/trx.c       |    1 +
 drivers/net/wireless/rtlwifi/rtl8192de/fw.h        |   12 -
 drivers/net/wireless/rtlwifi/rtl8192de/trx.c       |    2 +-
 drivers/net/wireless/rtlwifi/rtl8192ee/Makefile    |   19 +
 drivers/net/wireless/rtlwifi/rtl8192ee/def.h       |  101 +
 drivers/net/wireless/rtlwifi/rtl8192ee/dm.c        | 1263 +++++
 drivers/net/wireless/rtlwifi/rtl8192ee/dm.h        |  267 ++
 drivers/net/wireless/rtlwifi/rtl8192ee/fw.c        |  906 ++++
 drivers/net/wireless/rtlwifi/rtl8192ee/fw.h        |  208 +
 drivers/net/wireless/rtlwifi/rtl8192ee/hw.c        | 2569 +++++++++++
 drivers/net/wireless/rtlwifi/rtl8192ee/hw.h        |   62 +
 drivers/net/wireless/rtlwifi/rtl8192ee/led.c       |  145 +
 drivers/net/wireless/rtlwifi/rtl8192ee/led.h       |   34 +
 drivers/net/wireless/rtlwifi/rtl8192ee/phy.c       | 3219 +++++++++++++
 drivers/net/wireless/rtlwifi/rtl8192ee/phy.h       |  153 +
 drivers/net/wireless/rtlwifi/rtl8192ee/pwrseq.c    |  112 +
 drivers/net/wireless/rtlwifi/rtl8192ee/pwrseq.h    |  340 ++
 drivers/net/wireless/rtlwifi/rtl8192ee/reg.h       | 2231 +++++++++
 drivers/net/wireless/rtlwifi/rtl8192ee/rf.c        |  152 +
 drivers/net/wireless/rtlwifi/rtl8192ee/rf.h        |   36 +
 drivers/net/wireless/rtlwifi/rtl8192ee/sw.c        |  399 ++
 drivers/net/wireless/rtlwifi/rtl8192ee/sw.h        |   33 +
 drivers/net/wireless/rtlwifi/rtl8192ee/table.c     |  882 ++++
 drivers/net/wireless/rtlwifi/rtl8192ee/table.h     |   45 +
 drivers/net/wireless/rtlwifi/rtl8192ee/trx.c       | 1293 ++++++
 drivers/net/wireless/rtlwifi/rtl8192ee/trx.h       |  860 ++++
 drivers/net/wireless/rtlwifi/rtl8192se/fw.h        |    1 -
 drivers/net/wireless/rtlwifi/rtl8192se/trx.c       |    4 -
 drivers/net/wireless/rtlwifi/rtl8723ae/btc.h       |    7 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/def.h       |  197 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/dm.c        |  422 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/dm.h        |   50 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/fw.c        |  255 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/fw.h        |   54 +-
 .../wireless/rtlwifi/rtl8723ae/hal_bt_coexist.c    |  414 +-
 .../wireless/rtlwifi/rtl8723ae/hal_bt_coexist.h    |   38 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.c   | 1232 +++--
 drivers/net/wireless/rtlwifi/rtl8723ae/hal_btc.h   |   66 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/hw.c        | 1513 +++---
 drivers/net/wireless/rtlwifi/rtl8723ae/hw.h        |   66 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/led.c       |   54 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/led.h       |   13 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/phy.c       |  884 ++--
 drivers/net/wireless/rtlwifi/rtl8723ae/phy.h       |   67 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.c    |   93 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseq.h    |  543 +--
 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.c |  129 -
 drivers/net/wireless/rtlwifi/rtl8723ae/reg.h       | 2718 +++++------
 drivers/net/wireless/rtlwifi/rtl8723ae/rf.c        |  261 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/rf.h        |   18 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/sw.c        |  222 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/sw.h        |   12 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/table.c     |    8 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/table.h     |    8 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/trx.c       |  460 +-
 drivers/net/wireless/rtlwifi/rtl8723ae/trx.h       |  325 +-
 drivers/net/wireless/rtlwifi/rtl8723be/def.h       |  178 +-
 drivers/net/wireless/rtlwifi/rtl8723be/dm.c        |  243 +-
 drivers/net/wireless/rtlwifi/rtl8723be/dm.h        |   30 +-
 drivers/net/wireless/rtlwifi/rtl8723be/fw.c        |  194 +-
 drivers/net/wireless/rtlwifi/rtl8723be/fw.h        |  200 +-
 drivers/net/wireless/rtlwifi/rtl8723be/hw.c        | 1320 +++---
 drivers/net/wireless/rtlwifi/rtl8723be/hw.h        |    1 +
 drivers/net/wireless/rtlwifi/rtl8723be/led.c       |    6 +-
 drivers/net/wireless/rtlwifi/rtl8723be/phy.c       | 1783 ++++---
 drivers/net/wireless/rtlwifi/rtl8723be/phy.h       |  110 +-
 drivers/net/wireless/rtlwifi/rtl8723be/pwrseq.c    |    2 +-
 drivers/net/wireless/rtlwifi/rtl8723be/pwrseq.h    |  131 +-
 drivers/net/wireless/rtlwifi/rtl8723be/pwrseqcmd.c |  139 -
 drivers/net/wireless/rtlwifi/rtl8723be/pwrseqcmd.h |   95 -
 drivers/net/wireless/rtlwifi/rtl8723be/reg.h       | 1135 ++---
 drivers/net/wireless/rtlwifi/rtl8723be/rf.c        |  144 +-
 drivers/net/wireless/rtlwifi/rtl8723be/sw.c        |   42 +-
 drivers/net/wireless/rtlwifi/rtl8723be/table.c     | 1053 ++---
 drivers/net/wireless/rtlwifi/rtl8723be/table.h     |    2 +-
 drivers/net/wireless/rtlwifi/rtl8723be/trx.c       |  314 +-
 drivers/net/wireless/rtlwifi/rtl8723be/trx.h       |   34 +-
 .../net/wireless/rtlwifi/rtl8723com/dm_common.c    |   14 +-
 .../net/wireless/rtlwifi/rtl8723com/fw_common.c    |   90 +-
 .../net/wireless/rtlwifi/rtl8723com/fw_common.h    |   59 +-
 .../net/wireless/rtlwifi/rtl8723com/phy_common.c   |   57 +-
 drivers/net/wireless/rtlwifi/rtl8821ae/Makefile    |   19 +
 drivers/net/wireless/rtlwifi/rtl8821ae/def.h       |  450 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/dm.c        | 3019 ++++++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/dm.h        |  356 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/fw.c        | 1857 ++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/fw.h        |  351 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/hw.c        | 4218 +++++++++++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/hw.h        |   70 +
 drivers/net/wireless/rtlwifi/rtl8821ae/led.c       |  237 +
 drivers/net/wireless/rtlwifi/rtl8821ae/led.h       |   37 +
 drivers/net/wireless/rtlwifi/rtl8821ae/phy.c       | 4855 ++++++++++++++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/phy.h       |  259 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/pwrseq.c    |  182 +
 drivers/net/wireless/rtlwifi/rtl8821ae/pwrseq.h    |  738 +++
 drivers/net/wireless/rtlwifi/rtl8821ae/reg.h       | 2464 ++++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/rf.c        |  465 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/rf.h        |   43 +
 drivers/net/wireless/rtlwifi/rtl8821ae/sw.c        |  484 ++
 drivers/net/wireless/rtlwifi/rtl8821ae/sw.h        |   34 +
 drivers/net/wireless/rtlwifi/rtl8821ae/table.c     | 4572 ++++++++++++++++++
 drivers/net/wireless/rtlwifi/rtl8821ae/table.h     |   60 +
 drivers/net/wireless/rtlwifi/rtl8821ae/trx.c       | 1236 +++++
 drivers/net/wireless/rtlwifi/rtl8821ae/trx.h       |  620 +++
 drivers/net/wireless/rtlwifi/stats.c               |   50 +-
 drivers/net/wireless/rtlwifi/stats.h               |    7 +-
 drivers/net/wireless/rtlwifi/usb.c                 |    4 +-
 drivers/net/wireless/rtlwifi/wifi.h                |  238 +-
 drivers/nfc/st21nfca/i2c.c                         |   34 +-
 drivers/nfc/st21nfca/st21nfca.c                    |   59 +-
 drivers/nfc/st21nfca/st21nfca.h                    |   21 -
 drivers/nfc/st21nfca/st21nfca_dep.c                |   59 +-
 drivers/nfc/st21nfcb/i2c.c                         |   67 +-
 drivers/nfc/st21nfcb/ndlc.c                        |    6 +-
 drivers/nfc/st21nfcb/ndlc.h                        |    4 +
 drivers/nfc/st21nfcb/st21nfcb.c                    |   27 +-
 drivers/nfc/st21nfcb/st21nfcb.h                    |    2 -
 drivers/nfc/trf7970a.c                             | 1059 ++++-
 include/linux/bcma/bcma.h                          |    2 +
 include/net/bluetooth/bluetooth.h                  |    5 +-
 include/net/bluetooth/hci.h                        |    1 +
 include/net/bluetooth/hci_core.h                   |    1 -
 include/net/nfc/nci.h                              |   16 +-
 include/net/nfc/nci_core.h                         |    9 +-
 include/uapi/linux/wil6210_uapi.h                  |   87 +
 net/bluetooth/6lowpan.c                            |  145 +-
 net/bluetooth/af_bluetooth.c                       |    3 +
 net/bluetooth/hci_conn.c                           |   43 +-
 net/bluetooth/hci_core.c                           |   21 +-
 net/bluetooth/l2cap_core.c                         |   13 +-
 net/bluetooth/lib.c                                |   14 +-
 net/bluetooth/smp.c                                |    5 +-
 net/ieee802154/6lowpan_rtnl.c                      |  125 +-
 net/nfc/digital_dep.c                              |  101 +
 net/nfc/nci/core.c                                 |   21 +-
 net/nfc/nci/data.c                                 |    7 +-
 net/nfc/nci/ntf.c                                  |   40 +-
 325 files changed, 63957 insertions(+), 17040 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/bus/bcma.txt
 create mode 100644 drivers/net/wireless/ath/ath10k/testmode.c
 create mode 100644 drivers/net/wireless/ath/ath10k/testmode.h
 create mode 100644 drivers/net/wireless/ath/ath10k/testmode_i.h
 delete mode 100644 drivers/net/wireless/ath/ath5k/ahb.c
 create mode 100644 drivers/net/wireless/ath/trace.c
 create mode 100644 drivers/net/wireless/ath/trace.h
 create mode 100644 drivers/net/wireless/ath/wil6210/ethtool.c
 create mode 100644 drivers/net/wireless/ath/wil6210/ioctl.c
 rename drivers/net/wireless/rtlwifi/{rtl8723ae => }/pwrseqcmd.h (92%)
 delete mode 100644 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.c
 delete mode 100644 drivers/net/wireless/rtlwifi/rtl8188ee/pwrseqcmd.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/Makefile
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/def.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/dm.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/dm.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/fw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/fw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/hw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/hw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/led.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/led.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/phy.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/phy.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/pwrseq.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/pwrseq.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/reg.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/rf.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/rf.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/sw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/sw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/table.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/table.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/trx.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8192ee/trx.h
 delete mode 100644 drivers/net/wireless/rtlwifi/rtl8723ae/pwrseqcmd.c
 delete mode 100644 drivers/net/wireless/rtlwifi/rtl8723be/pwrseqcmd.c
 delete mode 100644 drivers/net/wireless/rtlwifi/rtl8723be/pwrseqcmd.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/Makefile
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/def.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/dm.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/dm.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/fw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/fw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/hw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/led.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/led.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/phy.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/phy.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/pwrseq.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/pwrseq.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/reg.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/rf.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/rf.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/sw.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/sw.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/table.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/table.h
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/trx.c
 create mode 100644 drivers/net/wireless/rtlwifi/rtl8821ae/trx.h
 create mode 100644 include/uapi/linux/wil6210_uapi.h
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply

* Re: RFC: ixgbe+build_skb+extra performance experiments
From: Alexander Duyck @ 2014-10-03 17:49 UTC (permalink / raw)
  To: Alexei Starovoitov, Alexander Duyck
  Cc: Jesper Dangaard Brouer, David S. Miller, Jeff Kirsher,
	Ben Hutchings, Eric Dumazet, Network Development
In-Reply-To: <CAMEtUuzoWyvFgDjtVUOCvG-i0zyWU_QELbXA9shT2Y3VKoS1pQ@mail.gmail.com>

On 10/03/2014 09:54 AM, Alexei Starovoitov wrote:
> On Fri, Oct 3, 2014 at 7:40 AM, Alexander Duyck
> <alexander.duyck@gmail.com> wrote:
>> On 10/02/2014 12:36 AM, Jesper Dangaard Brouer wrote:
>>> On Wed,  1 Oct 2014 23:00:42 -0700 Alexei Starovoitov <ast@plumgrid.com> wrote:
>>>
>>>> I'm trying to speed up single core packet per second.
>>> Great, welcome to the club ;-)
>>
>> Yes, but please keep in mind that multi-core is the more common use case
>> for many systems.
> 
> well, I care about 'single core performance' and not 'single core systems'.
> My primary test machines are 4-core i7 haswell and
> 12-core xeon servers. It's much easier to benchmark, understand,
> speedup performance on a single cpu before turning on packet
> spraying and stressing the whole box.

The point is that there are single core optimization that don't actually
don't scale well when you spread them out to multiple cores due to
design issues resulting in cache-thrash and such.  I was just suggesting
you keep that in mind when making any changes.

>> To that end we may want to look to something like GRO to do the
>> buffering on the Rx side so that we could make use of GRO/GSO to send
>> blocks of buffers instead of one at a time.
> 
> Optimizing gro would be next step. When I turn gro now, it only
> slows things down and muddies perf profile.

I am aware of that.  Optimizing GRO now though might make more sense
since it would allow for a clean optimization.  The problem with using
build_skb on ixgbe is that ixgbe does page-reuse.  If you were to do a
clean setup of build_skb you would likely lose more performance as the
design of page-reuse provided significant gains on ixgbe, especially on
platforms with IOMMU enabled.

>> From my past experience this is very platform dependant.  For example
>> with DDIO or DCA features enabled on a system the memcpy is very cheap
>> since it is already in the cache.  It is one of the reasons for choosing
>> that as a means of working around the fact that we cannot use build_skb
>> and page reuse in the same driver.
> 
> my systems are already intel alphabet soup, including DCA
> and I have CONFIG_IXGBE_DCA=y
> yet, memcpy() is #1 as you can see in profile.

Yes, but that is the kernel option, not the hardware feature.  On Xeon
systems both IOAT and DDIO are available and function.  On i7 those
features are not enabled as I recall.

>> One thought I had at one point was to try and add a flag to the DMA api
>> to indicate if the DMA api is trivial resulting in just a call to
>> virt_to_phys.  It might be worthwhile to look into something like that,
>> then we could split the receive processing into one of two paths, one
>> for non-trivial DMA mapping APIs, and one for trivial DMA mapping APIs
>> such as swiotlb on a device that supports all the memory in the system.
> 
> I have similar hack to optimize swiotlb case, but it's not helpful
> right now. The first step is to use build_skb()

If you really want to use build_skb() you should remove most of the page
reuse code and simply map a page and use sub-sections of it.  The ixgbe
receive path didn't work with build_skb() because of the page reuse, and
before you can push anything that would make use of build_skb() you
would first need to remove all of that code.

>> The problem is build_skb usage comes at a certain cost.  Specifically in
>> the case of small packets it can result in a larger memory footprint
>> since you cannot just reuse the same region in the buffer.  I suspect we
>> may need to look into some sort of compromise between build_skb and a
>> copybreak scheme for best cache performance on Xeon for example.
> 
> we're talking 10Gbps ixgbe use case here.
> For e1000 on small system with precious memory the copybreak
> approach might makes sense, but large server in datacenter
> I would rather configure for build_skb() only.
> In your patch you made a cutoff based on 1500 mtu.
> I would prefer 1550 or 1600 cutoff, so that encapsulated
> packets can get into hypervisor as quickly as possible and
> forwarded to appropriate VMs or containers.

I am talking about cache foot rather than memory.  At 1500 byte packets
the expense for doing a 1 or 2 cache line copy to get the header is
pretty low.  Also if you are talking about virtualization I assume you
must not be talking about co-existing with direct assignment or running
on PowerPC since most drivers that use build_skb will not perform as
well as the page reuse when an IOMMU is enabled on the host.

Also the upper limit would largely be controlled based on the size of
the skb_shared_info.  The actual value for maximum supported buffer
would probably be the shared info size plus the size for any padding
needed at the start of the frame subtracted from 2K.

>> For the burst size logic you might want to explore handling the
>> descriptors in 4 descriptor aligned chunks that should give you the best
>> possible performance since that would mean processing the descriptor
>> ring one cache-line at a time.
> 
> makes sense. I was thinking to pipeline it more in the future.
> Including splitting build_skb() into phases of allocation and initialization,
> so that prefetch from previous stage will have time to populate caches.
> 
> I was hoping my performance measurements were convincing
> enough for you to dust off ixgbe+build_skb patch, fix page reuse
> somehow and submit it for everyone to cheer :)

The problem is market segment focus.  Your are running ixgbe on
enthusiast grade hardware.  When you get it up onto the big Xeon or even
PowerPC systems the performance layout is quite different due to the
introduction of other features, and the focus is on these units as this
is what you find in most big data centers.

The i7 focused approach can be very narrow.  When I rewrote most of the
receive path for ixgbe I had to take into account multiple use cases
included multiple architectures and system setups including multiple
NUMA nodes, IOMMU, PowerPC, Atom, Xeon, and other factors.  The current
driver is a compromise in order to get the best performance across all
platforms without sacrificing too much on any one of them.

If anything I think you might need to start first with looking at the
DMA APIs out there and seeing if there is a way to sort out trivial and
non-trivial DMA APIs.  So for the cases that are using a simple
virt_to_phys such as x86 we might be able to get away with just using
build_skb and could probably set a flag indicating as such so that we
ran that path.  For the other DMA APIs out there however we would
probably need to just use standard page reuse in order to avoid
overwriting the page data on a shared page.

Thanks,

Alex

^ permalink raw reply

* [PATCH 8/9] ipvs: Clean up comment style in ip_vs.h
From: Pablo Neira Ayuso @ 2014-10-03 17:20 UTC (permalink / raw)
  To: netfilter-devel; +Cc: davem, netdev
In-Reply-To: <1412356824-6362-1-git-send-email-pablo@netfilter.org>

From: Simon Horman <horms@verge.net.au>

* Consistently use the multi-line comment style for networking code:

  /* This
   * That
   * The other thing
   */

* Use single-line comment style for comments with only one line of text.

* In general follow the leading '*' of each line of a comment with a
  single space and then text.

* Add missing line break between functions, remove double line break,
  align comments to previous lines whenever possible.

Reported-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 include/net/ip_vs.h |  214 ++++++++++++++++++---------------------------------
 1 file changed, 75 insertions(+), 139 deletions(-)

diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index 576d7f0..615b20b 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -1,6 +1,5 @@
-/*
- *      IP Virtual Server
- *      data structure and functionality definitions
+/* IP Virtual Server
+ * data structure and functionality definitions
  */
 
 #ifndef _NET_IP_VS_H
@@ -12,7 +11,7 @@
 
 #include <linux/list.h>                 /* for struct list_head */
 #include <linux/spinlock.h>             /* for struct rwlock_t */
-#include <linux/atomic.h>                 /* for struct atomic_t */
+#include <linux/atomic.h>               /* for struct atomic_t */
 #include <linux/compiler.h>
 #include <linux/timer.h>
 #include <linux/bug.h>
@@ -30,15 +29,13 @@
 #endif
 #include <net/net_namespace.h>		/* Netw namespace */
 
-/*
- * Generic access of ipvs struct
- */
+/* Generic access of ipvs struct */
 static inline struct netns_ipvs *net_ipvs(struct net* net)
 {
 	return net->ipvs;
 }
-/*
- * Get net ptr from skb in traffic cases
+
+/* Get net ptr from skb in traffic cases
  * use skb_sknet when call is from userland (ioctl or netlink)
  */
 static inline struct net *skb_net(const struct sk_buff *skb)
@@ -90,8 +87,8 @@ static inline struct net *skb_sknet(const struct sk_buff *skb)
 	return &init_net;
 #endif
 }
-/*
- * This one needed for single_open_net since net is stored directly in
+
+/* This one needed for single_open_net since net is stored directly in
  * private not as a struct i.e. seq_file_net can't be used.
  */
 static inline struct net *seq_file_single_net(struct seq_file *seq)
@@ -108,7 +105,7 @@ extern int ip_vs_conn_tab_size;
 
 struct ip_vs_iphdr {
 	__u32 len;	/* IPv4 simply where L4 starts
-			   IPv6 where L4 Transport Header starts */
+			 * IPv6 where L4 Transport Header starts */
 	__u16 fragoffs; /* IPv6 fragment offset, 0 if first frag (or not frag)*/
 	__s16 protocol;
 	__s32 flags;
@@ -304,16 +301,11 @@ static inline const char *ip_vs_dbg_addr(int af, char *buf, size_t buf_len,
 #define LeaveFunction(level)   do {} while (0)
 #endif
 
-
-/*
- *      The port number of FTP service (in network order).
- */
+/* The port number of FTP service (in network order). */
 #define FTPPORT  cpu_to_be16(21)
 #define FTPDATA  cpu_to_be16(20)
 
-/*
- *      TCP State Values
- */
+/* TCP State Values */
 enum {
 	IP_VS_TCP_S_NONE = 0,
 	IP_VS_TCP_S_ESTABLISHED,
@@ -329,25 +321,19 @@ enum {
 	IP_VS_TCP_S_LAST
 };
 
-/*
- *	UDP State Values
- */
+/* UDP State Values */
 enum {
 	IP_VS_UDP_S_NORMAL,
 	IP_VS_UDP_S_LAST,
 };
 
-/*
- *	ICMP State Values
- */
+/* ICMP State Values */
 enum {
 	IP_VS_ICMP_S_NORMAL,
 	IP_VS_ICMP_S_LAST,
 };
 
-/*
- *	SCTP State Values
- */
+/* SCTP State Values */
 enum ip_vs_sctp_states {
 	IP_VS_SCTP_S_NONE,
 	IP_VS_SCTP_S_INIT1,
@@ -366,21 +352,18 @@ enum ip_vs_sctp_states {
 	IP_VS_SCTP_S_LAST
 };
 
-/*
- *	Delta sequence info structure
- *	Each ip_vs_conn has 2 (output AND input seq. changes).
- *      Only used in the VS/NAT.
+/* Delta sequence info structure
+ * Each ip_vs_conn has 2 (output AND input seq. changes).
+ * Only used in the VS/NAT.
  */
 struct ip_vs_seq {
 	__u32			init_seq;	/* Add delta from this seq */
 	__u32			delta;		/* Delta in sequence numbers */
 	__u32			previous_delta;	/* Delta in sequence numbers
-						   before last resized pkt */
+						 * before last resized pkt */
 };
 
-/*
- * counters per cpu
- */
+/* counters per cpu */
 struct ip_vs_counters {
 	__u32		conns;		/* connections scheduled */
 	__u32		inpkts;		/* incoming packets */
@@ -388,17 +371,13 @@ struct ip_vs_counters {
 	__u64		inbytes;	/* incoming bytes */
 	__u64		outbytes;	/* outgoing bytes */
 };
-/*
- * Stats per cpu
- */
+/* Stats per cpu */
 struct ip_vs_cpu_stats {
 	struct ip_vs_counters   ustats;
 	struct u64_stats_sync   syncp;
 };
 
-/*
- *	IPVS statistics objects
- */
+/* IPVS statistics objects */
 struct ip_vs_estimator {
 	struct list_head	list;
 
@@ -491,9 +470,7 @@ struct ip_vs_protocol {
 	void (*timeout_change)(struct ip_vs_proto_data *pd, int flags);
 };
 
-/*
- * protocol data per netns
- */
+/* protocol data per netns */
 struct ip_vs_proto_data {
 	struct ip_vs_proto_data	*next;
 	struct ip_vs_protocol	*pp;
@@ -520,9 +497,7 @@ struct ip_vs_conn_param {
 	__u8				pe_data_len;
 };
 
-/*
- *	IP_VS structure allocated for each dynamically scheduled connection
- */
+/* IP_VS structure allocated for each dynamically scheduled connection */
 struct ip_vs_conn {
 	struct hlist_node	c_list;         /* hashed list heads */
 	/* Protocol, addresses and port numbers */
@@ -561,17 +536,18 @@ struct ip_vs_conn {
 	struct ip_vs_dest       *dest;          /* real server */
 	atomic_t                in_pkts;        /* incoming packet counter */
 
-	/* packet transmitter for different forwarding methods.  If it
-	   mangles the packet, it must return NF_DROP or better NF_STOLEN,
-	   otherwise this must be changed to a sk_buff **.
-	   NF_ACCEPT can be returned when destination is local.
+	/* Packet transmitter for different forwarding methods.  If it
+	 * mangles the packet, it must return NF_DROP or better NF_STOLEN,
+	 * otherwise this must be changed to a sk_buff **.
+	 * NF_ACCEPT can be returned when destination is local.
 	 */
 	int (*packet_xmit)(struct sk_buff *skb, struct ip_vs_conn *cp,
 			   struct ip_vs_protocol *pp, struct ip_vs_iphdr *iph);
 
 	/* Note: we can group the following members into a structure,
-	   in order to save more space, and the following members are
-	   only used in VS/NAT anyway */
+	 * in order to save more space, and the following members are
+	 * only used in VS/NAT anyway
+	 */
 	struct ip_vs_app        *app;           /* bound ip_vs_app object */
 	void                    *app_data;      /* Application private data */
 	struct ip_vs_seq        in_seq;         /* incoming seq. struct */
@@ -584,9 +560,7 @@ struct ip_vs_conn {
 	struct rcu_head		rcu_head;
 };
 
-/*
- *  To save some memory in conn table when name space is disabled.
- */
+/* To save some memory in conn table when name space is disabled. */
 static inline struct net *ip_vs_conn_net(const struct ip_vs_conn *cp)
 {
 #ifdef CONFIG_NET_NS
@@ -595,6 +569,7 @@ static inline struct net *ip_vs_conn_net(const struct ip_vs_conn *cp)
 	return &init_net;
 #endif
 }
+
 static inline void ip_vs_conn_net_set(struct ip_vs_conn *cp, struct net *net)
 {
 #ifdef CONFIG_NET_NS
@@ -612,13 +587,12 @@ static inline int ip_vs_conn_net_eq(const struct ip_vs_conn *cp,
 #endif
 }
 
-/*
- *	Extended internal versions of struct ip_vs_service_user and
- *	ip_vs_dest_user for IPv6 support.
+/* Extended internal versions of struct ip_vs_service_user and ip_vs_dest_user
+ * for IPv6 support.
  *
- *	We need these to conveniently pass around service and destination
- *	options, but unfortunately, we also need to keep the old definitions to
- *	maintain userspace backwards compatibility for the setsockopt interface.
+ * We need these to conveniently pass around service and destination
+ * options, but unfortunately, we also need to keep the old definitions to
+ * maintain userspace backwards compatibility for the setsockopt interface.
  */
 struct ip_vs_service_user_kern {
 	/* virtual service addresses */
@@ -656,8 +630,8 @@ struct ip_vs_dest_user_kern {
 
 
 /*
- *	The information about the virtual service offered to the net
- *	and the forwarding entries
+ * The information about the virtual service offered to the net and the
+ * forwarding entries.
  */
 struct ip_vs_service {
 	struct hlist_node	s_list;   /* for normal service table */
@@ -697,9 +671,8 @@ struct ip_vs_dest_dst {
 	struct rcu_head		rcu_head;
 };
 
-/*
- *	The real server destination forwarding entry
- *	with ip address, port number, and so on.
+/* The real server destination forwarding entry with ip address, port number,
+ * and so on.
  */
 struct ip_vs_dest {
 	struct list_head	n_list;   /* for the dests in the service */
@@ -738,10 +711,7 @@ struct ip_vs_dest {
 	unsigned int		in_rs_table:1;	/* we are in rs_table */
 };
 
-
-/*
- *	The scheduler object
- */
+/* The scheduler object */
 struct ip_vs_scheduler {
 	struct list_head	n_list;		/* d-linked list head */
 	char			*name;		/* scheduler name */
@@ -781,9 +751,7 @@ struct ip_vs_pe {
 	int (*show_pe_data)(const struct ip_vs_conn *cp, char *buf);
 };
 
-/*
- *	The application module object (a.k.a. app incarnation)
- */
+/* The application module object (a.k.a. app incarnation) */
 struct ip_vs_app {
 	struct list_head	a_list;		/* member in app list */
 	int			type;		/* IP_VS_APP_TYPE_xxx */
@@ -799,16 +767,14 @@ struct ip_vs_app {
 	atomic_t		usecnt;		/* usage counter */
 	struct rcu_head		rcu_head;
 
-	/*
-	 * output hook: Process packet in inout direction, diff set for TCP.
+	/* output hook: Process packet in inout direction, diff set for TCP.
 	 * Return: 0=Error, 1=Payload Not Mangled/Mangled but checksum is ok,
 	 *	   2=Mangled but checksum was not updated
 	 */
 	int (*pkt_out)(struct ip_vs_app *, struct ip_vs_conn *,
 		       struct sk_buff *, int *diff);
 
-	/*
-	 * input hook: Process packet in outin direction, diff set for TCP.
+	/* input hook: Process packet in outin direction, diff set for TCP.
 	 * Return: 0=Error, 1=Payload Not Mangled/Mangled but checksum is ok,
 	 *	   2=Mangled but checksum was not updated
 	 */
@@ -867,9 +833,7 @@ struct ipvs_master_sync_state {
 struct netns_ipvs {
 	int			gen;		/* Generation */
 	int			enable;		/* enable like nf_hooks do */
-	/*
-	 *	Hash table: for real service lookups
-	 */
+	/* Hash table: for real service lookups */
 	#define IP_VS_RTAB_BITS 4
 	#define IP_VS_RTAB_SIZE (1 << IP_VS_RTAB_BITS)
 	#define IP_VS_RTAB_MASK (IP_VS_RTAB_SIZE - 1)
@@ -903,7 +867,7 @@ struct netns_ipvs {
 	struct list_head	sctp_apps[SCTP_APP_TAB_SIZE];
 #endif
 	/* ip_vs_conn */
-	atomic_t		conn_count;      /*  connection counter */
+	atomic_t		conn_count;      /* connection counter */
 
 	/* ip_vs_ctl */
 	struct ip_vs_stats		tot_stats;  /* Statistics & est. */
@@ -990,9 +954,9 @@ struct netns_ipvs {
 	char			backup_mcast_ifn[IP_VS_IFNAME_MAXLEN];
 	/* net name space ptr */
 	struct net		*net;            /* Needed by timer routines */
-	/* Number of heterogeneous destinations, needed because
-	 * heterogeneous are not supported when synchronization is
-	 * enabled */
+	/* Number of heterogeneous destinations, needed becaus heterogeneous
+	 * are not supported when synchronization is enabled.
+	 */
 	unsigned int		mixed_address_family_dests;
 };
 
@@ -1147,9 +1111,8 @@ static inline int sysctl_backup_only(struct netns_ipvs *ipvs)
 
 #endif
 
-/*
- *      IPVS core functions
- *      (from ip_vs_core.c)
+/* IPVS core functions
+ * (from ip_vs_core.c)
  */
 const char *ip_vs_proto_name(unsigned int proto);
 void ip_vs_init_hash_table(struct list_head *table, int rows);
@@ -1157,11 +1120,9 @@ void ip_vs_init_hash_table(struct list_head *table, int rows);
 
 #define IP_VS_APP_TYPE_FTP	1
 
-/*
- *     ip_vs_conn handling functions
- *     (from ip_vs_conn.c)
+/* ip_vs_conn handling functions
+ * (from ip_vs_conn.c)
  */
-
 enum {
 	IP_VS_DIR_INPUT = 0,
 	IP_VS_DIR_OUTPUT,
@@ -1292,9 +1253,7 @@ ip_vs_control_add(struct ip_vs_conn *cp, struct ip_vs_conn *ctl_cp)
 	atomic_inc(&ctl_cp->n_control);
 }
 
-/*
- * IPVS netns init & cleanup functions
- */
+/* IPVS netns init & cleanup functions */
 int ip_vs_estimator_net_init(struct net *net);
 int ip_vs_control_net_init(struct net *net);
 int ip_vs_protocol_net_init(struct net *net);
@@ -1309,9 +1268,8 @@ void ip_vs_estimator_net_cleanup(struct net *net);
 void ip_vs_sync_net_cleanup(struct net *net);
 void ip_vs_service_net_cleanup(struct net *net);
 
-/*
- *      IPVS application functions
- *      (from ip_vs_app.c)
+/* IPVS application functions
+ * (from ip_vs_app.c)
  */
 #define IP_VS_APP_MAX_PORTS  8
 struct ip_vs_app *register_ip_vs_app(struct net *net, struct ip_vs_app *app);
@@ -1331,9 +1289,7 @@ int unregister_ip_vs_pe(struct ip_vs_pe *pe);
 struct ip_vs_pe *ip_vs_pe_getbyname(const char *name);
 struct ip_vs_pe *__ip_vs_pe_getbyname(const char *pe_name);
 
-/*
- * Use a #define to avoid all of module.h just for these trivial ops
- */
+/* Use a #define to avoid all of module.h just for these trivial ops */
 #define ip_vs_pe_get(pe)			\
 	if (pe && pe->module)			\
 		__module_get(pe->module);
@@ -1342,9 +1298,7 @@ struct ip_vs_pe *__ip_vs_pe_getbyname(const char *pe_name);
 	if (pe && pe->module)			\
 		module_put(pe->module);
 
-/*
- *	IPVS protocol functions (from ip_vs_proto.c)
- */
+/* IPVS protocol functions (from ip_vs_proto.c) */
 int ip_vs_protocol_init(void);
 void ip_vs_protocol_cleanup(void);
 void ip_vs_protocol_timeout_change(struct netns_ipvs *ipvs, int flags);
@@ -1362,9 +1316,8 @@ extern struct ip_vs_protocol ip_vs_protocol_esp;
 extern struct ip_vs_protocol ip_vs_protocol_ah;
 extern struct ip_vs_protocol ip_vs_protocol_sctp;
 
-/*
- *      Registering/unregistering scheduler functions
- *      (from ip_vs_sched.c)
+/* Registering/unregistering scheduler functions
+ * (from ip_vs_sched.c)
  */
 int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler);
 int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler);
@@ -1383,10 +1336,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
 
 void ip_vs_scheduler_err(struct ip_vs_service *svc, const char *msg);
 
-
-/*
- *      IPVS control data and functions (from ip_vs_ctl.c)
- */
+/* IPVS control data and functions (from ip_vs_ctl.c) */
 extern struct ip_vs_stats ip_vs_stats;
 extern int sysctl_ip_vs_sync_ver;
 
@@ -1427,26 +1377,21 @@ static inline void ip_vs_dest_put_and_free(struct ip_vs_dest *dest)
 		kfree(dest);
 }
 
-/*
- *      IPVS sync daemon data and function prototypes
- *      (from ip_vs_sync.c)
+/* IPVS sync daemon data and function prototypes
+ * (from ip_vs_sync.c)
  */
 int start_sync_thread(struct net *net, int state, char *mcast_ifn, __u8 syncid);
 int stop_sync_thread(struct net *net, int state);
 void ip_vs_sync_conn(struct net *net, struct ip_vs_conn *cp, int pkts);
 
-/*
- *      IPVS rate estimator prototypes (from ip_vs_est.c)
- */
+/* IPVS rate estimator prototypes (from ip_vs_est.c) */
 void ip_vs_start_estimator(struct net *net, struct ip_vs_stats *stats);
 void ip_vs_stop_estimator(struct net *net, struct ip_vs_stats *stats);
 void ip_vs_zero_estimator(struct ip_vs_stats *stats);
 void ip_vs_read_estimator(struct ip_vs_stats_user *dst,
 			  struct ip_vs_stats *stats);
 
-/*
- *	Various IPVS packet transmitters (from ip_vs_xmit.c)
- */
+/* Various IPVS packet transmitters (from ip_vs_xmit.c) */
 int ip_vs_null_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
 		    struct ip_vs_protocol *pp, struct ip_vs_iphdr *iph);
 int ip_vs_bypass_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
@@ -1477,12 +1422,10 @@ int ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
 #endif
 
 #ifdef CONFIG_SYSCTL
-/*
- *	This is a simple mechanism to ignore packets when
- *	we are loaded. Just set ip_vs_drop_rate to 'n' and
- *	we start to drop 1/rate of the packets
+/* This is a simple mechanism to ignore packets when
+ * we are loaded. Just set ip_vs_drop_rate to 'n' and
+ * we start to drop 1/rate of the packets
  */
-
 static inline int ip_vs_todrop(struct netns_ipvs *ipvs)
 {
 	if (!ipvs->drop_rate)
@@ -1496,9 +1439,7 @@ static inline int ip_vs_todrop(struct netns_ipvs *ipvs)
 static inline int ip_vs_todrop(struct netns_ipvs *ipvs) { return 0; }
 #endif
 
-/*
- *      ip_vs_fwd_tag returns the forwarding tag of the connection
- */
+/* ip_vs_fwd_tag returns the forwarding tag of the connection */
 #define IP_VS_FWD_METHOD(cp)  (cp->flags & IP_VS_CONN_F_FWD_MASK)
 
 static inline char ip_vs_fwd_tag(struct ip_vs_conn *cp)
@@ -1557,9 +1498,7 @@ static inline __wsum ip_vs_check_diff2(__be16 old, __be16 new, __wsum oldsum)
 	return csum_partial(diff, sizeof(diff), oldsum);
 }
 
-/*
- * Forget current conntrack (unconfirmed) and attach notrack entry
- */
+/* Forget current conntrack (unconfirmed) and attach notrack entry */
 static inline void ip_vs_notrack(struct sk_buff *skb)
 {
 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
@@ -1576,9 +1515,8 @@ static inline void ip_vs_notrack(struct sk_buff *skb)
 }
 
 #ifdef CONFIG_IP_VS_NFCT
-/*
- *      Netfilter connection tracking
- *      (from ip_vs_nfct.c)
+/* Netfilter connection tracking
+ * (from ip_vs_nfct.c)
  */
 static inline int ip_vs_conntrack_enabled(struct netns_ipvs *ipvs)
 {
@@ -1617,14 +1555,12 @@ static inline int ip_vs_confirm_conntrack(struct sk_buff *skb)
 static inline void ip_vs_conn_drop_conntrack(struct ip_vs_conn *cp)
 {
 }
-/* CONFIG_IP_VS_NFCT */
-#endif
+#endif /* CONFIG_IP_VS_NFCT */
 
 static inline int
 ip_vs_dest_conn_overhead(struct ip_vs_dest *dest)
 {
-	/*
-	 * We think the overhead of processing active connections is 256
+	/* We think the overhead of processing active connections is 256
 	 * times higher than that of inactive connections in average. (This
 	 * 256 times might not be accurate, we will change it later) We
 	 * use the following formula to estimate the overhead now:
-- 
1.7.10.4


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox