Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH] Disable TSO for non standard qdiscs
From: Arnaldo Carvalho de Melo @ 2008-01-31 23:10 UTC (permalink / raw)
  To: Waskiewicz Jr, Peter P
  Cc: Andi Kleen, Patrick McHardy, Stephen Hemminger, netdev
In-Reply-To: <D5C1322C3E673F459512FB59E0DDC32904700F27@orsmsx414.amr.corp.intel.com>

Em Thu, Jan 31, 2008 at 11:39:55AM -0800, Waskiewicz Jr, Peter P escreveu:
> > The philosophical problem I have with this suggestion is that 
> > I expect that the large majority of users will be more happy 
> > with disabled TSO if they use non standard qdiscs and 
> > defaults that do not fit the majority use case are bad.
> > 
> > Basically you're suggesting that nearly everyone using tc 
> > should learn about another obscure command.
> 
> If someone is using tc to load and configure a qdisc, I'd really hope
> knowing or learning ethtool wouldn't be a stretch for them...  And I'm
> not arguing the majority of people will want this or not, but taking
> away the ability to use TSO at the kernel level here without allowing a
> tuneable is making that decision for them, which is wrong IMO.

Well, it could be just that when using such qdiscs TSO would be
disabled, but the user could override this by using ethtool after
loading the qdiscs.

- Arnaldo

^ permalink raw reply

* RE: [PATCH] Disable TSO for non standard qdiscs
From: Waskiewicz Jr, Peter P @ 2008-01-31 23:42 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Andi Kleen, Patrick McHardy, Stephen Hemminger, netdev
In-Reply-To: <20080131231045.GA5543@ghostprotocols.net>

> Well, it could be just that when using such qdiscs TSO would be
> disabled, but the user could override this by using ethtool after
> loading the qdiscs.

I still disagree with this.  The qdisc should not cause anything to happen to feature flags on the device. It's the scheduling layer and really shouldn't care about what features the device supports or not.  If someone has an issue with a feature hurting performance or causing odd behavior when using a qdisc, then they should disable the feature on the device using the appropriate tools provided.  If it's the qdisc causing issues, then either the qdisc needs to be fixed, or it should be documented what features are recommended to be on and off with the qdisc.  I don't agree that the scheduling layer should affect features on an underlying device.

Cheers,

-PJ Waskiewicz

^ permalink raw reply

* Re: [PATCH] e1000e: tweak irq allocation messages
From: Kok, Auke @ 2008-01-31 23:54 UTC (permalink / raw)
  To: Andy Gospodarek; +Cc: netdev, auke-jan.h.kok
In-Reply-To: <20080131230620.GC856@gospo.usersys.redhat.com>

Andy Gospodarek wrote:
> (Reposted with the version I intended -- added ',' so it compiles!)
> 
> There's too much noise on systems that don't support MSI.  Let's get rid
> of a few and make the real error message more specific.
> 
> Signed-off-by: Andy Gospodarek <andy@greyhouse.net>

thanks Andy, I'll post this to Jeff,

Auke



> ---
> 
>  netdev.c |   12 +++++-------
>  1 files changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
> index 0a2cb79..0c8cd1c 100644
> --- a/drivers/net/e1000e/netdev.c
> +++ b/drivers/net/e1000e/netdev.c
> @@ -945,11 +945,7 @@ static int e1000_request_irq(struct e1000_adapter *adapter)
>  	int irq_flags = IRQF_SHARED;
>  	int err;
>  
> -	err = pci_enable_msi(adapter->pdev);
> -	if (err) {
> -		ndev_warn(netdev,
> -		 "Unable to allocate MSI interrupt Error: %d\n", err);
> -	} else {
> +	if (!pci_enable_msi(adapter->pdev)) {
>  		adapter->flags |= FLAG_MSI_ENABLED;
>  		handler = e1000_intr_msi;
>  		irq_flags = 0;
> @@ -958,10 +954,12 @@ static int e1000_request_irq(struct e1000_adapter *adapter)
>  	err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name,
>  			  netdev);
>  	if (err) {
> +		ndev_err(netdev,
> +		       "Unable to allocate %s interrupt (return: %d)\n",
> +			adapter->flags & FLAG_MSI_ENABLED ? "MSI":"INTx",
> +			err);
>  		if (adapter->flags & FLAG_MSI_ENABLED)
>  			pci_disable_msi(adapter->pdev);
> -		ndev_err(netdev,
> -		       "Unable to allocate interrupt Error: %d\n", err);
>  	}
>  
>  	return err;
> --
> 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] ipv6: update MSS even if MTU is unchanged
From: David Miller @ 2008-02-01  0:37 UTC (permalink / raw)
  To: jim; +Cc: netdev
In-Reply-To: <20080121220248.GA25284@jim.sh>

From: Jim Paris <jim@jtan.com>
Date: Mon, 21 Jan 2008 17:02:48 -0500

> This is needed because in ndisc.c, we have:
> 
>   static void ndisc_router_discovery(struct sk_buff *skb)
>   {
>   // ...
>   	if (ndopts.nd_opts_mtu) {
>   // ...
>   			if (rt)
>   				rt->u.dst.metrics[RTAX_MTU-1] = mtu;
> 
>   			rt6_mtu_change(skb->dev, mtu);
>   // ...
>   }
> 
> Since the mtu is set directly here, rt6_mtu_change_route thinks that
> it is unchanged, and so it fails to update the MSS accordingly.  This
> patch lets rt6_mtu_change_route still update MSS if old_mtu == new_mtu.
> 
> Signed-off-by: Jim Paris <jim@jtan.com>

This seems ok, patch applied, thanks.

^ permalink raw reply

* Re: [PATCH net-2.6.25] [PKTGEN] Remove an unused definition in pktgen.c.
From: David Miller @ 2008-02-01  0:43 UTC (permalink / raw)
  To: ramirose; +Cc: netdev
In-Reply-To: <eb3ff54b0801230638j4e0ece76sf0a2592477050fee@mail.gmail.com>

From: "Rami Rosen" <ramirose@gmail.com>
Date: Wed, 23 Jan 2008 16:38:09 +0200

> Hi,
> - Remove an unused definition (LAT_BUCKETS_MAX) in net/core/pktgen.c.
> - Remove the corresponding comment.
> - The LAT_BUCKETS_MAX seems to have to do with a patch from a long
> time ago which was not applied (Ben Greear), which dealt with latency
> counters.
> 
> See, for example : http://oss.sgi.com/archives/netdev/2002-09/msg00184.html
> 
> Signed-off-by: Rami Rosen <ramirose@gmail.com>

Applied, thanks.

^ permalink raw reply

* Re: [PATCH] fib_trie: rescan if key is lost during dump
From: David Miller @ 2008-02-01  0:45 UTC (permalink / raw)
  To: shemminger; +Cc: kaber, netdev
In-Reply-To: <20080124135112.32b5c1c7@deepthought>

From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Thu, 24 Jan 2008 13:51:12 -0800

> Normally during a dump the key of the last dumped entry is used for
> continuation, but since lock is dropped it might be lost. In that case
> fallback to the old counter based N^2 behaviour.  This means the dump will end up
> skipping some routes which matches what FIB_HASH does.
> 
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

Applied, thanks.

^ permalink raw reply

* Re: [PATCH] TCP:Fix a bug in strategy_allowed_congestion_control
From: David Miller @ 2008-02-01  0:47 UTC (permalink / raw)
  To: shanwei; +Cc: shemminger, netdev, sjansen
In-Reply-To: <479D386F.5030805@cn.fujitsu.com>

From: shanwei <shanwei@cn.fujitsu.com>
Date: Mon, 28 Jan 2008 10:05:35 +0800

> Stephen Hemminger 写道:
> > On Fri, 25 Jan 2008 15:10:13 +0800
> > shanwei <shanwei@cn.fujitsu.com> wrote:
> > 
> >> hi all:
> >>
> >> In strategy_allowed_congestion_control of the 2.6.24 kernel, 
> >> when sysctl_string return 1 on success,it should call 
> >> tcp_set_allowed_congestion_control to set the allowed congestion
> >> control.But, it don't.
> >> the sysctl_string return 1 on success, otherwise return negative,
> >> never return 0.The patch fix the problem.
> >>
> >> Signed-off-by: Shan Wei <shanwei@cn.fujitsu.com>
> >>
> >> diff -Nuarp linux-2.6.24/net/ipv4/sysctl_net_ipv4.c linux-2.6.24-new/net/ipv4/sysctl_net_ipv4.c
> >> --- linux-2.6.24/net/ipv4/sysctl_net_ipv4.c	2008-01-25 06:58:37.000000000 +0800
> >> +++ linux-2.6.24-new/net/ipv4/sysctl_net_ipv4.c	2008-01-25 12:23:20.000000000 +0800
> >> @@ -248,7 +248,7 @@ static int strategy_allowed_congestion_c
> >>  
> >>  	tcp_get_available_congestion_control(tbl.data, tbl.maxlen);
> >>  	ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen);
> >> -	if (ret == 0 && newval && newlen)
> >> +	if (ret == 1 && newval && newlen)
> >>  		ret = tcp_set_allowed_congestion_control(tbl.data);
> >>  	kfree(tbl.data);
> >>
> >>
> > 
> > Acked-by: Stephen Hemminger <shemminger@vyatta.com>
> > 
> > This parallels previous fix by Sam Jansen.
> > 
> > 
> >From the link:http://marc.info/?l=linux-netdev&m=119551836927062&w=2,
> he only fix the sysctl_tcp_congestion_control function.
> In the latest kernel, the sysctl_string problem is present.
> Can this patch be applied?

Done.

^ permalink raw reply

* Re: [VLAN]: set_rx_mode support for unicast address list
From: David Miller @ 2008-02-01  0:54 UTC (permalink / raw)
  To: kaber; +Cc: netdev
In-Reply-To: <479F41BF.6050004@trash.net>


Applied.

^ permalink raw reply

* Re: [PATCH net-2.6.25] [MACVLAN] Setting macvlan_handle_frame_hook to NULL when rtnl_link_register() fails.
From: David Miller @ 2008-02-01  0:56 UTC (permalink / raw)
  To: kaber; +Cc: ramirose, netdev
In-Reply-To: <479F43E8.4010107@trash.net>

From: Patrick McHardy <kaber@trash.net>
Date: Tue, 29 Jan 2008 16:19:04 +0100

> Rami Rosen wrote:
> > Hi,
> >   In drivers/net/macvlan.c, when rtnl_link_register() fails
> > in macvlan_init_module(), there is no point to set it (second time in this
> > method) to macvlan_handle_frame; macvlan_init_module() will return a negative
> > number, so instead this patch sets macvlan_handle_frame_hook to NULL.
> 
> 
> Indeed, that seems to be a stupid cut-and-paste error. Thanks for
> catching this.
> 
> Dave, please apply.

Done.

^ permalink raw reply

* Re: [NET_SCHED]: sch_ingress: remove netfilter support
From: David Miller @ 2008-02-01  0:57 UTC (permalink / raw)
  To: kaber; +Cc: hadi, netdev
In-Reply-To: <479F460B.2060104@trash.net>

From: Patrick McHardy <kaber@trash.net>
Date: Tue, 29 Jan 2008 16:28:11 +0100

>     [NET_SCHED]: sch_ingress: remove netfilter support
>     
>     Since the old policer code is gone, TC actions are needed for policing.
>     The ingress qdisc can get packets directly from netif_receive_skb()
>     in case TC actions are enabled or through netfilter otherwise, but
>     since without TC actions there is no policer the only thing it actually
>     does is count packets.
>     
>     Remove the netfilter support and always require TC actions.
>     
>     Signed-off-by: Patrick McHardy <kaber@trash.net>

Applied.

^ permalink raw reply

* Re: [PATCH] pktgen: pktgen should not print info that it is spinning
From: David Miller @ 2008-02-01  1:00 UTC (permalink / raw)
  To: jesse.brandeburg; +Cc: netdev, auke-jan.h.kok, Robert.Olsson
In-Reply-To: <20080128211635.5907.81831.stgit@jbrandeb-ich9b.jf.intel.com>

From: Jesse Brandeburg <jesse.brandeburg@intel.com>
Date: Mon, 28 Jan 2008 13:16:35 -0800

> when using pktgen to send delay packets the module prints repeatedly to the
> kernel log:
> sleeping for X
> sleeping for X
> ...
> 
> This is probably just a debugging item left in and should not be enabled for
> regular use of the module.
> 
> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>

Applied, thanks.

^ permalink raw reply

* Re: [1/2] POHMELFS - network filesystem with local coherent cache.
From: Jan Engelhardt @ 2008-02-01  1:04 UTC (permalink / raw)
  To: Evgeniy Polyakov; +Cc: linux-kernel, netdev, linux-fsdevel
In-Reply-To: <11972872493911@2ka.mipt.ru>


On Jan 31 2008 22:17, Evgeniy Polyakov wrote:
>
>POHMELFS stands for Parallel Optimized Host Message Exchange
>Layered File System. It allows to mount remote servers to local
>directory via network. This filesystem supports local caching
>and writeback flushing.
>POHMELFS is a brick in a future distributed filesystem.

A brick is usually something that is in the way -
Or you also say "the user has bricked his machine"
when it's quite unusable :)
Hope you did not mean /that/.

>This set includes two patches:
> * network filesystem with write-through cache (slow, but works with
> 	remote userspace server)
> * hack to show how local cache works and how faster it is compared
> 	to async NFS (see below). hack disables writeback flush and
>	performs local allocation of the objects only.
>
>Now, some vaporware aka food for thoughts and your brains.
>
>A small benchmark of the local cached mode (above hack):
>
>$ time tar -xf /home/zbr/threading.tar
>
>	POHMELFS	NFS v3 (async)
>real    0m0.043s	0m1.679s
>
>Which is damn 40 times!

Needs a bigger data set to compare. But what is much more
important: does it use a single port for networing, or some
firewall-unfriendly-by-default multiple dynamic-port-allocation
like NFS?

>Next task is to think about how to generically solve the problem with
>syncing local changes with remote server, when remote server maintains inodes with
>completely different numbers.
>This, among others, will allow offline work with automatic syncing after reconnect.

What will happen when both nodes change an inode in disconnected state?
Which inode wins out?

>This is not intended for inclusion, CRFS by Zach Brown is a bit ahead of POHMELFS,
>but it is not generic enough (because of above problem), works only with BTRFS,
>and was closed by Oracle so far :)

btrfs is all we need :p


Where's the parallelism that is advertised by the "POH" in pohmelfs?

^ permalink raw reply

* Re: [IPV4] route cache: Introduce rt_genid for smooth cache invalidation
From: David Miller @ 2008-02-01  1:05 UTC (permalink / raw)
  To: dada1; +Cc: netdev, Robert.Olsson
In-Reply-To: <47A03098.7060100@cosmosbay.com>

From: Eric Dumazet <dada1@cosmosbay.com>
Date: Wed, 30 Jan 2008 09:08:56 +0100

> Current ip route cache implementation is not suited to large caches.
> 
> We can consume a lot of CPU when cache must be invalidated, since we
> currently need to evict all cache entries, and this eviction is
> sometimes asynchronous. min_delay & max_delay can somewhat control this
> asynchronism behavior, but whole thing is a kludge, regularly triggering
> infamous soft lockup messages. When entries are still in use, this also
> consumes a lot of ram, filling dst_garbage.list.
> 
> A better scheme is to use a generation identifier on each entry,
> so that cache invalidation can be performed by changing the table
> identifier, without having to scan all entries.
> No more delayed flushing, no more stalling when secret_interval expires.
> 
> Invalidated entries will then be freed at GC time (controled by
> ip_rt_gc_timeout or stress), or when an invalidated entry is found
> in a chain when an insert is done.
> Thus we keep a normal equilibrium.
> 
> This patch :
> - renames rt_hash_rnd to rt_genid (and makes it an atomic_t)
> - Adds a new rt_genid field to 'struct rtable' (filling a hole on 64bit)
> - Checks entry->rt_genid at appropriate places :
> --- Readers have to ignore invalidated entries.
> --- Writers can delete invalidated entries.
> - Removes rt_flush_timer timer
> - Removes unused /proc/sys/net/ipv4/{min_delay,max_delay}
> 
> We even reduce size of route.o
> 
> # size net/ipv4/route.o
>     text    data     bss     dec     hex filename
>    20038    1331     160   21529    5419 net/ipv4/route.o.before
>    19991    1203     104   21298    5332 net/ipv4/route.o
> 
> Next step will be to audit all rt_cache_flush(0) (aka flushes) users, see
> if they can be converted to "invalidate the cache" users.
> 
> Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>

This looks really nice, applied, thanks Eric.

^ permalink raw reply

* Re: [drivers/net/bnx2.c] ADVERTISE_1000XPSE_ASYM
From: David Miller @ 2008-02-01  1:07 UTC (permalink / raw)
  To: mchan; +Cc: 12o3l, linux-kernel, netdev
In-Reply-To: <1201719070.7190.4.camel@dell>

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 30 Jan 2008 10:51:10 -0800

> [BNX2]: Fix ASYM PAUSE advertisement for remote PHY.
> 
> We were checking for the ASYM_PAUSE bit for 1000Base-X twice instead
> checking for both the 1000Base-X bit and the 10/100/1000Base-T bit.
> The purpose of the logic is to tell the firmware that ASYM_PAUSE is
> set on either the Serdes or Copper interface.
> 
> Problem was discovered by Roel Kluin <12o3l@tiscali.nl>
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied, thanks Michael.

^ permalink raw reply

* Re: [PATCH] Disable TSO for non standard qdiscs
From: Andy Furniss @ 2008-02-01  1:04 UTC (permalink / raw)
  To: Rick Jones; +Cc: Andi Kleen, netdev, davem
In-Reply-To: <47A21E1A.6000006@hp.com>

Rick Jones wrote:

> then the qdisc could/should place a cap on the size of a 'TSO' based on 
> the bitrate (and perhaps input as to how much time any one "burst" of 
> data should be allowed to consume on the network) and pass that up the 
> stack?  right now you seem to be proposing what is effectively a cap of 
> 1 MSS.

I don't have any gig nics to test, so this is not a rhetorical question.

How does tcp congestion control behave when a tc qdisc drops a big 
unsegmented TSO skb?

Andy.

^ permalink raw reply

* Re: [PATCH][net/sched/sch_teql.c] duplicate IFF_BROADCAST in FMASK, remove 2nd
From: David Miller @ 2008-02-01  1:08 UTC (permalink / raw)
  To: 12o3l; +Cc: netdev, linux-kernel
In-Reply-To: <47A08B7C.9010205@tiscali.nl>

From: Roel Kluin <12o3l@tiscali.nl>
Date: Wed, 30 Jan 2008 15:36:44 +0100

> Untested patch below, please confirm it's the right fix (should it be some
> other IFF_*?)
> --
> duplicate IFF_BROADCAST, remove 2nd
> 
> Signed-off-by: Roel Kluin <12o3l@tiscali.nl>

Applied, thanks.

^ permalink raw reply

* Re: [2.6 patch] net/xfrm/: remove unused exports
From: David Miller @ 2008-02-01  1:10 UTC (permalink / raw)
  To: bunk; +Cc: herbert, paul.moore, netdev
In-Reply-To: <20080130200221.GR29368@does.not.exist>

From: Adrian Bunk <bunk@kernel.org>
Date: Wed, 30 Jan 2008 22:02:21 +0200

> This patch removes the following no longer used EXPORT_SYMBOL's:
> - xfrm_input.c: xfrm_parse_spi
> - xfrm_state.c: xfrm_replay_check
> - xfrm_state.c: xfrm_replay_advance
> 
> Signed-off-by: Adrian Bunk <bunk@kernel.org>

Applied.

^ permalink raw reply

* Re: [PATCH][XFRM]: Fix statistics.
From: David Miller @ 2008-02-01  1:15 UTC (permalink / raw)
  To: nakam; +Cc: herbert, netdev
In-Reply-To: <12017657921885-git-send-email-nakam@linux-ipv6.org>

From: Masahide NAKAMURA <nakam@linux-ipv6.org>
Date: Thu, 31 Jan 2008 16:49:52 +0900

> [PATCH][XFRM]: Fix statistics.
> 
> o Outbound sequence number overflow error status
>   is counted as XfrmOutStateSeqError.
> o Additionaly, it changes inbound sequence number replay
>   error name from XfrmInSeqOutOfWindow to XfrmInStateSeqError
>   to apply name scheme above.
> o Inbound IPv4 UDP encapsuling type mismatch error is wrongly
>   mapped to XfrmInStateInvalid then this patch fiex the error
>   to XfrmInStateMismatch.
> 
> Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org>

Applied, thank you.

^ permalink raw reply

* Re: [2.6 patch] rtnetlink.c: #if 0 no longer used functions
From: David Miller @ 2008-02-01  1:17 UTC (permalink / raw)
  To: kaber; +Cc: bunk, netdev
In-Reply-To: <47A0D851.9050408@trash.net>

From: Patrick McHardy <kaber@trash.net>
Date: Wed, 30 Jan 2008 21:04:33 +0100

> Adrian Bunk wrote:
> > This patch #if 0's the following no longer used functions:
> > - rtattr_parse()
> > - rtattr_strlcpy()
> > - __rtattr_parse_nested_compat()
> >   
> 
> Please remove them instead.

Agreed.

^ permalink raw reply

* Re: [PATCH retry] bluetooth : add conn add/del workqueues to avoid connection fail
From: Dave Young @ 2008-02-01  1:24 UTC (permalink / raw)
  To: Jens Axboe; +Cc: marcel, davem, linux-kernel, bluez-devel, netdev
In-Reply-To: <20080131130930.GW15220@kernel.dk>

On Thu, Jan 31, 2008 at 02:09:30PM +0100, Jens Axboe wrote:
> On Wed, Jan 30 2008, Dave Young wrote:
> > 
> > The bluetooth hci_conn sysfs add/del executed in the default workqueue.
> > If the del_conn is executed after the new add_conn with same target,
> > add_conn will failed with warning of "same kobject name".
> > 
> > Here add btaddconn & btdelconn workqueues,
> > flush the btdelconn workqueue in the add_conn function to avoid the issue.
> > 
> > Signed-off-by: Dave Young <hidave.darkstar@gmail.com> 
> > 
> > ---
> > diff -upr a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
> > --- a/net/bluetooth/hci_sysfs.c	2008-01-30 10:14:27.000000000 +0800
> > +++ b/net/bluetooth/hci_sysfs.c	2008-01-30 10:14:14.000000000 +0800
> > @@ -12,6 +12,8 @@
> >  #undef  BT_DBG
> >  #define BT_DBG(D...)
> >  #endif
> > +static struct workqueue_struct *btaddconn;
> > +static struct workqueue_struct *btdelconn;
> >  
> >  static inline char *typetostr(int type)
> >  {
> > @@ -279,6 +281,7 @@ static void add_conn(struct work_struct 
> >  	struct hci_conn *conn = container_of(work, struct hci_conn, work);
> >  	int i;
> >  
> > +	flush_workqueue(btdelconn);
> >  	if (device_add(&conn->dev) < 0) {
> >  		BT_ERR("Failed to register connection device");
> >  		return;
> > @@ -313,6 +316,7 @@ void hci_conn_add_sysfs(struct hci_conn 
> >  
> >  	INIT_WORK(&conn->work, add_conn);
> >  
> > +	queue_work(btaddconn, &conn->work);
> >  	schedule_work(&conn->work);
> >  }
> 
> So you queue &conn->work on both btaddconn and keventd_wq?

My fault. Thanks for pointing out.

new patch as following (some fixes according to marcel's style as well)

---
[PATCH] bluetooth : add conn add/del workqueues to avoid connection fail

The bluetooth hci conn sysfs add/del executed in the default workqueue.
If the conn del function is executed after the new conn add function
with same bluetooth target address, the connection add will failed
and will warn about same kobject name.

Here add btaddconn & btdelconn workqueues,
flush the btdelconn workqueue in the add_conn function to avoid the issue.

Signed-off-by: Dave Young <hidave.darkstar@gmail.com> 

---
net/bluetooth/hci_sysfs.c |   52 ++++++++++++++++++++++++++++++++++++----------
1 file changed, 41 insertions(+), 11 deletions(-)

diff -upr a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
--- a/net/bluetooth/hci_sysfs.c	2008-02-01 09:18:40.000000000 +0800
+++ b/net/bluetooth/hci_sysfs.c	2008-02-01 09:18:40.000000000 +0800
@@ -12,6 +12,8 @@
 #undef  BT_DBG
 #define BT_DBG(D...)
 #endif
+static struct workqueue_struct *btaddconn;
+static struct workqueue_struct *btdelconn;
 
 static inline char *typetostr(int type)
 {
@@ -279,6 +281,8 @@ static void add_conn(struct work_struct 
 	struct hci_conn *conn = container_of(work, struct hci_conn, work);
 	int i;
 
+	flush_workqueue(btdelconn);
+
 	if (device_add(&conn->dev) < 0) {
 		BT_ERR("Failed to register connection device");
 		return;
@@ -313,7 +317,7 @@ void hci_conn_add_sysfs(struct hci_conn 
 
 	INIT_WORK(&conn->work, add_conn);
 
-	schedule_work(&conn->work);
+	queue_work(btaddconn, &conn->work);
 }
 
 static int __match_tty(struct device *dev, void *data)
@@ -349,7 +353,7 @@ void hci_conn_del_sysfs(struct hci_conn 
 
 	INIT_WORK(&conn->work, del_conn);
 
-	schedule_work(&conn->work);
+	queue_work(btdelconn, &conn->work);
 }
 
 int hci_register_sysfs(struct hci_dev *hdev)
@@ -398,28 +402,54 @@ int __init bt_sysfs_init(void)
 {
 	int err;
 
+	btaddconn = create_singlethread_workqueue("btaddconn");
+	if (!btaddconn) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	btdelconn = create_singlethread_workqueue("btdelconn");
+	if (!btdelconn) {
+		err = -ENOMEM;
+		goto out_del;
+	}
+
 	bt_platform = platform_device_register_simple("bluetooth", -1, NULL, 0);
-	if (IS_ERR(bt_platform))
-		return PTR_ERR(bt_platform);
+	if (IS_ERR(bt_platform)) {
+		err = PTR_ERR(bt_platform);
+		goto out_platform;
+	}
 
 	err = bus_register(&bt_bus);
-	if (err < 0) {
-		platform_device_unregister(bt_platform);
-		return err;
-	}
+	if (err < 0)
+		goto out_bus;
 
 	bt_class = class_create(THIS_MODULE, "bluetooth");
 	if (IS_ERR(bt_class)) {
-		bus_unregister(&bt_bus);
-		platform_device_unregister(bt_platform);
-		return PTR_ERR(bt_class);
+		err = PTR_ERR(bt_class);
+		goto out_class;
 	}
 
 	return 0;
+
+out_class:
+	bus_unregister(&bt_bus);
+out_bus:
+	platform_device_unregister(bt_platform);
+out_platform:
+	destroy_workqueue(btdelconn);
+out_del:
+	destroy_workqueue(btaddconn);
+out:
+	return err;
 }
 
 void bt_sysfs_cleanup(void)
 {
+	destroy_workqueue(btaddconn);
+
+	destroy_workqueue(btdelconn);
+
 	class_destroy(bt_class);
 
 	bus_unregister(&bt_bus);

^ permalink raw reply

* [PATCH 0/5] ehea checkpatch fixups
From: Doug Maxey @ 2008-02-01  2:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux PowerPC List, netdev, Paul Mackerras, Jan-Bernd Themann


A small set of fixups for checkpatch.

Based on upstream pull from a few hours ago.

 drivers/net/ehea/ehea.h         |    3 +
 drivers/net/ehea/ehea_ethtool.c |    4 +-
 drivers/net/ehea/ehea_hw.h      |    8 +-
 drivers/net/ehea/ehea_main.c    |   87 +++++++++++----------
 drivers/net/ehea/ehea_phyp.c    |  158 +++++++++++++++++++-------------------
 drivers/net/ehea/ehea_phyp.h    |   22 +++---
 drivers/net/ehea/ehea_qmr.c     |   32 ++++----
 drivers/net/ehea/ehea_qmr.h     |   16 ++--
 8 files changed, 169 insertions(+), 161 deletions(-)

^ permalink raw reply

* [PATCH 1/5] ehea: fix ehea.h checkpatch complaints
From: Doug Maxey @ 2008-02-01  2:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux PowerPC List, netdev, Paul Mackerras, Jan-Bernd Themann
In-Reply-To: <1201832451-23634-1-git-send-email-dwm@austin.ibm.com>

Cc: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: Doug Maxey <dwm@austin.ibm.com>
---
 drivers/net/ehea/ehea.h    |    3 +++
 drivers/net/ehea/ehea_hw.h |    8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h
index 5f82a46..88fb53e 100644
--- a/drivers/net/ehea/ehea.h
+++ b/drivers/net/ehea/ehea.h
@@ -458,4 +458,7 @@ void ehea_set_ethtool_ops(struct net_device *netdev);
 int ehea_sense_port_attr(struct ehea_port *port);
 int ehea_set_portspeed(struct ehea_port *port, u32 port_speed);
 
+extern u64 ehea_driver_flags;
+extern struct work_struct ehea_rereg_mr_task;
+
 #endif	/* __EHEA_H__ */
diff --git a/drivers/net/ehea/ehea_hw.h b/drivers/net/ehea/ehea_hw.h
index 1af7ca4..567981b 100644
--- a/drivers/net/ehea/ehea_hw.h
+++ b/drivers/net/ehea/ehea_hw.h
@@ -29,10 +29,10 @@
 #ifndef __EHEA_HW_H__
 #define __EHEA_HW_H__
 
-#define QPX_SQA_VALUE   EHEA_BMASK_IBM(48,63)
-#define QPX_RQ1A_VALUE  EHEA_BMASK_IBM(48,63)
-#define QPX_RQ2A_VALUE  EHEA_BMASK_IBM(48,63)
-#define QPX_RQ3A_VALUE  EHEA_BMASK_IBM(48,63)
+#define QPX_SQA_VALUE   EHEA_BMASK_IBM(48, 63)
+#define QPX_RQ1A_VALUE  EHEA_BMASK_IBM(48, 63)
+#define QPX_RQ2A_VALUE  EHEA_BMASK_IBM(48, 63)
+#define QPX_RQ3A_VALUE  EHEA_BMASK_IBM(48, 63)
 
 #define QPTEMM_OFFSET(x) offsetof(struct ehea_qptemm, x)
 
-- 
1.5.3.8

^ permalink raw reply related

* [PATCH 2/5] ehea: fix ethtool checkpatch complaints
From: Doug Maxey @ 2008-02-01  2:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux PowerPC List, netdev, Paul Mackerras, Jan-Bernd Themann
In-Reply-To: <1201832451-23634-1-git-send-email-dwm@austin.ibm.com>

Cc: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: Doug Maxey <dwm@austin.ibm.com>
---
 drivers/net/ehea/ehea_ethtool.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c
index 679f40e..d768852 100644
--- a/drivers/net/ehea/ehea_ethtool.c
+++ b/drivers/net/ehea/ehea_ethtool.c
@@ -40,7 +40,7 @@ static int ehea_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 		return ret;
 
 	if (netif_carrier_ok(dev)) {
-		switch(port->port_speed) {
+		switch (port->port_speed) {
 		case EHEA_SPEED_10M: cmd->speed = SPEED_10; break;
 		case EHEA_SPEED_100M: cmd->speed = SPEED_100; break;
 		case EHEA_SPEED_1G: cmd->speed = SPEED_1000; break;
@@ -78,7 +78,7 @@ static int ehea_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 		goto doit;
 	}
 
-	switch(cmd->speed) {
+	switch (cmd->speed) {
 	case SPEED_10:
 		if (cmd->duplex == DUPLEX_FULL)
 			sp = H_SPEED_10M_F;
-- 
1.5.3.8

^ permalink raw reply related

* [PATCH 3/5] ehea: fix main checkpatch complaints
From: Doug Maxey @ 2008-02-01  2:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux PowerPC List, netdev, Paul Mackerras, Jan-Bernd Themann
In-Reply-To: <1201832451-23634-1-git-send-email-dwm@austin.ibm.com>

Cc: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: Doug Maxey <dwm@austin.ibm.com>
---
 drivers/net/ehea/ehea_main.c |   87 ++++++++++++++++++++++--------------------
 1 files changed, 46 insertions(+), 41 deletions(-)

diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index 869e160..99ea46a 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -6,9 +6,9 @@
  *  (C) Copyright IBM Corp. 2006
  *
  *  Authors:
- *       Christoph Raisch <raisch@de.ibm.com>
- *       Jan-Bernd Themann <themann@de.ibm.com>
- *       Thomas Klein <tklein@de.ibm.com>
+ *	 Christoph Raisch <raisch@de.ibm.com>
+ *	 Jan-Bernd Themann <themann@de.ibm.com>
+ *	 Thomas Klein <tklein@de.ibm.com>
  *
  *
  * This program is free software; you can redistribute it and/or modify
@@ -54,11 +54,11 @@ static int rq1_entries = EHEA_DEF_ENTRIES_RQ1;
 static int rq2_entries = EHEA_DEF_ENTRIES_RQ2;
 static int rq3_entries = EHEA_DEF_ENTRIES_RQ3;
 static int sq_entries = EHEA_DEF_ENTRIES_SQ;
-static int use_mcs = 0;
-static int use_lro = 0;
+static int use_mcs;
+static int use_lro;
 static int lro_max_aggr = EHEA_LRO_MAX_AGGR;
 static int num_tx_qps = EHEA_NUM_TX_QP;
-static int prop_carrier_state = 0;
+static int prop_carrier_state;
 
 module_param(msg_level, int, 0);
 module_param(rq1_entries, int, 0);
@@ -94,9 +94,9 @@ MODULE_PARM_DESC(lro_max_aggr, " LRO: Max packets to be aggregated. Default = "
 MODULE_PARM_DESC(use_lro, " Large Receive Offload, 1: enable, 0: disable, "
 		 "Default = 0");
 
-static int port_name_cnt = 0;
+static int port_name_cnt;
 static LIST_HEAD(adapter_list);
-u64 ehea_driver_flags = 0;
+u64 ehea_driver_flags;
 struct work_struct ehea_rereg_mr_task;
 
 struct semaphore dlpar_mem_lock;
@@ -121,12 +121,13 @@ static struct of_platform_driver ehea_driver = {
 	.remove = ehea_remove,
 };
 
-void ehea_dump(void *adr, int len, char *msg) {
+void ehea_dump(void *adr, int len, char *msg)
+{
 	int x;
 	unsigned char *deb = adr;
 	for (x = 0; x < len; x += 16) {
 		printk(DRV_NAME " %s adr=%p ofs=%04x %016lx %016lx\n", msg,
-			  deb, x, *((u64*)&deb[0]), *((u64*)&deb[8]));
+			  deb, x, *((u64 *)&deb[0]), *((u64 *)&deb[8]));
 		deb += 16;
 	}
 }
@@ -518,7 +519,8 @@ static int ehea_proc_rwqes(struct net_device *dev,
 		last_wqe_index = wqe_index;
 		rmb();
 		if (!ehea_check_cqe(cqe, &rq)) {
-			if (rq == 1) {	/* LL RQ1 */
+			if (rq == 1) {
+				/* LL RQ1 */
 				skb = get_skb_by_index_ll(skb_arr_rq1,
 							  skb_arr_rq1_len,
 							  wqe_index);
@@ -531,10 +533,11 @@ static int ehea_proc_rwqes(struct net_device *dev,
 					if (!skb)
 						break;
 				}
-				skb_copy_to_linear_data(skb, ((char*)cqe) + 64,
+				skb_copy_to_linear_data(skb, ((char *)cqe) + 64,
 						 cqe->num_bytes_transfered - 4);
 				ehea_fill_skb(dev, skb, cqe);
-			} else if (rq == 2) {  /* RQ2 */
+			} else if (rq == 2) {
+				/* RQ2 */
 				skb = get_skb_by_index(skb_arr_rq2,
 						       skb_arr_rq2_len, cqe);
 				if (unlikely(!skb)) {
@@ -544,7 +547,8 @@ static int ehea_proc_rwqes(struct net_device *dev,
 				}
 				ehea_fill_skb(dev, skb, cqe);
 				processed_rq2++;
-			} else {  /* RQ3 */
+			} else {
+				/* RQ3 */
 				skb = get_skb_by_index(skb_arr_rq3,
 						       skb_arr_rq3_len, cqe);
 				if (unlikely(!skb)) {
@@ -592,7 +596,7 @@ static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
 	unsigned long flags;
 
 	cqe = ehea_poll_cq(send_cq);
-	while(cqe && (quota > 0)) {
+	while (cqe && (quota > 0)) {
 		ehea_inc_cq(send_cq);
 
 		cqe_counter++;
@@ -643,7 +647,8 @@ static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
 
 static int ehea_poll(struct napi_struct *napi, int budget)
 {
-	struct ehea_port_res *pr = container_of(napi, struct ehea_port_res, napi);
+	struct ehea_port_res *pr = container_of(napi, struct ehea_port_res,
+						napi);
 	struct net_device *dev = pr->port->netdev;
 	struct ehea_cqe *cqe;
 	struct ehea_cqe *cqe_skb = NULL;
@@ -743,8 +748,9 @@ int ehea_sense_port_attr(struct ehea_port *port)
 	u64 hret;
 	struct hcp_ehea_port_cb0 *cb0;
 
-	cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC);   /* May be called via */
-	if (!cb0) {                             /* ehea_neq_tasklet() */
+	/* may be called via ehea_neq_tasklet() */
+	cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC);
+	if (!cb0) {
 		ehea_error("no mem for cb0");
 		ret = -ENOMEM;
 		goto out;
@@ -762,7 +768,7 @@ int ehea_sense_port_attr(struct ehea_port *port)
 	/* MAC address */
 	port->mac_addr = cb0->port_mac_addr << 16;
 
-	if (!is_valid_ether_addr((u8*)&port->mac_addr)) {
+	if (!is_valid_ether_addr((u8 *)&port->mac_addr)) {
 		ret = -EADDRNOTAVAIL;
 		goto out_free;
 	}
@@ -994,7 +1000,7 @@ static void ehea_parse_eqe(struct ehea_adapter *adapter, u64 eqe)
 
 static void ehea_neq_tasklet(unsigned long data)
 {
-	struct ehea_adapter *adapter = (struct ehea_adapter*)data;
+	struct ehea_adapter *adapter = (struct ehea_adapter *)data;
 	struct ehea_eqe *eqe;
 	u64 event_mask;
 
@@ -1204,7 +1210,7 @@ int ehea_rem_smrs(struct ehea_port_res *pr)
 
 static int ehea_init_q_skba(struct ehea_q_skb_arr *q_skba, int max_q_entries)
 {
-	int arr_size = sizeof(void*) * max_q_entries;
+	int arr_size = sizeof(void *) * max_q_entries;
 
 	q_skba->arr = vmalloc(arr_size);
 	if (!q_skba->arr)
@@ -1489,7 +1495,7 @@ static inline void write_swqe2_data(struct sk_buff *skb, struct net_device *dev,
 
 	nfrags = skb_shinfo(skb)->nr_frags;
 	sg1entry = &swqe->u.immdata_desc.sg_entry;
-	sg_list = (struct ehea_vsgentry*)&swqe->u.immdata_desc.sg_list;
+	sg_list = (struct ehea_vsgentry *)&swqe->u.immdata_desc.sg_list;
 	swqe->descriptors = 0;
 	sg1entry_contains_frag_data = 0;
 
@@ -1542,7 +1548,7 @@ static int ehea_broadcast_reg_helper(struct ehea_port *port, u32 hcallid)
 				     reg_type, port->mac_addr, 0, hcallid);
 	if (hret != H_SUCCESS) {
 		ehea_error("%sregistering bc address failed (tagged)",
-                           hcallid == H_REG_BCMC ? "" : "de");
+			   hcallid == H_REG_BCMC ? "" : "de");
 		ret = -EIO;
 		goto out_herr;
 	}
@@ -1732,7 +1738,7 @@ static void ehea_allmulti(struct net_device *dev, int enable)
 		}
 }
 
-static void ehea_add_multicast_entry(struct ehea_port* port, u8* mc_mac_addr)
+static void ehea_add_multicast_entry(struct ehea_port *port, u8 *mc_mac_addr)
 {
 	struct ehea_mc_list *ehea_mcl_entry;
 	u64 hret;
@@ -1791,11 +1797,10 @@ static void ehea_set_multicast_list(struct net_device *dev)
 			goto out;
 		}
 
-		for (i = 0, k_mcl_entry = dev->mc_list;
-		     i < dev->mc_count;
-		     i++, k_mcl_entry = k_mcl_entry->next) {
+		for (i = 0, k_mcl_entry = dev->mc_list; i < dev->mc_count; i++,
+			     k_mcl_entry = k_mcl_entry->next)
 			ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr);
-		}
+
 	}
 out:
 	return;
@@ -1925,12 +1930,12 @@ static inline int ehea_hash_skb(struct sk_buff *skb, int num_qps)
 
 	if ((skb->protocol == htons(ETH_P_IP)) &&
 	    (ip_hdr(skb)->protocol == IPPROTO_TCP)) {
-		tcp = (struct tcphdr*)(skb_network_header(skb) + (ip_hdr(skb)->ihl * 4));
+		tcp = (struct tcphdr *)(skb_network_header(skb) +
+					(ip_hdr(skb)->ihl * 4));
 		tmp = (tcp->source + (tcp->dest << 16)) % 31;
 		tmp += ip_hdr(skb)->daddr % 31;
 		return tmp % num_qps;
-	}
-	else
+	} else
 		return 0;
 }
 
@@ -2122,7 +2127,7 @@ int ehea_activate_qp(struct ehea_adapter *adapter, struct ehea_qp *qp)
 	u64 hret;
 	u16 dummy16 = 0;
 	u64 dummy64 = 0;
-	struct hcp_modify_qp_cb0* cb0;
+	struct hcp_modify_qp_cb0 *cb0;
 
 	cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
 	if (!cb0) {
@@ -2248,7 +2253,7 @@ static int ehea_clean_all_portres(struct ehea_port *port)
 	int ret = 0;
 	int i;
 
-	for(i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++)
+	for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++)
 		ret |= ehea_clean_portres(port, &port->port_res[i]);
 
 	ret |= ehea_destroy_eq(port->qp_eq);
@@ -2300,7 +2305,7 @@ static int ehea_up(struct net_device *dev)
 		goto out_clean_pr;
 	}
 
-	for(i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
+	for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
 		ret = ehea_activate_qp(port->adapter, port->port_res[i].qp);
 		if (ret) {
 			ehea_error("activate_qp failed");
@@ -2308,7 +2313,7 @@ static int ehea_up(struct net_device *dev)
 		}
 	}
 
-	for(i = 0; i < port->num_def_qps; i++) {
+	for (i = 0; i < port->num_def_qps; i++) {
 		ret = ehea_fill_port_res(&port->port_res[i]);
 		if (ret) {
 			ehea_error("out_free_irqs");
@@ -2425,7 +2430,7 @@ int ehea_stop_qps(struct net_device *dev)
 {
 	struct ehea_port *port = netdev_priv(dev);
 	struct ehea_adapter *adapter = port->adapter;
-	struct hcp_modify_qp_cb0* cb0;
+	struct hcp_modify_qp_cb0 *cb0;
 	int ret = -EIO;
 	int dret;
 	int i;
@@ -2490,7 +2495,7 @@ out:
 	return ret;
 }
 
-void ehea_update_rqs(struct ehea_qp *orig_qp, struct ehea_port_res * pr)
+void ehea_update_rqs(struct ehea_qp *orig_qp, struct ehea_port_res *pr)
 {
 	struct ehea_qp qp = *orig_qp;
 	struct ehea_qp_init_attr *init_attr = &qp.init_attr;
@@ -2530,7 +2535,7 @@ int ehea_restart_qps(struct net_device *dev)
 	int ret = 0;
 	int i;
 
-	struct hcp_modify_qp_cb0* cb0;
+	struct hcp_modify_qp_cb0 *cb0;
 	u64 hret;
 	u64 dummy64 = 0;
 	u16 dummy16 = 0;
@@ -3109,7 +3114,7 @@ static ssize_t ehea_probe_port(struct device *dev,
 	of_node_put(eth_dn);
 
 	if (port) {
-		for (i=0; i < EHEA_MAX_PORTS; i++)
+		for (i = 0; i < EHEA_MAX_PORTS; i++)
 			if (!adapter->port[i]) {
 				adapter->port[i] = port;
 				break;
@@ -3144,7 +3149,7 @@ static ssize_t ehea_remove_port(struct device *dev,
 
 		ehea_shutdown_single_port(port);
 
-		for (i=0; i < EHEA_MAX_PORTS; i++)
+		for (i = 0; i < EHEA_MAX_PORTS; i++)
 			if (adapter->port[i] == port) {
 				adapter->port[i] = NULL;
 				break;
@@ -3313,7 +3318,7 @@ static int ehea_reboot_notifier(struct notifier_block *nb,
 }
 
 static struct notifier_block ehea_reboot_nb = {
-        .notifier_call = ehea_reboot_notifier,
+	.notifier_call = ehea_reboot_notifier,
 };
 
 static int check_module_parm(void)
-- 
1.5.3.8

^ permalink raw reply related

* [PATCH 4/5] ehea: fix phyp checkpatch complaints
From: Doug Maxey @ 2008-02-01  2:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux PowerPC List, netdev, Paul Mackerras, Jan-Bernd Themann
In-Reply-To: <1201832451-23634-1-git-send-email-dwm@austin.ibm.com>

Cc: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: Doug Maxey <dwm@austin.ibm.com>
---
 drivers/net/ehea/ehea_phyp.c |  158 +++++++++++++++++++++---------------------
 drivers/net/ehea/ehea_phyp.h |   22 +++---
 2 files changed, 90 insertions(+), 90 deletions(-)

diff --git a/drivers/net/ehea/ehea_phyp.c b/drivers/net/ehea/ehea_phyp.c
index 95c4a7f..156eb63 100644
--- a/drivers/net/ehea/ehea_phyp.c
+++ b/drivers/net/ehea/ehea_phyp.c
@@ -6,9 +6,9 @@
  *  (C) Copyright IBM Corp. 2006
  *
  *  Authors:
- *       Christoph Raisch <raisch@de.ibm.com>
- *       Jan-Bernd Themann <themann@de.ibm.com>
- *       Thomas Klein <tklein@de.ibm.com>
+ *	 Christoph Raisch <raisch@de.ibm.com>
+ *	 Jan-Bernd Themann <themann@de.ibm.com>
+ *	 Thomas Klein <tklein@de.ibm.com>
  *
  *
  * This program is free software; you can redistribute it and/or modify
@@ -38,11 +38,11 @@ static inline u16 get_order_of_qentries(u16 queue_entries)
 }
 
 /* Defines for H_CALL H_ALLOC_RESOURCE */
-#define H_ALL_RES_TYPE_QP        1
-#define H_ALL_RES_TYPE_CQ        2
-#define H_ALL_RES_TYPE_EQ        3
-#define H_ALL_RES_TYPE_MR        5
-#define H_ALL_RES_TYPE_MW        6
+#define H_ALL_RES_TYPE_QP	 1
+#define H_ALL_RES_TYPE_CQ	 2
+#define H_ALL_RES_TYPE_EQ	 3
+#define H_ALL_RES_TYPE_MR	 5
+#define H_ALL_RES_TYPE_MW	 6
 
 static long ehea_plpar_hcall_norets(unsigned long opcode,
 				    unsigned long arg1,
@@ -137,77 +137,77 @@ u64 ehea_h_query_ehea_qp(const u64 adapter_handle, const u8 qp_category,
 			 const u64 qp_handle, const u64 sel_mask, void *cb_addr)
 {
 	return ehea_plpar_hcall_norets(H_QUERY_HEA_QP,
-				       adapter_handle,	        /* R4 */
-				       qp_category,	        /* R5 */
-				       qp_handle,               /* R6 */
-				       sel_mask,                /* R7 */
+				       adapter_handle,		/* R4 */
+				       qp_category,		/* R5 */
+				       qp_handle,		/* R6 */
+				       sel_mask,		/* R7 */
 				       virt_to_abs(cb_addr),	/* R8 */
 				       0, 0);
 }
 
 /* input param R5 */
-#define H_ALL_RES_QP_EQPO         EHEA_BMASK_IBM(9, 11)
-#define H_ALL_RES_QP_QPP          EHEA_BMASK_IBM(12, 12)
-#define H_ALL_RES_QP_RQR          EHEA_BMASK_IBM(13, 15)
-#define H_ALL_RES_QP_EQEG         EHEA_BMASK_IBM(16, 16)
-#define H_ALL_RES_QP_LL_QP        EHEA_BMASK_IBM(17, 17)
-#define H_ALL_RES_QP_DMA128       EHEA_BMASK_IBM(19, 19)
-#define H_ALL_RES_QP_HSM          EHEA_BMASK_IBM(20, 21)
-#define H_ALL_RES_QP_SIGT         EHEA_BMASK_IBM(22, 23)
-#define H_ALL_RES_QP_TENURE       EHEA_BMASK_IBM(48, 55)
-#define H_ALL_RES_QP_RES_TYP      EHEA_BMASK_IBM(56, 63)
+#define H_ALL_RES_QP_EQPO	  EHEA_BMASK_IBM(9, 11)
+#define H_ALL_RES_QP_QPP	  EHEA_BMASK_IBM(12, 12)
+#define H_ALL_RES_QP_RQR	  EHEA_BMASK_IBM(13, 15)
+#define H_ALL_RES_QP_EQEG	  EHEA_BMASK_IBM(16, 16)
+#define H_ALL_RES_QP_LL_QP	  EHEA_BMASK_IBM(17, 17)
+#define H_ALL_RES_QP_DMA128	  EHEA_BMASK_IBM(19, 19)
+#define H_ALL_RES_QP_HSM	  EHEA_BMASK_IBM(20, 21)
+#define H_ALL_RES_QP_SIGT	  EHEA_BMASK_IBM(22, 23)
+#define H_ALL_RES_QP_TENURE	  EHEA_BMASK_IBM(48, 55)
+#define H_ALL_RES_QP_RES_TYP	  EHEA_BMASK_IBM(56, 63)
 
 /* input param R9  */
-#define H_ALL_RES_QP_TOKEN        EHEA_BMASK_IBM(0, 31)
-#define H_ALL_RES_QP_PD           EHEA_BMASK_IBM(32,63)
+#define H_ALL_RES_QP_TOKEN	  EHEA_BMASK_IBM(0, 31)
+#define H_ALL_RES_QP_PD		  EHEA_BMASK_IBM(32, 63)
 
 /* input param R10 */
-#define H_ALL_RES_QP_MAX_SWQE     EHEA_BMASK_IBM(4, 7)
-#define H_ALL_RES_QP_MAX_R1WQE    EHEA_BMASK_IBM(12, 15)
-#define H_ALL_RES_QP_MAX_R2WQE    EHEA_BMASK_IBM(20, 23)
-#define H_ALL_RES_QP_MAX_R3WQE    EHEA_BMASK_IBM(28, 31)
+#define H_ALL_RES_QP_MAX_SWQE	  EHEA_BMASK_IBM(4, 7)
+#define H_ALL_RES_QP_MAX_R1WQE	  EHEA_BMASK_IBM(12, 15)
+#define H_ALL_RES_QP_MAX_R2WQE	  EHEA_BMASK_IBM(20, 23)
+#define H_ALL_RES_QP_MAX_R3WQE	  EHEA_BMASK_IBM(28, 31)
 /* Max Send Scatter Gather Elements */
-#define H_ALL_RES_QP_MAX_SSGE     EHEA_BMASK_IBM(37, 39)
-#define H_ALL_RES_QP_MAX_R1SGE    EHEA_BMASK_IBM(45, 47)
+#define H_ALL_RES_QP_MAX_SSGE	  EHEA_BMASK_IBM(37, 39)
+#define H_ALL_RES_QP_MAX_R1SGE	  EHEA_BMASK_IBM(45, 47)
 /* Max Receive SG Elements RQ1 */
-#define H_ALL_RES_QP_MAX_R2SGE    EHEA_BMASK_IBM(53, 55)
-#define H_ALL_RES_QP_MAX_R3SGE    EHEA_BMASK_IBM(61, 63)
+#define H_ALL_RES_QP_MAX_R2SGE	  EHEA_BMASK_IBM(53, 55)
+#define H_ALL_RES_QP_MAX_R3SGE	  EHEA_BMASK_IBM(61, 63)
 
 /* input param R11 */
-#define H_ALL_RES_QP_SWQE_IDL     EHEA_BMASK_IBM(0, 7)
+#define H_ALL_RES_QP_SWQE_IDL	  EHEA_BMASK_IBM(0, 7)
 /* max swqe immediate data length */
-#define H_ALL_RES_QP_PORT_NUM     EHEA_BMASK_IBM(48, 63)
+#define H_ALL_RES_QP_PORT_NUM	  EHEA_BMASK_IBM(48, 63)
 
 /* input param R12 */
-#define H_ALL_RES_QP_TH_RQ2       EHEA_BMASK_IBM(0, 15)
+#define H_ALL_RES_QP_TH_RQ2	  EHEA_BMASK_IBM(0, 15)
 /* Threshold RQ2 */
-#define H_ALL_RES_QP_TH_RQ3       EHEA_BMASK_IBM(16, 31)
+#define H_ALL_RES_QP_TH_RQ3	  EHEA_BMASK_IBM(16, 31)
 /* Threshold RQ3 */
 
 /* output param R6 */
-#define H_ALL_RES_QP_ACT_SWQE     EHEA_BMASK_IBM(0, 15)
-#define H_ALL_RES_QP_ACT_R1WQE    EHEA_BMASK_IBM(16, 31)
-#define H_ALL_RES_QP_ACT_R2WQE    EHEA_BMASK_IBM(32, 47)
-#define H_ALL_RES_QP_ACT_R3WQE    EHEA_BMASK_IBM(48, 63)
+#define H_ALL_RES_QP_ACT_SWQE	  EHEA_BMASK_IBM(0, 15)
+#define H_ALL_RES_QP_ACT_R1WQE	  EHEA_BMASK_IBM(16, 31)
+#define H_ALL_RES_QP_ACT_R2WQE	  EHEA_BMASK_IBM(32, 47)
+#define H_ALL_RES_QP_ACT_R3WQE	  EHEA_BMASK_IBM(48, 63)
 
 /* output param, R7 */
-#define H_ALL_RES_QP_ACT_SSGE     EHEA_BMASK_IBM(0, 7)
-#define H_ALL_RES_QP_ACT_R1SGE    EHEA_BMASK_IBM(8, 15)
-#define H_ALL_RES_QP_ACT_R2SGE    EHEA_BMASK_IBM(16, 23)
-#define H_ALL_RES_QP_ACT_R3SGE    EHEA_BMASK_IBM(24, 31)
+#define H_ALL_RES_QP_ACT_SSGE	  EHEA_BMASK_IBM(0, 7)
+#define H_ALL_RES_QP_ACT_R1SGE	  EHEA_BMASK_IBM(8, 15)
+#define H_ALL_RES_QP_ACT_R2SGE	  EHEA_BMASK_IBM(16, 23)
+#define H_ALL_RES_QP_ACT_R3SGE	  EHEA_BMASK_IBM(24, 31)
 #define H_ALL_RES_QP_ACT_SWQE_IDL EHEA_BMASK_IBM(32, 39)
 
 /* output param R8,R9 */
-#define H_ALL_RES_QP_SIZE_SQ      EHEA_BMASK_IBM(0, 31)
-#define H_ALL_RES_QP_SIZE_RQ1     EHEA_BMASK_IBM(32, 63)
-#define H_ALL_RES_QP_SIZE_RQ2     EHEA_BMASK_IBM(0, 31)
-#define H_ALL_RES_QP_SIZE_RQ3     EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_QP_SIZE_SQ	  EHEA_BMASK_IBM(0, 31)
+#define H_ALL_RES_QP_SIZE_RQ1	  EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_QP_SIZE_RQ2	  EHEA_BMASK_IBM(0, 31)
+#define H_ALL_RES_QP_SIZE_RQ3	  EHEA_BMASK_IBM(32, 63)
 
 /* output param R11,R12 */
-#define H_ALL_RES_QP_LIOBN_SQ     EHEA_BMASK_IBM(0, 31)
-#define H_ALL_RES_QP_LIOBN_RQ1    EHEA_BMASK_IBM(32, 63)
-#define H_ALL_RES_QP_LIOBN_RQ2    EHEA_BMASK_IBM(0, 31)
-#define H_ALL_RES_QP_LIOBN_RQ3    EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_QP_LIOBN_SQ	  EHEA_BMASK_IBM(0, 31)
+#define H_ALL_RES_QP_LIOBN_RQ1	  EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_QP_LIOBN_RQ2	  EHEA_BMASK_IBM(0, 31)
+#define H_ALL_RES_QP_LIOBN_RQ3	  EHEA_BMASK_IBM(32, 63)
 
 u64 ehea_h_alloc_resource_qp(const u64 adapter_handle,
 			     struct ehea_qp_init_attr *init_attr, const u32 pd,
@@ -334,28 +334,28 @@ u64 ehea_h_alloc_resource_cq(const u64 adapter_handle,
 }
 
 /* Defines for H_CALL H_ALLOC_RESOURCE */
-#define H_ALL_RES_TYPE_QP        1
-#define H_ALL_RES_TYPE_CQ        2
-#define H_ALL_RES_TYPE_EQ        3
-#define H_ALL_RES_TYPE_MR        5
-#define H_ALL_RES_TYPE_MW        6
+#define H_ALL_RES_TYPE_QP	 1
+#define H_ALL_RES_TYPE_CQ	 2
+#define H_ALL_RES_TYPE_EQ	 3
+#define H_ALL_RES_TYPE_MR	 5
+#define H_ALL_RES_TYPE_MW	 6
 
 /*  input param R5 */
-#define H_ALL_RES_EQ_NEQ             EHEA_BMASK_IBM(0, 0)
+#define H_ALL_RES_EQ_NEQ	     EHEA_BMASK_IBM(0, 0)
 #define H_ALL_RES_EQ_NON_NEQ_ISN     EHEA_BMASK_IBM(6, 7)
 #define H_ALL_RES_EQ_INH_EQE_GEN     EHEA_BMASK_IBM(16, 16)
-#define H_ALL_RES_EQ_RES_TYPE        EHEA_BMASK_IBM(56, 63)
+#define H_ALL_RES_EQ_RES_TYPE	     EHEA_BMASK_IBM(56, 63)
 /*  input param R6 */
-#define H_ALL_RES_EQ_MAX_EQE         EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_EQ_MAX_EQE	     EHEA_BMASK_IBM(32, 63)
 
 /*  output param R6 */
-#define H_ALL_RES_EQ_LIOBN           EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_EQ_LIOBN	     EHEA_BMASK_IBM(32, 63)
 
 /*  output param R7 */
-#define H_ALL_RES_EQ_ACT_EQE         EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_EQ_ACT_EQE	     EHEA_BMASK_IBM(32, 63)
 
 /*  output param R8 */
-#define H_ALL_RES_EQ_ACT_PS          EHEA_BMASK_IBM(32, 63)
+#define H_ALL_RES_EQ_ACT_PS	     EHEA_BMASK_IBM(32, 63)
 
 /*  output param R9 */
 #define H_ALL_RES_EQ_ACT_EQ_IST_C    EHEA_BMASK_IBM(30, 31)
@@ -453,12 +453,12 @@ u64 ehea_h_register_smr(const u64 adapter_handle, const u64 orig_mr_handle,
 
 	hret = ehea_plpar_hcall9(H_REGISTER_SMR,
 				 outs,
-				 adapter_handle       ,        	 /* R4 */
-				 orig_mr_handle,                 /* R5 */
-				 vaddr_in,                       /* R6 */
-				 (((u64)access_ctrl) << 32ULL),  /* R7 */
-				 pd,                             /* R8 */
-				 0, 0, 0, 0);	   		 /* R9-R12 */
+				 adapter_handle	      ,		 /* R4 */
+				 orig_mr_handle,		 /* R5 */
+				 vaddr_in,			 /* R6 */
+				 (((u64)access_ctrl) << 32ULL),	 /* R7 */
+				 pd,				 /* R8 */
+				 0, 0, 0, 0);			 /* R9-R12 */
 
 	mr->handle = outs[0];
 	mr->lkey = (u32)outs[2];
@@ -471,11 +471,11 @@ u64 ehea_h_disable_and_get_hea(const u64 adapter_handle, const u64 qp_handle)
 	u64 outs[PLPAR_HCALL9_BUFSIZE];
 
 	return ehea_plpar_hcall9(H_DISABLE_AND_GET_HEA,
-       				 outs,
+				 outs,
 				 adapter_handle,		/* R4 */
 				 H_DISABLE_GET_EHEA_WQE_P,	/* R5 */
 				 qp_handle,			/* R6 */
-				 0, 0, 0, 0, 0, 0);             /* R7-R12 */
+				 0, 0, 0, 0, 0, 0);		/* R7-R12 */
 }
 
 u64 ehea_h_free_resource(const u64 adapter_handle, const u64 res_handle,
@@ -483,9 +483,9 @@ u64 ehea_h_free_resource(const u64 adapter_handle, const u64 res_handle,
 {
 	return ehea_plpar_hcall_norets(H_FREE_RESOURCE,
 				       adapter_handle,	   /* R4 */
-				       res_handle,         /* R5 */
+				       res_handle,	   /* R5 */
 				       force_bit,
-				       0, 0, 0, 0);        /* R7-R10 */
+				       0, 0, 0, 0);	   /* R7-R10 */
 }
 
 u64 ehea_h_alloc_resource_mr(const u64 adapter_handle, const u64 vaddr,
@@ -493,13 +493,13 @@ u64 ehea_h_alloc_resource_mr(const u64 adapter_handle, const u64 vaddr,
 			     const u32 pd, u64 *mr_handle, u32 *lkey)
 {
 	u64 hret;
- 	u64 outs[PLPAR_HCALL9_BUFSIZE];
+	u64 outs[PLPAR_HCALL9_BUFSIZE];
 
 	hret = ehea_plpar_hcall9(H_ALLOC_HEA_RESOURCE,
 				 outs,
 				 adapter_handle,		   /* R4 */
 				 5,				   /* R5 */
-				 vaddr,			           /* R6 */
+				 vaddr,				   /* R6 */
 				 length,			   /* R7 */
 				 (((u64) access_ctrl) << 32ULL),   /* R8 */
 				 pd,				   /* R9 */
@@ -619,8 +619,8 @@ u64 ehea_h_error_data(const u64 adapter_handle, const u64 ressource_handle,
 		      void *rblock)
 {
 	return ehea_plpar_hcall_norets(H_ERROR_DATA,
-				       adapter_handle,          /* R4 */
-				       ressource_handle,        /* R5 */
-				       virt_to_abs(rblock),     /* R6 */
-				       0, 0, 0, 0);             /* R7-R12 */
+				       adapter_handle,		/* R4 */
+				       ressource_handle,	/* R5 */
+				       virt_to_abs(rblock),	/* R6 */
+				       0, 0, 0, 0);		/* R7-R12 */
 }
diff --git a/drivers/net/ehea/ehea_phyp.h b/drivers/net/ehea/ehea_phyp.h
index faa191d..f3628c8 100644
--- a/drivers/net/ehea/ehea_phyp.h
+++ b/drivers/net/ehea/ehea_phyp.h
@@ -93,7 +93,7 @@ static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel,
 static inline void hcp_epas_dtor(struct h_epas *epas)
 {
 	if (epas->kernel.addr)
-		iounmap((void __iomem*)((u64)epas->kernel.addr & PAGE_MASK));
+		iounmap((void __iomem *)((u64)epas->kernel.addr & PAGE_MASK));
 
 	epas->user.addr = 0;
 	epas->kernel.addr = 0;
@@ -388,23 +388,23 @@ u64 ehea_h_modify_ehea_qp(const u64 adapter_handle,
 			  const u64 qp_handle,
 			  const u64 sel_mask,
 			  void *cb_addr,
-			  u64 * inv_attr_id,
-			  u64 * proc_mask, u16 * out_swr, u16 * out_rwr);
+			  u64 *inv_attr_id,
+			  u64 *proc_mask, u16 *out_swr, u16 *out_rwr);
 
 u64 ehea_h_alloc_resource_eq(const u64 adapter_handle,
-			     struct ehea_eq_attr *eq_attr, u64 * eq_handle);
+			     struct ehea_eq_attr *eq_attr, u64 *eq_handle);
 
 u64 ehea_h_alloc_resource_cq(const u64 adapter_handle,
 			     struct ehea_cq_attr *cq_attr,
-			     u64 * cq_handle, struct h_epas *epas);
+			     u64 *cq_handle, struct h_epas *epas);
 
 u64 ehea_h_alloc_resource_qp(const u64 adapter_handle,
 			     struct ehea_qp_init_attr *init_attr,
 			     const u32 pd,
-			     u64 * qp_handle, struct h_epas *h_epas);
+			     u64 *qp_handle, struct h_epas *h_epas);
 
-#define H_REG_RPAGE_PAGE_SIZE          EHEA_BMASK_IBM(48,55)
-#define H_REG_RPAGE_QT                 EHEA_BMASK_IBM(62,63)
+#define H_REG_RPAGE_PAGE_SIZE          EHEA_BMASK_IBM(48, 55)
+#define H_REG_RPAGE_QT                 EHEA_BMASK_IBM(62, 63)
 
 u64 ehea_h_register_rpage(const u64 adapter_handle,
 			  const u8 pagesize,
@@ -426,7 +426,7 @@ u64 ehea_h_free_resource(const u64 adapter_handle, const u64 res_handle,
 
 u64 ehea_h_alloc_resource_mr(const u64 adapter_handle, const u64 vaddr,
 			     const u64 length, const u32 access_ctrl,
-			     const u32 pd, u64 * mr_handle, u32 * lkey);
+			     const u32 pd, u64 *mr_handle, u32 *lkey);
 
 u64 ehea_h_register_rpage_mr(const u64 adapter_handle, const u64 mr_handle,
 			     const u8 pagesize, const u8 queue_type,
@@ -439,8 +439,8 @@ u64 ehea_h_register_smr(const u64 adapter_handle, const u64 orig_mr_handle,
 u64 ehea_h_query_ehea(const u64 adapter_handle, void *cb_addr);
 
 /* output param R5 */
-#define H_MEHEAPORT_CAT		EHEA_BMASK_IBM(40,47)
-#define H_MEHEAPORT_PN		EHEA_BMASK_IBM(48,63)
+#define H_MEHEAPORT_CAT		EHEA_BMASK_IBM(40, 47)
+#define H_MEHEAPORT_PN		EHEA_BMASK_IBM(48, 63)
 
 u64 ehea_h_query_ehea_port(const u64 adapter_handle, const u16 port_num,
 			   const u8 cb_cat, const u64 select_mask,
-- 
1.5.3.8

^ 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