Netdev List
 help / color / mirror / Atom feed
* Re: Introduce FCLONE_SCRATCH skbs to reduce stack memory useage and napi jitter
From: Eric Dumazet @ 2011-10-27 22:55 UTC (permalink / raw)
  To: Neil Horman; +Cc: netdev, David S. Miller
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

Le jeudi 27 octobre 2011 à 15:53 -0400, Neil Horman a écrit :
> I had this idea awhile ago while I was looking at the receive path for multicast
> frames.   The top of the mcast recieve path (in __udp4_lib_mcast_deliver, has a
> loop in which we traverse a hash list linearly, looking for sockets that are
> listening to a given multicast group.  For each matching socket we clone the skb
> to enqueue it to the corresponding socket.  This creates two problems:
> 
> 1) Application driven jitter in the receive path
>    As you add processes that listen to the same multcast group, you increase the
> number of iterations you have to preform in this loop, which can lead to
> increases in the amount of time you spend processing each frame in softirq
> context, expecially if you are memory constrained, and the skb_clone operation
> has to call all the way back into the buddy allocator for more ram.  This can
> lead to needlessly dropped frames as rx latency increases in the stack.
> 

Hmm... time to perform this loop not depends on memory constraints,
since GFP_ATOMIC allocations are done. It succeed or not, immediately.

Time is consumed on the copy of the skb head, and refcnt
increases/decreases on datarefcnt. Your patch doesnt avoid this.

When application calls recvmsg() we then perform the two atomics on skb
refcnt and data refcnt and free them, with cache line false sharing...

> 2) Increased memory usage
>    As you increase the number of listeners to a multicast group, you directly
> increase the number of times you clone and skb, putting increased memory
> pressure on the system.
> 

One skb_head is about 256 bytes (232 bytes on 64bit arches)

> while neither of these problems is a huge concern, I thought it would be nice if
> we could mitigate the effects of increased application instances on performance
> in this area.  As such I came up with this patch set.  I created a new skb
> fclone type called FCLONE_SCRATCH.  When available, it commandeers the
> internally fragmented space of an skb data buffer and uses that to allocate
> additional skbs during the clone operation. Since the skb->data area is
> allocated with a kmalloc operation (and is therefore nominally a power of 2 in
> size), and nominally network interfaces tend to have an mtu of around 1500
> bytes, we typically can reclaim several hundred bytes of space at the end of an
> skb (more if the incomming packet is not a full MTU in size).  This space, being
> exclusively accessible to the softirq doing the reclaim, can be quickly accesed
> without the need for additional locking, potntially providing lower jitter in
> napi context per frame during a receive operation, as well as some memory
> savings.
> 
> I'm still collecting stats on its performance, but I thought I would post now to
> get some early reviews and feedback on it.
> 

I really doubt you'll find a significative performance increase.

I do believe its a too complex : skb code is already a nightmare if you
ask me.

And your hack/idea wont work quite well if you have 8 receivers for each
frame.

What about finding another way to queue one skb to N receive queue(s),
so that several multicast sockets can share same skb head ?

I always found sk_receive queue being very inefficient, since a queue or
dequeue must dirty a lot of cache lines.

This forces us to use a spinlock to protect queue/enqueue operations,
but also the socket lock (because of the MSG_PEEK stuff and
sk_rmem_alloc / sk_forward_alloc)

sk_receive_queue.lock is the real jitter source.

Ideally, we could have a fast path using a small circular array per
socket, of say 8 or 16 pointers to skbs, or allow application or
sysadmin to size this array.

A circular buffer can be handled without any lock, using atomic
operations (cmpxchg()) on load/unload indexes. The array of pointers is
written only by the softirq handler cpu, read by consumers.

Since this array is small [and finite size], and skb shared, we dont
call skb_set_owner_r() anymore, avoiding expensive atomic ops on
sk->sk_rmem_alloc.

UDP receive path could become lockless, allowing the softirq handler to
run without being slowed down by concurrent recvmsg()

At recvmsg() time, N-1 threads would only perform the skb->refcnt
decrement, and the last one would free the skb and data as well.

^ permalink raw reply

* Re: [PATCH 2/2 v3] net/smsc911x: Add regulator support
From: Mike Frysinger @ 2011-10-27 22:43 UTC (permalink / raw)
  To: Mark Brown
  Cc: Linus Walleij, netdev, Steve Glendinning, Mathieu Poirer,
	Robert Marklund, Paul Mundt, linux-sh, Sascha Hauer,
	Tony Lindgren, linux-omap, uclinux-dist-devel, Linus Walleij
In-Reply-To: <20111027214241.GA11534@opensource.wolfsonmicro.com>

On Thu, Oct 27, 2011 at 23:42, Mark Brown wrote:
> On Thu, Oct 27, 2011 at 10:59:14PM +0200, Mike Frysinger wrote:
>> i saw that !CONFIG_REGULATOR works great.  my concern is that these
>> boards don't define any regulators for smsc resources, so if
>> CONFIG_REGULATOR is enabled to test out unrelated daughter cards, i
>> don't want the network driver suddenly failing.  Linus' comments
>> suggest that this is what would happen unless each board file has its
>> smsc platform resources extended.  maybe i misunderstood what he was saying ?
>
> That's the case that's handled by CONFIG_REGULATOR_DUMMY - if the lookup
> fails the core will provide a virtual regulator to the consumer.  If
> you're running a setup like that you probably want to enable dummy
> regulators anyway.

ok, if people configuring need only select that Kconfig symbol to make
it work, i'm fine with things.  thanks for the explanation.
-mike

^ permalink raw reply

* Re: [PATCH] MAINTAINERS: Remove quotes of maintaners's names
From: Jeff Kirsher @ 2011-10-27 22:26 UTC (permalink / raw)
  To: Marcos Paulo de Souza
  Cc: akpm@linux-foundation.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
In-Reply-To: <alpine.LNX.2.00.1110271845200.8311@darkstar.example.net>

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

On Thu, 2011-10-27 at 11:48 -0700, Marcos Paulo de Souza wrote:
> 
> On Thu, 27 Oct 2011, Kirsher, Jeffrey T wrote:
> 
> > On Oct 27, 2011, at 14:14, "Marcos Paulo de Souza" <marcos.mage@gmail.com> wrote:
> >
> >> Signed-off-by: Marcos Paulo de Souza <marcos.mage@gmail.com>
> >> ---
> >> MAINTAINERS |  128 +++++++++++++++++++++++++++++-----------------------------
> >> 1 files changed, 64 insertions(+), 64 deletions(-)
> >>
> >> diff --git a/MAINTAINERS b/MAINTAINERS
> >> index 27af9c9..0bea8d7 100644
> >> --- a/MAINTAINERS
> >> +++ b/MAINTAINERS
> >> @@ -140,7 +140,7 @@ S:  Supported
> >> F:     drivers/scsi/3w-*
> >>
> >> 53C700 AND 53C700-66 SCSI DRIVER
> >> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> >> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> >> L:     linux-scsi@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/scsi/53c700*
> >> @@ -422,7 +422,7 @@ F:  drivers/char/agp/
> >> F:     include/linux/agp*
> >>
> >> AHA152X SCSI DRIVER
> >> -M:     "Juergen E. Fischer" <fischer@norbit.de>
> >> +M:     Juergen E. Fischer <fischer@norbit.de>
> >> L:     linux-scsi@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/scsi/aha152x*
> >> @@ -1096,7 +1096,7 @@ F:        arch/arm/mach-shmobile/
> >> F:     drivers/sh/
> >>
> >> ARM/TELECHIPS ARM ARCHITECTURE
> >> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> >> +M:     Hans J. Koch <hjk@hansjkoch.de>
> >> L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> >> S:     Maintained
> >> F:     arch/arm/plat-tcc/
> >> @@ -1108,7 +1108,7 @@ L:        linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> >> S:     Maintained
> >>
> >> ARM/TETON BGA MACHINE SUPPORT
> >> -M:     "Mark F. Brown" <mark.brown314@gmail.com>
> >> +M:     Mark F. Brown <mark.brown314@gmail.com>
> >> L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> >> S:     Maintained
> >>
> >> @@ -1200,7 +1200,7 @@ F:        drivers/platform/x86/asus*.c
> >> F:     drivers/platform/x86/eeepc*.c
> >>
> >> ASUS ASB100 HARDWARE MONITOR DRIVER
> >> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> >> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> >> L:     lm-sensors@lm-sensors.org
> >> S:     Maintained
> >> F:     drivers/hwmon/asb100.c
> >> @@ -1223,14 +1223,14 @@ F:      drivers/misc/eeprom/at24.c
> >> F:     include/linux/i2c/at24.h
> >>
> >> ATA OVER ETHERNET (AOE) DRIVER
> >> -M:     "Ed L. Cashin" <ecashin@coraid.com>
> >> +M:     Ed L. Cashin <ecashin@coraid.com>
> >> W:     http://www.coraid.com/support/linux
> >> S:     Supported
> >> F:     Documentation/aoe/
> >> F:     drivers/block/aoe/
> >>
> >> ATHEROS ATH GENERIC UTILITIES
> >> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> >> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> >> L:     linux-wireless@vger.kernel.org
> >> S:     Supported
> >> F:     drivers/net/wireless/ath/*
> >> @@ -1238,7 +1238,7 @@ F:        drivers/net/wireless/ath/*
> >> ATHEROS ATH5K WIRELESS DRIVER
> >> M:     Jiri Slaby <jirislaby@gmail.com>
> >> M:     Nick Kossifidis <mickflemm@gmail.com>
> >> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> >> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> >> M:     Bob Copeland <me@bobcopeland.com>
> >> L:     linux-wireless@vger.kernel.org
> >> L:     ath5k-devel@lists.ath5k.org
> >> @@ -1255,7 +1255,7 @@ S:        Supported
> >> F:     drivers/net/wireless/ath/ath6kl/
> >>
> >> ATHEROS ATH9K WIRELESS DRIVER
> >> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> >> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> >> M:     Jouni Malinen <jouni@qca.qualcomm.com>
> >> M:     Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
> >> M:     Senthil Balasubramanian <senthilb@qca.qualcomm.com>
> >> @@ -1436,7 +1436,7 @@ F:        Documentation/filesystems/befs.txt
> >> F:     fs/befs/
> >>
> >> BFS FILE SYSTEM
> >> -M:     "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
> >> +M:     Tigran A. Aivazian <tigran@aivazian.fsnet.co.uk>
> >> S:     Maintained
> >> F:     Documentation/filesystems/bfs.txt
> >> F:     fs/bfs/
> >> @@ -1504,7 +1504,7 @@ F:        drivers/mtd/devices/block2mtd.c
> >>
> >> BLUETOOTH DRIVERS
> >> M:     Marcel Holtmann <marcel@holtmann.org>
> >> -M:     "Gustavo F. Padovan" <padovan@profusion.mobi>
> >> +M:     Gustavo F. Padovan <padovan@profusion.mobi>
> >> L:     linux-bluetooth@vger.kernel.org
> >> W:     http://www.bluez.org/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
> >> @@ -1513,7 +1513,7 @@ F:        drivers/bluetooth/
> >>
> >> BLUETOOTH SUBSYSTEM
> >> M:     Marcel Holtmann <marcel@holtmann.org>
> >> -M:     "Gustavo F. Padovan" <padovan@profusion.mobi>
> >> +M:     Gustavo F. Padovan <padovan@profusion.mobi>
> >> L:     linux-bluetooth@vger.kernel.org
> >> W:     http://www.bluez.org/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
> >> @@ -1659,7 +1659,7 @@ F:        net/caif/
> >>
> >> CALGARY x86-64 IOMMU
> >> M:     Muli Ben-Yehuda <muli@il.ibm.com>
> >> -M:     "Jon D. Mason" <jdmason@kudzu.us>
> >> +M:     Jon D. Mason <jdmason@kudzu.us>
> >> L:     discuss@x86-64.org
> >> S:     Maintained
> >> F:     arch/x86/kernel/pci-calgary_64.c
> >> @@ -1925,7 +1925,7 @@ F:        drivers/cpufreq/
> >> F:     include/linux/cpufreq.h
> >>
> >> CPUID/MSR DRIVER
> >> -M:     "H. Peter Anvin" <hpa@zytor.com>
> >> +M:     H. Peter Anvin <hpa@zytor.com>
> >> S:     Maintained
> >> F:     arch/x86/kernel/cpuid.c
> >> F:     arch/x86/kernel/msr.c
> >> @@ -1962,7 +1962,7 @@ F:        drivers/tty/serial/crisv10.*
> >>
> >> CRYPTO API
> >> M:     Herbert Xu <herbert@gondor.apana.org.au>
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> L:     linux-crypto@vger.kernel.org
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
> >> S:     Maintained
> >> @@ -2116,7 +2116,7 @@ F:        Documentation/networking/decnet.txt
> >> F:     net/decnet/
> >>
> >> DEFXX FDDI NETWORK DRIVER
> >> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> >> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> >> S:     Maintained
> >> F:     drivers/net/fddi/defxx.*
> >>
> >> @@ -2169,7 +2169,7 @@ F:        include/linux/device-mapper.h
> >> F:     include/linux/dm-*.h
> >>
> >> DIGI INTL. EPCA DRIVER
> >> -M:     "Digi International, Inc" <Eng.Linux@digi.com>
> >> +M:     Digi International, Inc <Eng.Linux@digi.com>
> >> L:     Eng.Linux@digi.com
> >> W:     http://www.digi.com
> >> S:     Orphan
> >> @@ -2248,7 +2248,7 @@ S:        Maintained
> >> F:     Documentation/
> >>
> >> DOUBLETALK DRIVER
> >> -M:     "James R. Van Zandt" <jrv@vanzandt.mv.com>
> >> +M:     James R. Van Zandt <jrv@vanzandt.mv.com>
> >> L:     blinux-list@redhat.com
> >> S:     Maintained
> >> F:     drivers/char/dtlk.c
> >> @@ -2317,7 +2317,7 @@ F:        lib/dynamic_debug.c
> >> F:     include/linux/dynamic_debug.h
> >>
> >> DZ DECSTATION DZ11 SERIAL DRIVER
> >> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> >> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> >> S:     Maintained
> >> F:     drivers/tty/serial/dz.*
> >>
> >> @@ -2436,7 +2436,7 @@ F:        include/linux/edac_mce.h
> >>
> >> EDAC-I82975X
> >> M:     Ranganathan Desikan <ravi@jetztechnologies.com>
> >> -M:     "Arvind R." <arvino55@gmail.com>
> >> +M:     Arvind R. <arvino55@gmail.com>
> >> L:     bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
> >> W:     bluesmoke.sourceforge.net
> >> S:     Maintained
> >> @@ -2565,7 +2565,7 @@ F:        fs/ext3/
> >> F:     include/linux/ext3*
> >>
> >> EXT4 FILE SYSTEM
> >> -M:     "Theodore Ts'o" <tytso@mit.edu>
> >> +M:     Theodore Ts'o <tytso@mit.edu>
> >> M:     Andreas Dilger <adilger.kernel@dilger.ca>
> >> L:     linux-ext4@vger.kernel.org
> >> W:     http://ext4.wiki.kernel.org
> >> @@ -2759,7 +2759,7 @@ F:        fs/freevxfs/
> >>
> >> FREEZER
> >> M:     Pavel Machek <pavel@ucw.cz>
> >> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> >> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> >> L:     linux-pm@vger.kernel.org
> >> S:     Supported
> >> F:     Documentation/power/freezing-of-tasks.txt
> >> @@ -2840,7 +2840,7 @@ S:        Maintained
> >> F:     include/asm-generic
> >>
> >> GENERIC UIO DRIVER FOR PCI DEVICES
> >> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> >> +M:     Michael S. Tsirkin <mst@redhat.com>
> >> L:     kvm@vger.kernel.org
> >> S:     Supported
> >> F:     drivers/uio/uio_pci_generic.c
> >> @@ -2991,7 +2991,7 @@ F:        Documentation/blockdev/cpqarray.txt
> >> F:     drivers/block/cpqarray.*
> >>
> >> HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
> >> -M:     "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
> >> +M:     Stephen M. Cameron <scameron@beardog.cce.hp.com>
> >> L:     iss_storagedev@hp.com
> >> S:     Supported
> >> F:     Documentation/scsi/hpsa.txt
> >> @@ -3021,7 +3021,7 @@ F:        drivers/video/hgafb.c
> >>
> >> HIBERNATION (aka Software Suspend, aka swsusp)
> >> M:     Pavel Machek <pavel@ucw.cz>
> >> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> >> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> >> L:     linux-pm@vger.kernel.org
> >> S:     Supported
> >> F:     arch/x86/power/
> >> @@ -3101,7 +3101,7 @@ F:        drivers/char/hpet.c
> >> F:     include/linux/hpet.h
> >>
> >> HPET:  x86
> >> -M:     "Venkatesh Pallipadi (Venki)" <venki@google.com>
> >> +M:     Venkatesh Pallipadi (Venki) <venki@google.com>
> >> S:     Maintained
> >> F:     arch/x86/kernel/hpet.c
> >> F:     arch/x86/include/asm/hpet.h
> >> @@ -3130,14 +3130,14 @@ S:      Maintained
> >> F:     fs/hugetlbfs/
> >>
> >> I2C/SMBUS STUB DRIVER
> >> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> >> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> >> L:     linux-i2c@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/i2c/busses/i2c-stub.c
> >>
> >> I2C SUBSYSTEM
> >> -M:     "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
> >> -M:     "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
> >> +M:     Jean Delvare (PC drivers, core) <khali@linux-fr.org>
> >> +M:     Ben Dooks (embedded platforms) <ben-linux@fluff.org>
> >> L:     linux-i2c@vger.kernel.org
> >> W:     http://i2c.wiki.kernel.org/
> >> T:     quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
> >> @@ -3156,12 +3156,12 @@ S:      Maintained
> >> F:     drivers/i2c/busses/i2c-tiny-usb.c
> >>
> >> i386 BOOT CODE
> >> -M:     "H. Peter Anvin" <hpa@zytor.com>
> >> +M:     H. Peter Anvin <hpa@zytor.com>
> >> S:     Maintained
> >> F:     arch/x86/boot/
> >>
> >> i386 SETUP CODE / CPU ERRATA WORKAROUNDS
> >> -M:     "H. Peter Anvin" <hpa@zytor.com>
> >> +M:     H. Peter Anvin <hpa@zytor.com>
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
> >> S:     Maintained
> >>
> >> @@ -3199,7 +3199,7 @@ S:        Supported
> >> F:     drivers/scsi/ips.*
> >>
> >> IDE SUBSYSTEM
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> L:     linux-ide@vger.kernel.org
> >> Q:     http://patchwork.ozlabs.org/project/linux-ide/list/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6.git
> >> @@ -3647,7 +3647,7 @@ F:        include/linux/ext3_jbd.h
> >> F:     include/linux/jbd.h
> >>
> >> JOURNALLING LAYER FOR BLOCK DEVICES (JBD2)
> >> -M:     "Theodore Ts'o" <tytso@mit.edu>
> >> +M:     Theodore Ts'o <tytso@mit.edu>
> >> L:     linux-ext4@vger.kernel.org
> >> S:     Maintained
> >> F:     fs/jbd2/
> >> @@ -3713,7 +3713,7 @@ W:        http://kernelnewbies.org/KernelJanitors
> >> S:     Odd Fixes
> >>
> >> KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
> >> -M:     "J. Bruce Fields" <bfields@fieldses.org>
> >> +M:     J. Bruce Fields <bfields@fieldses.org>
> >> M:     Neil Brown <neilb@suse.de>
> >> L:     linux-nfs@vger.kernel.org
> >> W:     http://nfs.sourceforge.net/
> >> @@ -3848,7 +3848,7 @@ F:        mm/kmemleak-test.c
> >> KPROBES
> >> M:     Ananth N Mavinakayanahalli <ananth@in.ibm.com>
> >> M:     Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> M:     Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> >> S:     Maintained
> >> F:     Documentation/kprobes.txt
> >> @@ -3872,7 +3872,7 @@ F:        include/*/lapb.h
> >> F:     net/lapb/
> >>
> >> LASI 53c700 driver for PARISC
> >> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> >> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> >> L:     linux-scsi@vger.kernel.org
> >> S:     Maintained
> >> F:     Documentation/scsi/53c700.txt
> >> @@ -4040,7 +4040,7 @@ F:        include/linux/lockdep.h
> >> F:     kernel/lockdep*
> >>
> >> LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks)
> >> -M:     "Richard Russon (FlatCap)" <ldm@flatcap.org>
> >> +M:     Richard Russon (FlatCap) <ldm@flatcap.org>
> >> L:     linux-ntfs-dev@lists.sourceforge.net
> >> W:     http://www.linux-ntfs.org/content/view/19/37/
> >> S:     Maintained
> >> @@ -4191,14 +4191,14 @@ F:      drivers/video/matrox/matroxfb_*
> >> F:     include/linux/matroxfb.h
> >>
> >> MAX1668 TEMPERATURE SENSOR DRIVER
> >> -M:     "David George" <david.george@ska.ac.za>
> >> +M:     David George <david.george@ska.ac.za>
> >> L:     lm-sensors@lm-sensors.org
> >> S:     Maintained
> >> F:     Documentation/hwmon/max1668
> >> F:     drivers/hwmon/max1668.c
> >>
> >> MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
> >> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> >> +M:     Hans J. Koch <hjk@hansjkoch.de>
> >> L:     lm-sensors@lm-sensors.org
> >> S:     Maintained
> >> F:     Documentation/hwmon/max6650
> >> @@ -4318,7 +4318,7 @@ F:        Documentation/serial/moxa-smartio
> >> F:     drivers/tty/mxser.*
> >>
> >> MSI LAPTOP SUPPORT
> >> -M:     "Lee, Chun-Yi" <jlee@novell.com>
> >> +M:     Lee, Chun-Yi <jlee@novell.com>
> >> L:     platform-driver-x86@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/platform/x86/msi-laptop.c
> >> @@ -4392,7 +4392,7 @@ S:        Odd Fixes
> >> F:     fs/ncpfs/
> >>
> >> NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
> >> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> >> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> >> L:     linux-scsi@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/scsi/NCR_D700.*
> >> @@ -4475,7 +4475,7 @@ W:        https://fedorahosted.org/dropwatch/
> >> F:     net/core/drop_monitor.c
> >>
> >> NETWORKING [GENERAL]
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> L:     netdev@vger.kernel.org
> >> W:     http://www.linuxfoundation.org/en/Net
> >> W:     http://patchwork.ozlabs.org/project/netdev/list/
> >> @@ -4489,7 +4489,7 @@ F:        include/linux/net.h
> >> F:     include/linux/netdevice.h
> >>
> >> NETWORKING [IPv4/IPv6]
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> M:     Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
> >> M:     James Morris <jmorris@namei.org>
> >> M:     Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
> >> @@ -4508,7 +4508,7 @@ L:        netdev@vger.kernel.org
> >> S:     Maintained
> >>
> >> NETWORKING [WIRELESS]
> >> -M:     "John W. Linville" <linville@tuxdriver.com>
> >> +M:     John W. Linville <linville@tuxdriver.com>
> >> L:     linux-wireless@vger.kernel.org
> >> Q:     http://patchwork.kernel.org/project/linux-wireless/list/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
> >> @@ -4896,7 +4896,7 @@ F:        drivers/block/paride/
> >> PARISC ARCHITECTURE
> >> M:     Kyle McMartin <kyle@mcmartin.ca>
> >> M:     Helge Deller <deller@gmx.de>
> >> -M:     "James E.J. Bottomley" <jejb@parisc-linux.org>
> >> +M:     James E.J. Bottomley <jejb@parisc-linux.org>
> >> L:     linux-parisc@vger.kernel.org
> >> W:     http://www.parisc-linux.org/
> >> Q:     http://patchwork.kernel.org/project/linux-parisc/list/
> >> @@ -5164,7 +5164,7 @@ F:        Documentation/preempt-locking.txt
> >> F:     include/linux/preempt.h
> >>
> >> PRISM54 WIRELESS DRIVER
> >> -M:     "Luis R. Rodriguez" <mcgrof@gmail.com>
> >> +M:     Luis R. Rodriguez <mcgrof@gmail.com>
> >> L:     linux-wireless@vger.kernel.org
> >> W:     http://wireless.kernel.org/en/users/Drivers/p54
> >> S:     Obsolete
> >> @@ -5384,7 +5384,7 @@ F:        drivers/net/wireless/ray*
> >>
> >> RCUTORTURE MODULE
> >> M:     Josh Triplett <josh@freedesktop.org>
> >> -M:     "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> >> +M:     Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> >> S:     Supported
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
> >> F:     Documentation/RCU/torture.txt
> >> @@ -5408,7 +5408,7 @@ F:        net/rds/
> >>
> >> READ-COPY UPDATE (RCU)
> >> M:     Dipankar Sarma <dipankar@in.ibm.com>
> >> -M:     "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> >> +M:     Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> >> W:     http://www.rdrop.com/users/paulmck/rclock/
> >> S:     Supported
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
> >> @@ -5480,7 +5480,7 @@ F:        include/net/rose.h
> >> F:     net/rose/
> >>
> >> RTL8180 WIRELESS DRIVER
> >> -M:     "John W. Linville" <linville@tuxdriver.com>
> >> +M:     John W. Linville <linville@tuxdriver.com>
> >> L:     linux-wireless@vger.kernel.org
> >> W:     http://linuxwireless.org/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
> >> @@ -5661,7 +5661,7 @@ F:        drivers/scsi/sg.c
> >> F:     include/scsi/sg.h
> >>
> >> SCSI SUBSYSTEM
> >> -M:     "James E.J. Bottomley" <JBottomley@parallels.com>
> >> +M:     James E.J. Bottomley <JBottomley@parallels.com>
> >> L:     linux-scsi@vger.kernel.org
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
> >> @@ -5886,7 +5886,7 @@ S:        Maintained
> >> F:     drivers/net/ethernet/sis/sis900.*
> >>
> >> SIS 96X I2C/SMBUS DRIVER
> >> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> >> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> >> L:     linux-i2c@vger.kernel.org
> >> S:     Maintained
> >> F:     Documentation/i2c/busses/i2c-sis96x
> >> @@ -5948,7 +5948,7 @@ F:        Documentation/hwmon/sch5627
> >> F:     drivers/hwmon/sch5627.c
> >>
> >> SMSC47B397 HARDWARE MONITOR DRIVER
> >> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> >> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> >> L:     lm-sensors@lm-sensors.org
> >> S:     Maintained
> >> F:     Documentation/hwmon/smsc47b397
> >> @@ -6054,7 +6054,7 @@ F:        sound/soc/
> >> F:     include/sound/soc*
> >>
> >> SPARC + UltraSPARC (sparc/sparc64)
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> L:     sparclinux@vger.kernel.org
> >> Q:     http://patchwork.ozlabs.org/project/sparclinux/list/
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
> >> @@ -6064,7 +6064,7 @@ F:        arch/sparc/
> >> F:     drivers/sbus/
> >>
> >> SPARC SERIAL DRIVERS
> >> -M:     "David S. Miller" <davem@davemloft.net>
> >> +M:     David S. Miller <davem@davemloft.net>
> >> L:     sparclinux@vger.kernel.org
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
> >> @@ -6349,7 +6349,7 @@ F:        drivers/sh/
> >> SUSPEND TO RAM
> >> M:     Len Brown <len.brown@intel.com>
> >> M:     Pavel Machek <pavel@ucw.cz>
> >> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> >> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> >> L:     linux-pm@vger.kernel.org
> >> S:     Supported
> >> F:     Documentation/power/
> >> @@ -6402,8 +6402,8 @@ F:        include/net/pkt_cls.h
> >> F:     net/sched/
> >>
> >> TCP LOW PRIORITY MODULE
> >> -M:     "Wong Hoi Sing, Edison" <hswong3i@gmail.com>
> >> -M:     "Hung Hing Lun, Mike" <hlhung3i@gmail.com>
> >> +M:     Wong Hoi Sing, Edison <hswong3i@gmail.com>
> >> +M:     Hung Hing Lun, Mike <hlhung3i@gmail.com>
> >> W:     http://tcp-lp-mod.sourceforge.net/
> >> S:     Maintained
> >> F:     net/ipv4/tcp_lp.c
> >> @@ -6586,7 +6586,7 @@ F:        Documentation/networking/tuntap.txt
> >> F:     arch/um/os-Linux/drivers/
> >>
> >> TURBOCHANNEL SUBSYSTEM
> >> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> >> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> >> S:     Maintained
> >> F:     drivers/tc/
> >> F:     include/linux/tc.h
> >> @@ -6983,7 +6983,7 @@ F:        fs/hostfs/
> >> F:     fs/hppfs/
> >>
> >> USERSPACE I/O (UIO)
> >> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> >> +M:     Hans J. Koch <hjk@hansjkoch.de>
> >> M:     Greg Kroah-Hartman <gregkh@suse.de>
> >> S:     Maintained
> >> F:     Documentation/DocBook/uio-howto.tmpl
> >> @@ -7029,7 +7029,7 @@ F:        include/linux/virtio_console.h
> >>
> >> VIRTIO CORE, NET AND BLOCK DRIVERS
> >> M:     Rusty Russell <rusty@rustcorp.com.au>
> >> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> >> +M:     Michael S. Tsirkin <mst@redhat.com>
> >> L:     virtualization@lists.linux-foundation.org
> >> S:     Maintained
> >> F:     drivers/virtio/
> >> @@ -7038,7 +7038,7 @@ F:        drivers/block/virtio_blk.c
> >> F:     include/linux/virtio_*.h
> >>
> >> VIRTIO HOST (VHOST)
> >> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> >> +M:     Michael S. Tsirkin <mst@redhat.com>
> >> L:     kvm@vger.kernel.org
> >> L:     virtualization@lists.linux-foundation.org
> >> L:     netdev@vger.kernel.org
> >> @@ -7096,7 +7096,7 @@ F:        include/linux/vlynq.h
> >>
> >> VMWARE VMXNET3 ETHERNET DRIVER
> >> M:     Shreyas Bhatewara <sbhatewara@vmware.com>
> >> -M:     "VMware, Inc." <pv-drivers@vmware.com>
> >> +M:     VMware, Inc. <pv-drivers@vmware.com>
> >> L:     netdev@vger.kernel.org
> >> S:     Maintained
> >> F:     drivers/net/vmxnet3/
> >> @@ -7293,7 +7293,7 @@ F:        net/x25/
> >> X86 ARCHITECTURE (32-BIT AND 64-BIT)
> >> M:     Thomas Gleixner <tglx@linutronix.de>
> >> M:     Ingo Molnar <mingo@redhat.com>
> >> -M:     "H. Peter Anvin" <hpa@zytor.com>
> >> +M:     H. Peter Anvin <hpa@zytor.com>
> >> M:     x86@kernel.org
> >> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
> >> S:     Maintained
> >> @@ -7412,7 +7412,7 @@ S:        Odd Fixes
> >> F:     drivers/media/video/zoran/
> >>
> >> ZS DECSTATION Z85C30 SERIAL DRIVER
> >> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> >> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> >> S:     Maintained
> >> F:     drivers/tty/serial/zs.*
> >>
> >> --
> >> 1.7.4.4
> >>
> >
> > Adding lkml and netdev mailing lists...
> >
> > The reason these names are in quotes is because they need to be wrapped in quotes when used in a git patch (I.e. CC: "David S. Miller" <davem@davemloft.net>) because of the . in the friendly name.
> >
> Sorry, I thought that is a so trivial patch that doesn't need to copy lkml
> and netdev...
> 
> So, if the quotes aren't necessary, this patch will be discarded?
> 

I think you meant to say "if the quotes ARE necessary, this patch will
be discarded?"

Yes, if a patch needs changes or has issues, the patch would be
discarded (not applied).



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: [PATCH] MAINTAINERS: Remove quotes of maintaners's names
From: Sam Ravnborg @ 2011-10-27 21:53 UTC (permalink / raw)
  To: Kirsher, Jeffrey T
  Cc: Marcos Paulo de Souza, akpm@linux-foundation.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <610B86C6-622E-4EFE-89DF-BF09BDB4D765@intel.com>

On Thu, Oct 27, 2011 at 02:35:54PM -0700, Kirsher, Jeffrey T wrote:
> On Oct 27, 2011, at 14:14, "Marcos Paulo de Souza" <marcos.mage@gmail.com> wrote:
> 
> > Signed-off-by: Marcos Paulo de Souza <marcos.mage@gmail.com>
> > ---
> > MAINTAINERS |  128 +++++++++++++++++++++++++++++-----------------------------
> > 1 files changed, 64 insertions(+), 64 deletions(-)
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 27af9c9..0bea8d7 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -140,7 +140,7 @@ S:  Supported
> > F:     drivers/scsi/3w-*
> >
> > 53C700 AND 53C700-66 SCSI DRIVER
> > -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> > +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> > L:     linux-scsi@vger.kernel.org
> > S:     Maintained
> > F:     drivers/scsi/53c700*
> > @@ -422,7 +422,7 @@ F:  drivers/char/agp/
> > F:     include/linux/agp*
> >
> 
> Adding lkml and netdev mailing lists...
> 
> The reason these names are in quotes is because they need to be wrapped in quotes when used in a git patch (I.e. CC: "David S. Miller" <davem@davemloft.net>) because of the . in the friendly name.

And anyone that copy'n'paste the name to their mail client would also by screwed if
the quotes are missing.

	Sam

^ permalink raw reply

* Re: [PATCH 2/2 v3] net/smsc911x: Add regulator support
From: Mark Brown @ 2011-10-27 21:42 UTC (permalink / raw)
  To: Mike Frysinger
  Cc: Linus Walleij, netdev, Steve Glendinning, Mathieu Poirer,
	Robert Marklund, Paul Mundt, linux-sh, Sascha Hauer,
	Tony Lindgren, linux-omap, uclinux-dist-devel, Linus Walleij
In-Reply-To: <CAJaTeTpzFOdgqGH3vDWY8Mdx7zra8R9nUQYHgsEBfy_yGkEWOw@mail.gmail.com>

On Thu, Oct 27, 2011 at 10:59:14PM +0200, Mike Frysinger wrote:

> i saw that !CONFIG_REGULATOR works great.  my concern is that these
> boards don't define any regulators for smsc resources, so if
> CONFIG_REGULATOR is enabled to test out unrelated daughter cards, i
> don't want the network driver suddenly failing.  Linus' comments
> suggest that this is what would happen unless each board file has its
> smsc platform resources extended.  maybe i misunderstood what he was saying ?

That's the case that's handled by CONFIG_REGULATOR_DUMMY - if the lookup
fails the core will provide a virtual regulator to the consumer.  If
you're running a setup like that you probably want to enable dummy
regulators anyway.

^ permalink raw reply

* Re: [PATCH] MAINTAINERS: Remove quotes of maintaners's names
From: Kirsher, Jeffrey T @ 2011-10-27 21:35 UTC (permalink / raw)
  To: Marcos Paulo de Souza
  Cc: akpm@linux-foundation.org, Marcos Paulo de Souza,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <1319739381-5244-1-git-send-email-marcos.mage@gmail.com>

On Oct 27, 2011, at 14:14, "Marcos Paulo de Souza" <marcos.mage@gmail.com> wrote:

> Signed-off-by: Marcos Paulo de Souza <marcos.mage@gmail.com>
> ---
> MAINTAINERS |  128 +++++++++++++++++++++++++++++-----------------------------
> 1 files changed, 64 insertions(+), 64 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 27af9c9..0bea8d7 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -140,7 +140,7 @@ S:  Supported
> F:     drivers/scsi/3w-*
>
> 53C700 AND 53C700-66 SCSI DRIVER
> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> L:     linux-scsi@vger.kernel.org
> S:     Maintained
> F:     drivers/scsi/53c700*
> @@ -422,7 +422,7 @@ F:  drivers/char/agp/
> F:     include/linux/agp*
>
> AHA152X SCSI DRIVER
> -M:     "Juergen E. Fischer" <fischer@norbit.de>
> +M:     Juergen E. Fischer <fischer@norbit.de>
> L:     linux-scsi@vger.kernel.org
> S:     Maintained
> F:     drivers/scsi/aha152x*
> @@ -1096,7 +1096,7 @@ F:        arch/arm/mach-shmobile/
> F:     drivers/sh/
>
> ARM/TELECHIPS ARM ARCHITECTURE
> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> +M:     Hans J. Koch <hjk@hansjkoch.de>
> L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> S:     Maintained
> F:     arch/arm/plat-tcc/
> @@ -1108,7 +1108,7 @@ L:        linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> S:     Maintained
>
> ARM/TETON BGA MACHINE SUPPORT
> -M:     "Mark F. Brown" <mark.brown314@gmail.com>
> +M:     Mark F. Brown <mark.brown314@gmail.com>
> L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
> S:     Maintained
>
> @@ -1200,7 +1200,7 @@ F:        drivers/platform/x86/asus*.c
> F:     drivers/platform/x86/eeepc*.c
>
> ASUS ASB100 HARDWARE MONITOR DRIVER
> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> L:     lm-sensors@lm-sensors.org
> S:     Maintained
> F:     drivers/hwmon/asb100.c
> @@ -1223,14 +1223,14 @@ F:      drivers/misc/eeprom/at24.c
> F:     include/linux/i2c/at24.h
>
> ATA OVER ETHERNET (AOE) DRIVER
> -M:     "Ed L. Cashin" <ecashin@coraid.com>
> +M:     Ed L. Cashin <ecashin@coraid.com>
> W:     http://www.coraid.com/support/linux
> S:     Supported
> F:     Documentation/aoe/
> F:     drivers/block/aoe/
>
> ATHEROS ATH GENERIC UTILITIES
> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> L:     linux-wireless@vger.kernel.org
> S:     Supported
> F:     drivers/net/wireless/ath/*
> @@ -1238,7 +1238,7 @@ F:        drivers/net/wireless/ath/*
> ATHEROS ATH5K WIRELESS DRIVER
> M:     Jiri Slaby <jirislaby@gmail.com>
> M:     Nick Kossifidis <mickflemm@gmail.com>
> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> M:     Bob Copeland <me@bobcopeland.com>
> L:     linux-wireless@vger.kernel.org
> L:     ath5k-devel@lists.ath5k.org
> @@ -1255,7 +1255,7 @@ S:        Supported
> F:     drivers/net/wireless/ath/ath6kl/
>
> ATHEROS ATH9K WIRELESS DRIVER
> -M:     "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
> +M:     Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
> M:     Jouni Malinen <jouni@qca.qualcomm.com>
> M:     Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
> M:     Senthil Balasubramanian <senthilb@qca.qualcomm.com>
> @@ -1436,7 +1436,7 @@ F:        Documentation/filesystems/befs.txt
> F:     fs/befs/
>
> BFS FILE SYSTEM
> -M:     "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
> +M:     Tigran A. Aivazian <tigran@aivazian.fsnet.co.uk>
> S:     Maintained
> F:     Documentation/filesystems/bfs.txt
> F:     fs/bfs/
> @@ -1504,7 +1504,7 @@ F:        drivers/mtd/devices/block2mtd.c
>
> BLUETOOTH DRIVERS
> M:     Marcel Holtmann <marcel@holtmann.org>
> -M:     "Gustavo F. Padovan" <padovan@profusion.mobi>
> +M:     Gustavo F. Padovan <padovan@profusion.mobi>
> L:     linux-bluetooth@vger.kernel.org
> W:     http://www.bluez.org/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
> @@ -1513,7 +1513,7 @@ F:        drivers/bluetooth/
>
> BLUETOOTH SUBSYSTEM
> M:     Marcel Holtmann <marcel@holtmann.org>
> -M:     "Gustavo F. Padovan" <padovan@profusion.mobi>
> +M:     Gustavo F. Padovan <padovan@profusion.mobi>
> L:     linux-bluetooth@vger.kernel.org
> W:     http://www.bluez.org/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
> @@ -1659,7 +1659,7 @@ F:        net/caif/
>
> CALGARY x86-64 IOMMU
> M:     Muli Ben-Yehuda <muli@il.ibm.com>
> -M:     "Jon D. Mason" <jdmason@kudzu.us>
> +M:     Jon D. Mason <jdmason@kudzu.us>
> L:     discuss@x86-64.org
> S:     Maintained
> F:     arch/x86/kernel/pci-calgary_64.c
> @@ -1925,7 +1925,7 @@ F:        drivers/cpufreq/
> F:     include/linux/cpufreq.h
>
> CPUID/MSR DRIVER
> -M:     "H. Peter Anvin" <hpa@zytor.com>
> +M:     H. Peter Anvin <hpa@zytor.com>
> S:     Maintained
> F:     arch/x86/kernel/cpuid.c
> F:     arch/x86/kernel/msr.c
> @@ -1962,7 +1962,7 @@ F:        drivers/tty/serial/crisv10.*
>
> CRYPTO API
> M:     Herbert Xu <herbert@gondor.apana.org.au>
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> L:     linux-crypto@vger.kernel.org
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
> S:     Maintained
> @@ -2116,7 +2116,7 @@ F:        Documentation/networking/decnet.txt
> F:     net/decnet/
>
> DEFXX FDDI NETWORK DRIVER
> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> S:     Maintained
> F:     drivers/net/fddi/defxx.*
>
> @@ -2169,7 +2169,7 @@ F:        include/linux/device-mapper.h
> F:     include/linux/dm-*.h
>
> DIGI INTL. EPCA DRIVER
> -M:     "Digi International, Inc" <Eng.Linux@digi.com>
> +M:     Digi International, Inc <Eng.Linux@digi.com>
> L:     Eng.Linux@digi.com
> W:     http://www.digi.com
> S:     Orphan
> @@ -2248,7 +2248,7 @@ S:        Maintained
> F:     Documentation/
>
> DOUBLETALK DRIVER
> -M:     "James R. Van Zandt" <jrv@vanzandt.mv.com>
> +M:     James R. Van Zandt <jrv@vanzandt.mv.com>
> L:     blinux-list@redhat.com
> S:     Maintained
> F:     drivers/char/dtlk.c
> @@ -2317,7 +2317,7 @@ F:        lib/dynamic_debug.c
> F:     include/linux/dynamic_debug.h
>
> DZ DECSTATION DZ11 SERIAL DRIVER
> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> S:     Maintained
> F:     drivers/tty/serial/dz.*
>
> @@ -2436,7 +2436,7 @@ F:        include/linux/edac_mce.h
>
> EDAC-I82975X
> M:     Ranganathan Desikan <ravi@jetztechnologies.com>
> -M:     "Arvind R." <arvino55@gmail.com>
> +M:     Arvind R. <arvino55@gmail.com>
> L:     bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
> W:     bluesmoke.sourceforge.net
> S:     Maintained
> @@ -2565,7 +2565,7 @@ F:        fs/ext3/
> F:     include/linux/ext3*
>
> EXT4 FILE SYSTEM
> -M:     "Theodore Ts'o" <tytso@mit.edu>
> +M:     Theodore Ts'o <tytso@mit.edu>
> M:     Andreas Dilger <adilger.kernel@dilger.ca>
> L:     linux-ext4@vger.kernel.org
> W:     http://ext4.wiki.kernel.org
> @@ -2759,7 +2759,7 @@ F:        fs/freevxfs/
>
> FREEZER
> M:     Pavel Machek <pavel@ucw.cz>
> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> L:     linux-pm@vger.kernel.org
> S:     Supported
> F:     Documentation/power/freezing-of-tasks.txt
> @@ -2840,7 +2840,7 @@ S:        Maintained
> F:     include/asm-generic
>
> GENERIC UIO DRIVER FOR PCI DEVICES
> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> +M:     Michael S. Tsirkin <mst@redhat.com>
> L:     kvm@vger.kernel.org
> S:     Supported
> F:     drivers/uio/uio_pci_generic.c
> @@ -2991,7 +2991,7 @@ F:        Documentation/blockdev/cpqarray.txt
> F:     drivers/block/cpqarray.*
>
> HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
> -M:     "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
> +M:     Stephen M. Cameron <scameron@beardog.cce.hp.com>
> L:     iss_storagedev@hp.com
> S:     Supported
> F:     Documentation/scsi/hpsa.txt
> @@ -3021,7 +3021,7 @@ F:        drivers/video/hgafb.c
>
> HIBERNATION (aka Software Suspend, aka swsusp)
> M:     Pavel Machek <pavel@ucw.cz>
> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> L:     linux-pm@vger.kernel.org
> S:     Supported
> F:     arch/x86/power/
> @@ -3101,7 +3101,7 @@ F:        drivers/char/hpet.c
> F:     include/linux/hpet.h
>
> HPET:  x86
> -M:     "Venkatesh Pallipadi (Venki)" <venki@google.com>
> +M:     Venkatesh Pallipadi (Venki) <venki@google.com>
> S:     Maintained
> F:     arch/x86/kernel/hpet.c
> F:     arch/x86/include/asm/hpet.h
> @@ -3130,14 +3130,14 @@ S:      Maintained
> F:     fs/hugetlbfs/
>
> I2C/SMBUS STUB DRIVER
> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> L:     linux-i2c@vger.kernel.org
> S:     Maintained
> F:     drivers/i2c/busses/i2c-stub.c
>
> I2C SUBSYSTEM
> -M:     "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
> -M:     "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
> +M:     Jean Delvare (PC drivers, core) <khali@linux-fr.org>
> +M:     Ben Dooks (embedded platforms) <ben-linux@fluff.org>
> L:     linux-i2c@vger.kernel.org
> W:     http://i2c.wiki.kernel.org/
> T:     quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
> @@ -3156,12 +3156,12 @@ S:      Maintained
> F:     drivers/i2c/busses/i2c-tiny-usb.c
>
> i386 BOOT CODE
> -M:     "H. Peter Anvin" <hpa@zytor.com>
> +M:     H. Peter Anvin <hpa@zytor.com>
> S:     Maintained
> F:     arch/x86/boot/
>
> i386 SETUP CODE / CPU ERRATA WORKAROUNDS
> -M:     "H. Peter Anvin" <hpa@zytor.com>
> +M:     H. Peter Anvin <hpa@zytor.com>
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
> S:     Maintained
>
> @@ -3199,7 +3199,7 @@ S:        Supported
> F:     drivers/scsi/ips.*
>
> IDE SUBSYSTEM
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> L:     linux-ide@vger.kernel.org
> Q:     http://patchwork.ozlabs.org/project/linux-ide/list/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6.git
> @@ -3647,7 +3647,7 @@ F:        include/linux/ext3_jbd.h
> F:     include/linux/jbd.h
>
> JOURNALLING LAYER FOR BLOCK DEVICES (JBD2)
> -M:     "Theodore Ts'o" <tytso@mit.edu>
> +M:     Theodore Ts'o <tytso@mit.edu>
> L:     linux-ext4@vger.kernel.org
> S:     Maintained
> F:     fs/jbd2/
> @@ -3713,7 +3713,7 @@ W:        http://kernelnewbies.org/KernelJanitors
> S:     Odd Fixes
>
> KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
> -M:     "J. Bruce Fields" <bfields@fieldses.org>
> +M:     J. Bruce Fields <bfields@fieldses.org>
> M:     Neil Brown <neilb@suse.de>
> L:     linux-nfs@vger.kernel.org
> W:     http://nfs.sourceforge.net/
> @@ -3848,7 +3848,7 @@ F:        mm/kmemleak-test.c
> KPROBES
> M:     Ananth N Mavinakayanahalli <ananth@in.ibm.com>
> M:     Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> M:     Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> S:     Maintained
> F:     Documentation/kprobes.txt
> @@ -3872,7 +3872,7 @@ F:        include/*/lapb.h
> F:     net/lapb/
>
> LASI 53c700 driver for PARISC
> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> L:     linux-scsi@vger.kernel.org
> S:     Maintained
> F:     Documentation/scsi/53c700.txt
> @@ -4040,7 +4040,7 @@ F:        include/linux/lockdep.h
> F:     kernel/lockdep*
>
> LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks)
> -M:     "Richard Russon (FlatCap)" <ldm@flatcap.org>
> +M:     Richard Russon (FlatCap) <ldm@flatcap.org>
> L:     linux-ntfs-dev@lists.sourceforge.net
> W:     http://www.linux-ntfs.org/content/view/19/37/
> S:     Maintained
> @@ -4191,14 +4191,14 @@ F:      drivers/video/matrox/matroxfb_*
> F:     include/linux/matroxfb.h
>
> MAX1668 TEMPERATURE SENSOR DRIVER
> -M:     "David George" <david.george@ska.ac.za>
> +M:     David George <david.george@ska.ac.za>
> L:     lm-sensors@lm-sensors.org
> S:     Maintained
> F:     Documentation/hwmon/max1668
> F:     drivers/hwmon/max1668.c
>
> MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> +M:     Hans J. Koch <hjk@hansjkoch.de>
> L:     lm-sensors@lm-sensors.org
> S:     Maintained
> F:     Documentation/hwmon/max6650
> @@ -4318,7 +4318,7 @@ F:        Documentation/serial/moxa-smartio
> F:     drivers/tty/mxser.*
>
> MSI LAPTOP SUPPORT
> -M:     "Lee, Chun-Yi" <jlee@novell.com>
> +M:     Lee, Chun-Yi <jlee@novell.com>
> L:     platform-driver-x86@vger.kernel.org
> S:     Maintained
> F:     drivers/platform/x86/msi-laptop.c
> @@ -4392,7 +4392,7 @@ S:        Odd Fixes
> F:     fs/ncpfs/
>
> NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
> -M:     "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> +M:     James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
> L:     linux-scsi@vger.kernel.org
> S:     Maintained
> F:     drivers/scsi/NCR_D700.*
> @@ -4475,7 +4475,7 @@ W:        https://fedorahosted.org/dropwatch/
> F:     net/core/drop_monitor.c
>
> NETWORKING [GENERAL]
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> L:     netdev@vger.kernel.org
> W:     http://www.linuxfoundation.org/en/Net
> W:     http://patchwork.ozlabs.org/project/netdev/list/
> @@ -4489,7 +4489,7 @@ F:        include/linux/net.h
> F:     include/linux/netdevice.h
>
> NETWORKING [IPv4/IPv6]
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> M:     Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
> M:     James Morris <jmorris@namei.org>
> M:     Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
> @@ -4508,7 +4508,7 @@ L:        netdev@vger.kernel.org
> S:     Maintained
>
> NETWORKING [WIRELESS]
> -M:     "John W. Linville" <linville@tuxdriver.com>
> +M:     John W. Linville <linville@tuxdriver.com>
> L:     linux-wireless@vger.kernel.org
> Q:     http://patchwork.kernel.org/project/linux-wireless/list/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
> @@ -4896,7 +4896,7 @@ F:        drivers/block/paride/
> PARISC ARCHITECTURE
> M:     Kyle McMartin <kyle@mcmartin.ca>
> M:     Helge Deller <deller@gmx.de>
> -M:     "James E.J. Bottomley" <jejb@parisc-linux.org>
> +M:     James E.J. Bottomley <jejb@parisc-linux.org>
> L:     linux-parisc@vger.kernel.org
> W:     http://www.parisc-linux.org/
> Q:     http://patchwork.kernel.org/project/linux-parisc/list/
> @@ -5164,7 +5164,7 @@ F:        Documentation/preempt-locking.txt
> F:     include/linux/preempt.h
>
> PRISM54 WIRELESS DRIVER
> -M:     "Luis R. Rodriguez" <mcgrof@gmail.com>
> +M:     Luis R. Rodriguez <mcgrof@gmail.com>
> L:     linux-wireless@vger.kernel.org
> W:     http://wireless.kernel.org/en/users/Drivers/p54
> S:     Obsolete
> @@ -5384,7 +5384,7 @@ F:        drivers/net/wireless/ray*
>
> RCUTORTURE MODULE
> M:     Josh Triplett <josh@freedesktop.org>
> -M:     "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> +M:     Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> S:     Supported
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
> F:     Documentation/RCU/torture.txt
> @@ -5408,7 +5408,7 @@ F:        net/rds/
>
> READ-COPY UPDATE (RCU)
> M:     Dipankar Sarma <dipankar@in.ibm.com>
> -M:     "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> +M:     Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> W:     http://www.rdrop.com/users/paulmck/rclock/
> S:     Supported
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
> @@ -5480,7 +5480,7 @@ F:        include/net/rose.h
> F:     net/rose/
>
> RTL8180 WIRELESS DRIVER
> -M:     "John W. Linville" <linville@tuxdriver.com>
> +M:     John W. Linville <linville@tuxdriver.com>
> L:     linux-wireless@vger.kernel.org
> W:     http://linuxwireless.org/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
> @@ -5661,7 +5661,7 @@ F:        drivers/scsi/sg.c
> F:     include/scsi/sg.h
>
> SCSI SUBSYSTEM
> -M:     "James E.J. Bottomley" <JBottomley@parallels.com>
> +M:     James E.J. Bottomley <JBottomley@parallels.com>
> L:     linux-scsi@vger.kernel.org
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
> @@ -5886,7 +5886,7 @@ S:        Maintained
> F:     drivers/net/ethernet/sis/sis900.*
>
> SIS 96X I2C/SMBUS DRIVER
> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> L:     linux-i2c@vger.kernel.org
> S:     Maintained
> F:     Documentation/i2c/busses/i2c-sis96x
> @@ -5948,7 +5948,7 @@ F:        Documentation/hwmon/sch5627
> F:     drivers/hwmon/sch5627.c
>
> SMSC47B397 HARDWARE MONITOR DRIVER
> -M:     "Mark M. Hoffman" <mhoffman@lightlink.com>
> +M:     Mark M. Hoffman <mhoffman@lightlink.com>
> L:     lm-sensors@lm-sensors.org
> S:     Maintained
> F:     Documentation/hwmon/smsc47b397
> @@ -6054,7 +6054,7 @@ F:        sound/soc/
> F:     include/sound/soc*
>
> SPARC + UltraSPARC (sparc/sparc64)
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> L:     sparclinux@vger.kernel.org
> Q:     http://patchwork.ozlabs.org/project/sparclinux/list/
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
> @@ -6064,7 +6064,7 @@ F:        arch/sparc/
> F:     drivers/sbus/
>
> SPARC SERIAL DRIVERS
> -M:     "David S. Miller" <davem@davemloft.net>
> +M:     David S. Miller <davem@davemloft.net>
> L:     sparclinux@vger.kernel.org
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
> @@ -6349,7 +6349,7 @@ F:        drivers/sh/
> SUSPEND TO RAM
> M:     Len Brown <len.brown@intel.com>
> M:     Pavel Machek <pavel@ucw.cz>
> -M:     "Rafael J. Wysocki" <rjw@sisk.pl>
> +M:     Rafael J. Wysocki <rjw@sisk.pl>
> L:     linux-pm@vger.kernel.org
> S:     Supported
> F:     Documentation/power/
> @@ -6402,8 +6402,8 @@ F:        include/net/pkt_cls.h
> F:     net/sched/
>
> TCP LOW PRIORITY MODULE
> -M:     "Wong Hoi Sing, Edison" <hswong3i@gmail.com>
> -M:     "Hung Hing Lun, Mike" <hlhung3i@gmail.com>
> +M:     Wong Hoi Sing, Edison <hswong3i@gmail.com>
> +M:     Hung Hing Lun, Mike <hlhung3i@gmail.com>
> W:     http://tcp-lp-mod.sourceforge.net/
> S:     Maintained
> F:     net/ipv4/tcp_lp.c
> @@ -6586,7 +6586,7 @@ F:        Documentation/networking/tuntap.txt
> F:     arch/um/os-Linux/drivers/
>
> TURBOCHANNEL SUBSYSTEM
> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> S:     Maintained
> F:     drivers/tc/
> F:     include/linux/tc.h
> @@ -6983,7 +6983,7 @@ F:        fs/hostfs/
> F:     fs/hppfs/
>
> USERSPACE I/O (UIO)
> -M:     "Hans J. Koch" <hjk@hansjkoch.de>
> +M:     Hans J. Koch <hjk@hansjkoch.de>
> M:     Greg Kroah-Hartman <gregkh@suse.de>
> S:     Maintained
> F:     Documentation/DocBook/uio-howto.tmpl
> @@ -7029,7 +7029,7 @@ F:        include/linux/virtio_console.h
>
> VIRTIO CORE, NET AND BLOCK DRIVERS
> M:     Rusty Russell <rusty@rustcorp.com.au>
> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> +M:     Michael S. Tsirkin <mst@redhat.com>
> L:     virtualization@lists.linux-foundation.org
> S:     Maintained
> F:     drivers/virtio/
> @@ -7038,7 +7038,7 @@ F:        drivers/block/virtio_blk.c
> F:     include/linux/virtio_*.h
>
> VIRTIO HOST (VHOST)
> -M:     "Michael S. Tsirkin" <mst@redhat.com>
> +M:     Michael S. Tsirkin <mst@redhat.com>
> L:     kvm@vger.kernel.org
> L:     virtualization@lists.linux-foundation.org
> L:     netdev@vger.kernel.org
> @@ -7096,7 +7096,7 @@ F:        include/linux/vlynq.h
>
> VMWARE VMXNET3 ETHERNET DRIVER
> M:     Shreyas Bhatewara <sbhatewara@vmware.com>
> -M:     "VMware, Inc." <pv-drivers@vmware.com>
> +M:     VMware, Inc. <pv-drivers@vmware.com>
> L:     netdev@vger.kernel.org
> S:     Maintained
> F:     drivers/net/vmxnet3/
> @@ -7293,7 +7293,7 @@ F:        net/x25/
> X86 ARCHITECTURE (32-BIT AND 64-BIT)
> M:     Thomas Gleixner <tglx@linutronix.de>
> M:     Ingo Molnar <mingo@redhat.com>
> -M:     "H. Peter Anvin" <hpa@zytor.com>
> +M:     H. Peter Anvin <hpa@zytor.com>
> M:     x86@kernel.org
> T:     git git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
> S:     Maintained
> @@ -7412,7 +7412,7 @@ S:        Odd Fixes
> F:     drivers/media/video/zoran/
>
> ZS DECSTATION Z85C30 SERIAL DRIVER
> -M:     "Maciej W. Rozycki" <macro@linux-mips.org>
> +M:     Maciej W. Rozycki <macro@linux-mips.org>
> S:     Maintained
> F:     drivers/tty/serial/zs.*
>
> --
> 1.7.4.4
>

Adding lkml and netdev mailing lists...

The reason these names are in quotes is because they need to be wrapped in quotes when used in a git patch (I.e. CC: "David S. Miller" <davem@davemloft.net>) because of the . in the friendly name.

^ permalink raw reply

* Re: [PATCH v6 5/8] SUNRPC: cleanup service destruction
From: J. Bruce Fields @ 2011-10-27 21:30 UTC (permalink / raw)
  To: Stanislav Kinsbursky
  Cc: Trond.Myklebust, linux-nfs, xemul, neilb, netdev, linux-kernel,
	davem, devel
In-Reply-To: <20111025101716.12689.81697.stgit@localhost6.localdomain6>

On Tue, Oct 25, 2011 at 02:17:18PM +0300, Stanislav Kinsbursky wrote:
> svc_unregister() call have to be removed from svc_destroy() since it will be
> called in sv_shutdown callback.

It would be clearer that you're *moving* this if this were merged with
the following patch.  And without doing that the series isn't quite
bisectable, unless I'm missing something.

--b.

> 
> Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
> 
> ---
>  net/sunrpc/svc.c |    1 -
>  1 files changed, 0 insertions(+), 1 deletions(-)
> 
> diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
> index 918edc3..407462f 100644
> --- a/net/sunrpc/svc.c
> +++ b/net/sunrpc/svc.c
> @@ -530,7 +530,6 @@ svc_destroy(struct svc_serv *serv)
>  	if (svc_serv_is_pooled(serv))
>  		svc_pool_map_put();
>  
> -	svc_unregister(serv);
>  	kfree(serv->sv_pools);
>  	kfree(serv);
>  }
> 

^ permalink raw reply

* Re: [PATCH v6 4/8] SUNRPC: setup rpcbind clients if service requires it
From: J. Bruce Fields @ 2011-10-27 21:27 UTC (permalink / raw)
  To: Stanislav Kinsbursky
  Cc: Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA,
	linux-nfs-u79uwXL29TY76Z2rM5mHXA, xemul-bzQdu9zFT3WakBO8gow8eQ,
	neilb-l3A5Bk7waGM, netdev-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	devel-GEFAQzZX7r8dnm+yROfE0A
In-Reply-To: <20111025101705.12689.68022.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>

On Tue, Oct 25, 2011 at 02:17:08PM +0300, Stanislav Kinsbursky wrote:
> New function ("svc_uses_rpcbind") will be used to detect, that new service will
> send portmapper register calls. For such services we will create rpcbind
> clients and remove all stale portmap registrations.
> Also, svc_rpcb_cleanup() will be set as sv_shutdown callback for such services
> in case of this field wasn't initialized earlier. This will allow to destroy
> rpcbind clients when no other users of them left.
> 
> Note: Currently, any creating service will be detected as portmap user.
> Probably, this is wrong. But now it depends on program versions "vs_hidden"
> flag.
> 
> Signed-off-by: Stanislav Kinsbursky <skinsbursky-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
> 
> ---
>  net/sunrpc/svc.c |   11 +++++++++--
>  1 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
> index d2d61bf..918edc3 100644
> --- a/net/sunrpc/svc.c
> +++ b/net/sunrpc/svc.c
> @@ -454,8 +454,15 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
>  		spin_lock_init(&pool->sp_lock);
>  	}
>  
> -	/* Remove any stale portmap registrations */
> -	svc_unregister(serv);
> +	if (svc_uses_rpcbind(serv)) {
> +	       	if (svc_rpcb_setup(serv) < 0) {
> +			kfree(serv->sv_pools);
> +			kfree(serv);
> +			return NULL;

Nit: could we convert this (and the previous failure to allocate
sv_pools) to the usual pattern of collecting the cleanup at the end and
jumping to it with a goto?

Looks fine otherwise.

--b.

> +		}
> +		if (!serv->sv_shutdown)
> +			serv->sv_shutdown = svc_rpcb_cleanup;
> +	}
>  
>  	return serv;
>  }
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH 2/2 v3] net/smsc911x: Add regulator support
From: Mike Frysinger @ 2011-10-27 20:59 UTC (permalink / raw)
  To: Mark Brown
  Cc: Linus Walleij, netdev, Steve Glendinning, Mathieu Poirer,
	Robert Marklund, Paul Mundt, linux-sh, Sascha Hauer,
	Tony Lindgren, linux-omap, uclinux-dist-devel, Linus Walleij
In-Reply-To: <20111027154638.GA16946@sirena.org.uk>

On Thu, Oct 27, 2011 at 17:46, Mark Brown wrote:
> On Thu, Oct 27, 2011 at 03:21:47PM +0200, Mike Frysinger wrote:
>> my gut reaction: smsc911x is working just fine without regulator
>> support for many people, so why do we suddenly need to make it a
>> requirement ?  this is a fairly small amount of code, so adding a
>> smsc911x Kconfig symbol to control the regulator support seems like
>> overkill.  only other option would be to change the patch to not make
>> missing regulators non-fatal.  so i'd probably lean towards the latter
>> (and it sounds like you changed this with earlier versions).
>
> The regulator API contains a series of generic facilities for stubbing
> itself out when not in use - there's no need for individual drivers to
> worry about this stuff, they should just rely on the framework.  The
> main one at the minute is REGULATOR_DUMMY which does what you suggest
> and makes regulator_get() never fail.

i saw that !CONFIG_REGULATOR works great.  my concern is that these
boards don't define any regulators for smsc resources, so if
CONFIG_REGULATOR is enabled to test out unrelated daughter cards, i
don't want the network driver suddenly failing.  Linus' comments
suggest that this is what would happen unless each board file has its
smsc platform resources extended.  maybe i misunderstood what he was saying ?
-mike

^ permalink raw reply

* Re: [PATCH v3 0/3] SUNRPC: rcbind clients virtualization
From: J. Bruce Fields @ 2011-10-27 20:25 UTC (permalink / raw)
  To: Stanislav Kinsbursky
  Cc: Trond.Myklebust, linux-nfs, xemul, neilb, netdev, linux-kernel,
	davem, devel
In-Reply-To: <20111027180824.20459.23219.stgit@localhost6.localdomain6>

On Thu, Oct 27, 2011 at 10:10:43PM +0300, Stanislav Kinsbursky wrote:
> v3:
> 1) First two patches from previous version were squashed.
> 
> This patch-set was created in context of clone of git branch:
> git://git.linux-nfs.org/projects/trondmy/nfs-2.6.git
> and rebased on tag "v3.1".
> 
> This patch-set virtualizes rpcbind clients per network namespace context. IOW,
> each network namespace will have its own pair of rpcbind clients (if they would
> be created by request).
> 
> Note:
> 1) this patch-set depends on "SUNRPC: make rpcbind clients allocated and
> destroyed dynamically" patch-set which has been send earlier.
> 2) init_net pointer is still used instead of current->nsproxy->net_ns,
> because I'm not sure yet about how to virtualize services. I.e. NFS callback
> services will be per netns. NFSd service will be per netns too from my pow. But
> Lockd can be per netns or one for all.

I'm not sure what you mean by that; could you explain?

--b.

> And also we have NFSd file system, which
> is not virtualized yet.
> 
> The following series consists of:
> 
> ---
> 
> Stanislav Kinsbursky (3):
>       SUNRPC: move rpcbind internals to sunrpc part of network namespace context
>       SUNRPC: optimize net_ns dereferencing in rpcbind creation calls
>       SUNRPC: optimize net_ns dereferencing in rpcbind registering calls
> 
> 
>  net/sunrpc/netns.h     |    5 ++
>  net/sunrpc/rpcb_clnt.c |  103 ++++++++++++++++++++++++++----------------------
>  2 files changed, 61 insertions(+), 47 deletions(-)
> 
> -- 
> Signature

^ permalink raw reply

* Re: [net 0/7] bnx2x: driver and firmware fixes
From: David Miller @ 2011-10-27 20:20 UTC (permalink / raw)
  To: yanivr; +Cc: netdev
In-Reply-To: <1319728191-24938-1-git-send-email-yanivr@broadcom.com>

From: "Yaniv Rosner" <yanivr@broadcom.com>
Date: Thu, 27 Oct 2011 17:09:44 +0200

> The following patch series describe few link fixes and firmware update.
>  
> Please consider applying it to net.

All applied, thank you.

^ permalink raw reply

* [RFC PATCH 5/5] net: add FCLONE_SCRATCH use to ipv6 udp path
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: root, Neil Horman, David S. Miller
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

From: root <root@amd-dinar-01.lab.bos.redhat.com>

Like the ipv4 path, the ipv6 path can benefit from this change by taking
advantage of the unused space at the tail of an skbuffs data area.  Mark ipv6
udp multicast frames as being elligible for scratch fcloning.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
---
 net/ipv6/udp.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index f4ca0a5..dda6661 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -645,6 +645,8 @@ static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
 	int dif;
 	unsigned int i, count = 0;
 
+	skb_make_fclone_scratch(skb);
+
 	spin_lock(&hslot->lock);
 	sk = sk_nulls_head(&hslot->head);
 	dif = inet6_iif(skb);
-- 
1.7.6.4

^ permalink raw reply related

* [RFC PATCH 4/5] perf: add perf script to monitor efficiency increase in FCLONE_SCRATCH api
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: root, Neil Horman, David S. Miller
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

From: root <root@updev.think-freely.org>

Since the FCLONE_SCRATCH mehanism is opportunistic, gathering internally
fragmented memory when available, its beneficial to know how efficiently its
working, so that tuning can be implemented to optimize it.  This patch adds a
perf script to export data collected via the previously added tracepoints.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
---
 .../scripts/python/bin/net-fscratch-stats-record   |    4 +
 .../scripts/python/bin/net-fscratch-stats-report   |    4 +
 tools/perf/scripts/python/net-fscratch.py          |  198 ++++++++++++++++++++
 3 files changed, 206 insertions(+), 0 deletions(-)
 create mode 100644 tools/perf/scripts/python/bin/net-fscratch-stats-record
 create mode 100644 tools/perf/scripts/python/bin/net-fscratch-stats-report
 create mode 100644 tools/perf/scripts/python/net-fscratch.py

diff --git a/tools/perf/scripts/python/bin/net-fscratch-stats-record b/tools/perf/scripts/python/bin/net-fscratch-stats-record
new file mode 100644
index 0000000..7aae593
--- /dev/null
+++ b/tools/perf/scripts/python/bin/net-fscratch-stats-record
@@ -0,0 +1,4 @@
+#!/bin/bash
+perf record 	-e skb:skb_make_fclone_scratch -e skb:alloc_fscratch_skb \
+		-e napi:napi_schedule -e napi:napi_complete \
+		-e napi:napi_poll -e net:netif_receive_skb $@
diff --git a/tools/perf/scripts/python/bin/net-fscratch-stats-report b/tools/perf/scripts/python/bin/net-fscratch-stats-report
new file mode 100644
index 0000000..85bb867
--- /dev/null
+++ b/tools/perf/scripts/python/bin/net-fscratch-stats-report
@@ -0,0 +1,4 @@
+#!/bin/bash
+# description: display a process of packet and processing time
+
+perf script -s "$PERF_EXEC_PATH"/scripts/python/net-fscratch.py $@
diff --git a/tools/perf/scripts/python/net-fscratch.py b/tools/perf/scripts/python/net-fscratch.py
new file mode 100644
index 0000000..f9ae5c9
--- /dev/null
+++ b/tools/perf/scripts/python/net-fscratch.py
@@ -0,0 +1,198 @@
+# Display a process of packets and processed time.
+# It helps us to investigate networking or network device.
+#
+# options
+# tx: show only tx chart
+# rx: show only rx chart
+# dev=: show only thing related to specified device
+# debug: work with debug mode. It shows buffer status.
+
+import os
+import sys
+
+sys.path.append(os.environ['PERF_EXEC_PATH'] + \
+	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
+
+from perf_trace_context import *
+from Core import *
+from Util import *
+
+parent_skbs = {}
+
+total_parents=0
+total_children_avail=0
+total_children_used=0
+total_orphans=0
+
+IDX_FC_COUNT=0
+IDX_FC_KIDS=1
+
+STATE_START_TIMING=0
+STATE_TIMING=1
+STATE_COLLECT_TIMING=2
+STATE_RESET=3
+
+cpu_cycle_stats = {}
+cpu_total_stats = {}
+
+class cpuCycleStats():
+	def __init__(self):
+		self.start_rx_time = 0
+		self.end_rx_time = 0
+		self.state = STATE_RESET
+		self.total_rx_frames = 0
+
+class cpuTotalStats():
+	def __init__(self):
+		self.total_frames = 0
+		self.total_napi_time = 0
+		self.napi_sc_cycles = 0
+
+def gather_fclone_use_stats(stat):
+	global total_parents
+	global total_children_avail
+	global total_children_used
+
+	total_parents = total_parents+1
+	total_children_avail = total_children_avail + stat[IDX_FC_COUNT]
+	total_children_used = total_children_used + stat[IDX_FC_KIDS]
+
+# called from perf, when it finds a correspoinding event
+def skb__skb_make_fclone_scratch(event_name, context, common_cpu,
+ common_secs, common_nsecs, common_pid, common_comm,
+ skb, name, fccount):
+	global parent_skbs
+
+	if (skb in parent_skbs.keys()):
+		gather_fclone_use_stats(parent_skbs[skb])
+		parent_skbs[skb] = None
+
+	parent_skbs[skb] = [fccount, 0]
+
+def skb__alloc_fscratch_skb(event_name, context, common_cpu,
+	common_secs, common_nsecs, common_pid, common_comm,
+	parent, child):
+	global parent_skbs
+	global total_orphans
+
+	if (child == 0):
+		#We didn't have an fscratch_child to allocate
+		return
+
+	try:
+		parent_skbs[parent][IDX_FC_KIDS] += 1
+	except:
+		total_orphans += 1
+
+def napi__napi_schedule(event_name, context, common_cpu,
+	common_secs, common_nsecs, common_pid, common_comm,
+	napi, dev_name):
+	global cpu_cycle_stats
+
+	if (common_cpu in cpu_cycle_stats.keys()):
+		return;
+
+	cpu_cycle_stats[common_cpu] = cpuCycleStats()
+	cpu_cycle_stats[common_cpu].state = STATE_START_TIMING
+	return
+
+def napi__napi_complete(event_name, context, common_cpu,
+	common_secs, common_nsecs, common_pid, common_comm,
+	napi, dev_name):
+	global cpu_cycle_stats
+	global cpu_total_stats
+
+
+	if (common_cpu not in cpu_cycle_stats.keys()):
+		return
+
+	if (cpu_cycle_stats[common_cpu].state == STATE_TIMING):
+		cpu_cycle_stats[common_cpu].state = STATE_COLLECT_TIMING
+
+
+def napi__napi_poll(event_name, context, common_cpu,
+        common_secs, common_nsecs, common_pid, common_comm,
+        napi, dev_name):
+	global cpu_cycle_stats
+	global cpu_total_stats
+
+	if (common_cpu not in cpu_cycle_stats.keys()):
+		return
+
+
+	if (common_cpu not in cpu_total_stats.keys()):
+		cpu_total_stats[common_cpu] = cpuTotalStats()
+
+	state = cpu_cycle_stats[common_cpu].state
+
+	if (state == STATE_COLLECT_TIMING):
+		cpu_total_stats[common_cpu].napi_sc_cycles += 1
+
+	if (cpu_cycle_stats[common_cpu].end_rx_time == cpu_cycle_stats[common_cpu].start_rx_time):
+		cpu_cycle_stats[common_cpu].end_rx_time = common_nsecs
+
+	if ((state == STATE_COLLECT_TIMING) or (state == STATE_TIMING)):
+		if (cpu_cycle_stats[common_cpu].end_rx_time > cpu_cycle_stats[common_cpu].start_rx_time):
+			napi_time = cpu_cycle_stats[common_cpu].end_rx_time - cpu_cycle_stats[common_cpu].start_rx_time
+		else:
+			napi_time = cpu_cycle_stats[common_cpu].start_rx_time - cpu_cycle_stats[common_cpu].end_rx_time
+
+		if (napi_time == 0):
+			cpu_cycle_stats[common_cpu].total_rx_frames = 0
+
+		cpu_total_stats[common_cpu].total_frames += cpu_cycle_stats[common_cpu].total_rx_frames
+		cpu_total_stats[common_cpu].total_napi_time += napi_time
+		cpu_cycle_stats[common_cpu] = cpuCycleStats()
+		cpu_cycle_stats[common_cpu].state = STATE_START_TIMING
+
+
+def net__netif_receive_skb(event_name, context, common_cpu,
+        common_secs, common_nsecs, common_pid, common_comm,
+        skbaddr, len, name):
+	global cpu_cycle_stats
+
+	if (common_cpu not in cpu_cycle_stats.keys()):
+		return
+
+	if (cpu_cycle_stats[common_cpu].state == STATE_START_TIMING):
+		cpu_cycle_stats[common_cpu].state = STATE_TIMING
+		cpu_cycle_stats[common_cpu].start_rx_time = common_nsecs
+
+
+	if (cpu_cycle_stats[common_cpu].state == STATE_TIMING):
+		cpu_cycle_stats[common_cpu].total_rx_frames += 1
+		cpu_cycle_stats[common_cpu].end_rx_time = common_nsecs
+
+
+def trace_end():
+	global parent_skbs
+	global total_parents
+        global total_children_avail
+        global total_children_used
+	global total_orphans
+	global cpu_total_stats
+
+	for i in parent_skbs.keys():
+		gather_fclone_use_stats(parent_skbs[i])
+	try:
+		avg_offer_skb = str(total_children_avail / total_parents)
+		avg_used_skb = str(total_children_used / total_parents)
+	except:
+		avg_offer_skb = str(0)
+		avg_used_skb = str(0)
+
+	print "Performance report:"
+	print "Skbs marked as having scratch space available: " + str(total_parents)
+	print "Total fclone_scratch skb children available: " + str(total_children_avail)
+	print "Total fclone_scratch skb children used: " + str(total_children_used)
+	print "Total orphans: " + str(total_orphans)
+	print "Average number of scratch skbs available: " + avg_offer_skb
+	print "Average number of scratch skbs used: " + avg_used_skb
+	for i in cpu_total_stats.keys():
+		tframe = cpu_total_stats[i].total_frames
+		ttime = cpu_total_stats[i].total_napi_time
+		try:
+			print "CPU " + str(i) + " avg napi latency " + str(ttime/tframe) + " nsec/frame (" + str(ttime) + " " + str(tframe) + ")"
+		except:
+			print "CPU " + str(i) + " avg napi latency 0 usec/frame (" + str(ttime) + " " + str(tframe) + ")"
+		print "CPU " + str(i) + " napi sched/complete cycles: " + str(cpu_total_stats[i].napi_sc_cycles)
-- 
1.7.6.4

^ permalink raw reply related

* [RFC PATCH 3/5] net: Add & modify tracepoints to skb FCLONE_SCRATCH paths
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: Neil Horman, Neil Horman, David S. Miller
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

From: Neil Horman <nhorman@updev.think-freely.org>

Since skbs that are fcloned via the FCLONE_SCRATCH method are opportunistic, it
would be nice to have some feedback on how efficiently the path is acting.
These tracepoints provide the infrastructure needed to create perf scripts that
let us measure things like the number of skbs that are converted for
FCLONE_SCRATCH use, the number of scratch skbs that actually get
allocated, and the average per-packet time spent in the napi softirq context.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
---
 include/linux/skbuff.h      |   21 +--------------------
 include/trace/events/napi.h |   41 +++++++++++++++++++++++++++++++++++++++++
 include/trace/events/skb.h  |   41 +++++++++++++++++++++++++++++++++++++++++
 net/core/dev.c              |    2 ++
 net/core/skbuff.c           |   37 +++++++++++++++++++++++++++++++++----
 5 files changed, 118 insertions(+), 24 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index e04fa48..77e3605 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2540,26 +2540,7 @@ extern unsigned int skb_make_fclone_scratch(struct sk_buff *skb);
 /*
  * Allocates an skb out of our scratch space
  */
-static inline struct sk_buff *alloc_fscratch_skb(struct sk_buff *skb)
-{
-	struct skb_scr_control *sctl = skb_get_scratch_control(skb);
-	struct sk_buff *sskb;
-
-	BUG_ON(skb->fclone != SKB_FCLONE_SCRATCH);
-	BUG_ON(!sctl);
-	BUG_ON(sctl->owner != skb);
-	if (skb_queue_empty(&sctl->scr_skbs))
-		return NULL;
-
-	sskb = __skb_dequeue(&sctl->scr_skbs);
-
-	/*
-	 * Mark us as a scratch skb, so we get properly kfree-ed
-	 */
-	sskb->fclone = SKB_FCLONE_SCRATCH;
-
-	return sskb;
-}
+extern struct sk_buff *alloc_fscratch_skb(struct sk_buff *skb);
 
 #endif	/* __KERNEL__ */
 #endif	/* _LINUX_SKBUFF_H */
diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h
index 8fe1e93..5af5675 100644
--- a/include/trace/events/napi.h
+++ b/include/trace/events/napi.h
@@ -7,6 +7,7 @@
 #include <linux/netdevice.h>
 #include <linux/tracepoint.h>
 #include <linux/ftrace.h>
+#include <linux/kernel_stat.h>
 
 #define NO_DEV "(no_device)"
 
@@ -30,6 +31,46 @@ TRACE_EVENT(napi_poll,
 		__entry->napi, __get_str(dev_name))
 );
 
+TRACE_EVENT(napi_schedule,
+
+	TP_PROTO(struct napi_struct *napi),
+
+	TP_ARGS(napi),
+
+	TP_STRUCT__entry(
+		__field(	struct napi_struct *,	napi)
+		__string(	dev_name, napi->dev ? napi->dev->name : NO_DEV)
+	),
+
+	TP_fast_assign(
+		__entry->napi = napi;
+		__assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV);
+	),
+
+	TP_printk("napi schedule on napi struct %p for device %s",
+		__entry->napi, __get_str(dev_name))
+);
+
+TRACE_EVENT(napi_complete,
+
+	TP_PROTO(struct napi_struct *napi),
+
+	TP_ARGS(napi),
+
+	TP_STRUCT__entry(
+		__field(	struct napi_struct *,	napi)
+		__string(	dev_name, napi->dev ? napi->dev->name : NO_DEV)
+	),
+
+	TP_fast_assign(
+		__entry->napi = napi;
+		__assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV);
+	),
+
+	TP_printk("napi complete on napi struct %p for device %s",
+		__entry->napi, __get_str(dev_name))
+);
+
 #undef NO_DEV
 
 #endif /* _TRACE_NAPI_H_ */
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 0c68ae22..3b83438 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -69,6 +69,47 @@ TRACE_EVENT(skb_copy_datagram_iovec,
 	TP_printk("skbaddr=%p len=%d", __entry->skbaddr, __entry->len)
 );
 
+TRACE_EVENT(skb_make_fclone_scratch,
+
+	TP_PROTO(struct sk_buff *skb, int count),
+
+	TP_ARGS(skb, count),
+
+	TP_STRUCT__entry(
+		__field(	const struct sk_buff *,	skb)
+		__string(	name, skb->dev ? skb->dev->name : "unknown")
+		__field(	int,			fccount)
+	),
+
+	TP_fast_assign(
+		__entry->skb = skb;
+		__assign_str(name, skb->dev ? skb->dev->name : "unknown");
+		__entry->fccount = count;
+	),
+
+	TP_printk("skb= %p, dev=%s, count=%d", __entry->skb,
+		  __get_str(name), __entry->fccount)
+);
+
+TRACE_EVENT(alloc_fscratch_skb,
+
+	TP_PROTO(const struct sk_buff *parent, const struct sk_buff *child),
+
+	TP_ARGS(parent, child),
+
+	TP_STRUCT__entry(
+		__field(	const struct sk_buff *, parent)
+		__field(	const struct sk_buff *, child)
+	),
+
+	TP_fast_assign(
+		__entry->parent = parent;
+		__entry->child = child;
+	),
+
+	TP_printk("parent=%p, child=%p", __entry->parent, __entry->child)
+);
+
 #endif /* _TRACE_SKB_H */
 
 /* This part must be outside protection */
diff --git a/net/core/dev.c b/net/core/dev.c
index b7ba81a..1af4c02 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2579,6 +2579,7 @@ int weight_p __read_mostly = 64;            /* old backlog weight */
 static inline void ____napi_schedule(struct softnet_data *sd,
 				     struct napi_struct *napi)
 {
+	trace_napi_schedule(napi);
 	list_add_tail(&napi->poll_list, &sd->poll_list);
 	__raise_softirq_irqoff(NET_RX_SOFTIRQ);
 }
@@ -3829,6 +3830,7 @@ void __napi_complete(struct napi_struct *n)
 	BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
 	BUG_ON(n->gro_list);
 
+	trace_napi_complete(n);
 	list_del(&n->poll_list);
 	smp_mb__before_clear_bit();
 	clear_bit(NAPI_STATE_SCHED, &n->state);
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 6fdf1a7..0347446 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -3221,6 +3221,30 @@ void __skb_warn_lro_forwarding(const struct sk_buff *skb)
 }
 EXPORT_SYMBOL(__skb_warn_lro_forwarding);
 
+/*
+ * Allocates an skb out of our scratch space
+ */
+struct sk_buff *alloc_fscratch_skb(struct sk_buff *skb)
+{
+	struct skb_scr_control *sctl = skb_get_scratch_control(skb);
+	struct sk_buff *sskb = NULL;
+
+	BUG_ON(skb->fclone != SKB_FCLONE_SCRATCH);
+	BUG_ON(!sctl);
+	BUG_ON(sctl->owner != skb);
+
+	sskb = __skb_dequeue(&sctl->scr_skbs);
+
+	/*
+	 * Mark us as a scratch skb, so we get properly kfree-ed
+	 */
+	sskb->fclone = SKB_FCLONE_SCRATCH;
+
+	trace_alloc_fscratch_skb(skb, sskb);
+	return sskb;
+}
+EXPORT_SYMBOL(alloc_fscratch_skb);
+
 unsigned int skb_make_fclone_scratch(struct sk_buff *skb)
 {
 	size_t bufsz, totsz, scrsz, tmpsz;
@@ -3228,15 +3252,16 @@ unsigned int skb_make_fclone_scratch(struct sk_buff *skb)
 	struct sk_buff *scr_skb;
 	struct skb_shared_info *old_info;
 	bool format_tail = false;
+	int fclone_count = 0;
 
 	if (skb_shared(skb))
-		return 0;
+		goto out;
 
 	/*
 	 * Cant do scratch space on fcloned skbs
 	 */
 	if (skb->fclone)
-		return 0;
+		goto out;
 
 	if ((skb->end - skb->tail) > sizeof(struct skb_shared_info)) {
 		old_info = skb_shinfo(skb);
@@ -3257,7 +3282,7 @@ unsigned int skb_make_fclone_scratch(struct sk_buff *skb)
 		 sizeof(struct skb_shared_info);
 
 	if ((bufsz + sizeof(struct skb_scr_control)) >= totsz)
-		return 0;
+		goto out;
 
 	/*
 	 * And this is the leftover area, minus sizeof(int) to store the number
@@ -3278,6 +3303,10 @@ unsigned int skb_make_fclone_scratch(struct sk_buff *skb)
 
 	skb->fclone = SKB_FCLONE_SCRATCH;
 
-	return skb_queue_len(&sctl->scr_skbs);
+	fclone_count = skb_queue_len(&sctl->scr_skbs);
+out:
+	trace_skb_make_fclone_scratch(skb, fclone_count);
+	return fclone_count;
 
 }
+EXPORT_SYMBOL(skb_make_fclone_scratch);
-- 
1.7.6.4

^ permalink raw reply related

* [RFC PATCH 2/5] net: add FCLONE_SCRATCH use to ipv4 udp path
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: Neil Horman, Neil Horman, David S. Miller
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

From: Neil Horman <nhorman@updev.think-freely.org>

UDP v4 multicast in a multiple group listener workload is a heavy user of
skb_clone, which can lead to performance problems if memory is constrained and
frame reception rates are high.  Once in the udp path however, we can reserve
the unused storage of the udp datagram and allocate skbs from it quickly.
Modify the udp multicast receive path to reserve storage using the
FCLONE_SCRATCH api to make opportunistic use of this space.

Tested successfully by myself
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
---
 net/ipv4/udp.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index ebaa96b..e1c0b1e 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1489,7 +1489,6 @@ drop:
 	return -1;
 }
 
-
 static void flush_stack(struct sock **stack, unsigned int count,
 			struct sk_buff *skb, unsigned int final)
 {
@@ -1532,6 +1531,8 @@ static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
 	int dif;
 	unsigned int i, count = 0;
 
+	skb_make_fclone_scratch(skb);
+
 	spin_lock(&hslot->lock);
 	sk = sk_nulls_head(&hslot->head);
 	dif = skb->dev->ifindex;
-- 
1.7.6.4

^ permalink raw reply related

* [RFC PATCH 1/5] net: add SKB_FCLONE_SCRATCH API
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: Neil Horman, Neil Horman
In-Reply-To: <1319745221-30880-1-git-send-email-nhorman@tuxdriver.com>

From: Neil Horman <nhorman@updev.think-freely.org>

The FCLONE api for skb allocation is nice in that it allows for the
pre-allocation of skbs when you know you will need additional clones.  A nice
addition to this api would be the ability to quickly allocate extra skbs when
needed without having to call into the slab allocator.  This API provides that
ability.  By using the internally fragmented space between the tail and end
pointer, and after the skb_shinfo space, we can opportunistically format this
space for use as extra sk_buff structures.  This allows for both fast
allocations in cases where skbs need to be cloned quickly (like in a multiple
multicast listener workload), and it does so without needing to allocate further
memory from the system, reducing overall memory demand.

There are rules when using this api however:

1) skbs that have their data reserved via this api become fixed, i.e. they can
no longer call skb_pull, or pskb_expand_tail

2) only a single skb can reserve the space.  The api assumes that the skb that
reserves the space is the owner, and only that skbs owning context will allocate
out of the shared area

Tested successfully by myself
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
---
 include/linux/skbuff.h |   51 +++++++++++++++++++++++++++++-
 net/core/skbuff.c      |   82 ++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 129 insertions(+), 4 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 6a6b352..e04fa48 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -258,7 +258,7 @@ struct skb_shared_info {
 	skb_frag_t	frags[MAX_SKB_FRAGS];
 };
 
-/* We divide dataref into two halves.  The higher 16 bits hold references
+/* We divide dataref two halves.  The higher 15 bits hold references
  * to the payload part of skb->data.  The lower 16 bits hold references to
  * the entire skb->data.  A clone of a headerless skb holds the length of
  * the header in skb->hdr_len.
@@ -277,6 +277,7 @@ enum {
 	SKB_FCLONE_UNAVAILABLE,
 	SKB_FCLONE_ORIG,
 	SKB_FCLONE_CLONE,
+	SKB_FCLONE_SCRATCH,
 };
 
 enum {
@@ -2512,5 +2513,53 @@ static inline bool skb_is_recycleable(const struct sk_buff *skb, int skb_size)
 
 	return true;
 }
+
+struct skb_scr_control {
+	struct sk_buff_head scr_skbs;
+	struct sk_buff *owner;
+};
+
+/*
+ * gets our control data for the scratch area
+ */
+static inline struct skb_scr_control*
+	skb_get_scratch_control(struct sk_buff *skb)
+{
+	struct skb_scr_control *sctl;
+	sctl = (struct skb_scr_control *)((void *)skb_shinfo(skb) +
+					  sizeof(struct skb_shared_info));
+	return sctl;
+}
+
+/*
+ * Converts the scratch space of an skbs data area to a list of
+ * skbuffs.  Returns the number of additional skbs allocated
+ */
+extern unsigned int skb_make_fclone_scratch(struct sk_buff *skb);
+
+/*
+ * Allocates an skb out of our scratch space
+ */
+static inline struct sk_buff *alloc_fscratch_skb(struct sk_buff *skb)
+{
+	struct skb_scr_control *sctl = skb_get_scratch_control(skb);
+	struct sk_buff *sskb;
+
+	BUG_ON(skb->fclone != SKB_FCLONE_SCRATCH);
+	BUG_ON(!sctl);
+	BUG_ON(sctl->owner != skb);
+	if (skb_queue_empty(&sctl->scr_skbs))
+		return NULL;
+
+	sskb = __skb_dequeue(&sctl->scr_skbs);
+
+	/*
+	 * Mark us as a scratch skb, so we get properly kfree-ed
+	 */
+	sskb->fclone = SKB_FCLONE_SCRATCH;
+
+	return sskb;
+}
+
 #endif	/* __KERNEL__ */
 #endif	/* _LINUX_SKBUFF_H */
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index ca4db40..6fdf1a7 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -367,6 +367,7 @@ static void kfree_skbmem(struct sk_buff *skb)
 	atomic_t *fclone_ref;
 
 	switch (skb->fclone) {
+	case SKB_FCLONE_SCRATCH:
 	case SKB_FCLONE_UNAVAILABLE:
 		kmem_cache_free(skbuff_head_cache, skb);
 		break;
@@ -438,8 +439,16 @@ static void skb_release_all(struct sk_buff *skb)
 
 void __kfree_skb(struct sk_buff *skb)
 {
+	struct skb_scr_control *sctl;
+	bool need_free = (skb->fclone == SKB_FCLONE_SCRATCH);
+	if (need_free) {
+		sctl = skb_get_scratch_control(skb);
+		need_free = (sctl->owner == skb);
+	}
+
 	skb_release_all(skb);
-	kfree_skbmem(skb);
+	if (need_free)
+		kfree_skbmem(skb);
 }
 EXPORT_SYMBOL(__kfree_skb);
 
@@ -701,6 +710,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
 struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
 {
 	struct sk_buff *n;
+	atomic_t *fclone_ref;
 
 	if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
 		if (skb_copy_ubufs(skb, gfp_mask))
@@ -710,10 +720,15 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
 	n = skb + 1;
 	if (skb->fclone == SKB_FCLONE_ORIG &&
 	    n->fclone == SKB_FCLONE_UNAVAILABLE) {
-		atomic_t *fclone_ref = (atomic_t *) (n + 1);
+		fclone_ref = (atomic_t *) (n + 1);
 		n->fclone = SKB_FCLONE_CLONE;
 		atomic_inc(fclone_ref);
-	} else {
+	} else if (skb->fclone == SKB_FCLONE_SCRATCH)
+		n = alloc_fscratch_skb(skb);
+	else
+		n = NULL;
+
+	if (!n) {
 		n = kmem_cache_alloc(skbuff_head_cache, gfp_mask);
 		if (!n)
 			return NULL;
@@ -3205,3 +3220,64 @@ void __skb_warn_lro_forwarding(const struct sk_buff *skb)
 			   " while LRO is enabled\n", skb->dev->name);
 }
 EXPORT_SYMBOL(__skb_warn_lro_forwarding);
+
+unsigned int skb_make_fclone_scratch(struct sk_buff *skb)
+{
+	size_t bufsz, totsz, scrsz, tmpsz;
+	struct skb_scr_control *sctl;
+	struct sk_buff *scr_skb;
+	struct skb_shared_info *old_info;
+	bool format_tail = false;
+
+	if (skb_shared(skb))
+		return 0;
+
+	/*
+	 * Cant do scratch space on fcloned skbs
+	 */
+	if (skb->fclone)
+		return 0;
+
+	if ((skb->end - skb->tail) > sizeof(struct skb_shared_info)) {
+		old_info = skb_shinfo(skb);
+		skb->end = skb->tail;
+		memcpy(skb_shinfo(skb), old_info,
+		       sizeof(struct skb_shared_info));
+	}
+
+	/*
+	 * skb is ours, lets see how big the data area is
+	 */
+	totsz = ksize(skb->head);
+
+	/*
+	 * This is the used size of our data buffer
+	 */
+	bufsz = (skb_end_pointer(skb) - skb->head) +
+		 sizeof(struct skb_shared_info);
+
+	if ((bufsz + sizeof(struct skb_scr_control)) >= totsz)
+		return 0;
+
+	/*
+	 * And this is the leftover area, minus sizeof(int) to store the number
+	 * of scratch skbs we have
+	 */
+	scrsz = totsz - (bufsz + sizeof(struct skb_scr_control));
+
+	sctl = skb_get_scratch_control(skb);
+
+	sctl->owner = skb;
+	scr_skb = (struct sk_buff *)(sctl + 1);
+	__skb_queue_head_init(&sctl->scr_skbs);
+	for (tmpsz = sizeof(struct sk_buff); tmpsz < scrsz;
+	    tmpsz += sizeof(struct sk_buff)) {
+		__skb_queue_tail(&sctl->scr_skbs, scr_skb);
+		scr_skb++;
+	}
+
+	skb->fclone = SKB_FCLONE_SCRATCH;
+
+	return skb_queue_len(&sctl->scr_skbs);
+
+}
-- 
1.7.6.4

^ permalink raw reply related

* Introduce FCLONE_SCRATCH skbs to reduce stack memory useage and napi jitter
From: Neil Horman @ 2011-10-27 19:53 UTC (permalink / raw)
  To: netdev; +Cc: Neil Horman, David S. Miller


I had this idea awhile ago while I was looking at the receive path for multicast
frames.   The top of the mcast recieve path (in __udp4_lib_mcast_deliver, has a
loop in which we traverse a hash list linearly, looking for sockets that are
listening to a given multicast group.  For each matching socket we clone the skb
to enqueue it to the corresponding socket.  This creates two problems:

1) Application driven jitter in the receive path
   As you add processes that listen to the same multcast group, you increase the
number of iterations you have to preform in this loop, which can lead to
increases in the amount of time you spend processing each frame in softirq
context, expecially if you are memory constrained, and the skb_clone operation
has to call all the way back into the buddy allocator for more ram.  This can
lead to needlessly dropped frames as rx latency increases in the stack.

2) Increased memory usage
   As you increase the number of listeners to a multicast group, you directly
increase the number of times you clone and skb, putting increased memory
pressure on the system.

while neither of these problems is a huge concern, I thought it would be nice if
we could mitigate the effects of increased application instances on performance
in this area.  As such I came up with this patch set.  I created a new skb
fclone type called FCLONE_SCRATCH.  When available, it commandeers the
internally fragmented space of an skb data buffer and uses that to allocate
additional skbs during the clone operation. Since the skb->data area is
allocated with a kmalloc operation (and is therefore nominally a power of 2 in
size), and nominally network interfaces tend to have an mtu of around 1500
bytes, we typically can reclaim several hundred bytes of space at the end of an
skb (more if the incomming packet is not a full MTU in size).  This space, being
exclusively accessible to the softirq doing the reclaim, can be quickly accesed
without the need for additional locking, potntially providing lower jitter in
napi context per frame during a receive operation, as well as some memory
savings.

I'm still collecting stats on its performance, but I thought I would post now to
get some early reviews and feedback on it.

Thanks & Regards
Neil

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
 

^ permalink raw reply

* [PATCH v3 3/3] SUNRPC: optimize net_ns dereferencing in rpcbind registering calls
From: Stanislav Kinsbursky @ 2011-10-27 19:30 UTC (permalink / raw)
  To: Trond.Myklebust
  Cc: linux-nfs, xemul, neilb, netdev, linux-kernel, bfields, davem,
	devel
In-Reply-To: <20111027180824.20459.23219.stgit@localhost6.localdomain6>

Static rpcbind registering functions can be parametrized by network namespace
pointer, calculated only once, instead of using init_net pointer (or taking it
from current when virtualization will be comleted) in many places.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>

---
 net/sunrpc/rpcb_clnt.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 8c873a8..cc0f402 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -451,14 +451,14 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned short port)
 /*
  * Fill in AF_INET family-specific arguments to register
  */
-static int rpcb_register_inet4(const struct sockaddr *sap,
+static int rpcb_register_inet4(struct sunrpc_net *sn,
+			       const struct sockaddr *sap,
 			       struct rpc_message *msg)
 {
 	const struct sockaddr_in *sin = (const struct sockaddr_in *)sap;
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin->sin_port);
 	int result;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	map->r_addr = rpc_sockaddr2uaddr(sap);
 
@@ -479,14 +479,14 @@ static int rpcb_register_inet4(const struct sockaddr *sap,
 /*
  * Fill in AF_INET6 family-specific arguments to register
  */
-static int rpcb_register_inet6(const struct sockaddr *sap,
+static int rpcb_register_inet6(struct sunrpc_net *sn,
+			       const struct sockaddr *sap,
 			       struct rpc_message *msg)
 {
 	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sap;
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin6->sin6_port);
 	int result;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	map->r_addr = rpc_sockaddr2uaddr(sap);
 
@@ -504,10 +504,10 @@ static int rpcb_register_inet6(const struct sockaddr *sap,
 	return result;
 }
 
-static int rpcb_unregister_all_protofamilies(struct rpc_message *msg)
+static int rpcb_unregister_all_protofamilies(struct sunrpc_net *sn,
+					     struct rpc_message *msg)
 {
 	struct rpcbind_args *map = msg->rpc_argp;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	dprintk("RPC:       unregistering [%u, %u, '%s'] with "
 		"local rpcbind\n",
@@ -580,13 +580,13 @@ int rpcb_v4_register(const u32 program, const u32 version,
 		return -EPROTONOSUPPORT;
 
 	if (address == NULL)
-		return rpcb_unregister_all_protofamilies(&msg);
+		return rpcb_unregister_all_protofamilies(sn, &msg);
 
 	switch (address->sa_family) {
 	case AF_INET:
-		return rpcb_register_inet4(address, &msg);
+		return rpcb_register_inet4(sn, address, &msg);
 	case AF_INET6:
-		return rpcb_register_inet6(address, &msg);
+		return rpcb_register_inet6(sn, address, &msg);
 	}
 
 	return -EAFNOSUPPORT;

^ permalink raw reply related

* [PATCH v3 2/3] SUNRPC: optimize net_ns dereferencing in rpcbind creation calls
From: Stanislav Kinsbursky @ 2011-10-27 19:11 UTC (permalink / raw)
  To: Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA
  Cc: linux-nfs-u79uwXL29TY76Z2rM5mHXA, xemul-bzQdu9zFT3WakBO8gow8eQ,
	neilb-l3A5Bk7waGM, netdev-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	bfields-uC3wQj2KruNg9hUCZPvPmw, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	devel-GEFAQzZX7r8dnm+yROfE0A
In-Reply-To: <20111027180824.20459.23219.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>

Static rpcbind creation functions can be parametrized by network namespace
pointer, calculated only once, instead of using init_net pointer (or taking it
from current when virtualization will be comleted) in many places.

Signed-off-by: Stanislav Kinsbursky <skinsbursky-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>

---
 net/sunrpc/rpcb_clnt.c |   35 +++++++++++++++++++----------------
 1 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 59bd1fb..8c873a8 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -161,10 +161,10 @@ static void rpcb_map_release(void *data)
 	kfree(map);
 }
 
-static int rpcb_get_local(void)
+static int rpcb_get_local(struct net *net)
 {
 	int cnt;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
+	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
 
 	spin_lock(&sn->rpcb_clnt_lock);
 	if (sn->rpcb_users)
@@ -201,9 +201,10 @@ void rpcb_put_local(void)
 	}
 }
 
-static void rpcb_set_local(struct rpc_clnt *clnt, struct rpc_clnt *clnt4)
+static void rpcb_set_local(struct net *net, struct rpc_clnt *clnt,
+			struct rpc_clnt *clnt4)
 {
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
+	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
 
 	/* Protected by rpcb_create_local_mutex */
 	sn->rpcb_local_clnt = clnt;
@@ -211,22 +212,23 @@ static void rpcb_set_local(struct rpc_clnt *clnt, struct rpc_clnt *clnt4)
 	smp_wmb(); 
 	sn->rpcb_users = 1;
 	dprintk("RPC:       created new rpcb local clients (rpcb_local_clnt: "
-			"%p, rpcb_local_clnt4: %p)\n", sn->rpcb_local_clnt,
-			sn->rpcb_local_clnt4);
+			"%p, rpcb_local_clnt4: %p) for net %p%s\n",
+			sn->rpcb_local_clnt, sn->rpcb_local_clnt4,
+			net, (net == &init_net) ? " (init_net)" : "");
 }
 
 /*
  * Returns zero on success, otherwise a negative errno value
  * is returned.
  */
-static int rpcb_create_local_unix(void)
+static int rpcb_create_local_unix(struct net *net)
 {
 	static const struct sockaddr_un rpcb_localaddr_rpcbind = {
 		.sun_family		= AF_LOCAL,
 		.sun_path		= RPCBIND_SOCK_PATHNAME,
 	};
 	struct rpc_create_args args = {
-		.net		= &init_net,
+		.net		= net,
 		.protocol	= XPRT_TRANSPORT_LOCAL,
 		.address	= (struct sockaddr *)&rpcb_localaddr_rpcbind,
 		.addrsize	= sizeof(rpcb_localaddr_rpcbind),
@@ -259,7 +261,7 @@ static int rpcb_create_local_unix(void)
 		clnt4 = NULL;
 	}
 
-	rpcb_set_local(clnt, clnt4);
+	rpcb_set_local(net, clnt, clnt4);
 
 out:
 	return result;
@@ -269,7 +271,7 @@ out:
  * Returns zero on success, otherwise a negative errno value
  * is returned.
  */
-static int rpcb_create_local_net(void)
+static int rpcb_create_local_net(struct net *net)
 {
 	static const struct sockaddr_in rpcb_inaddr_loopback = {
 		.sin_family		= AF_INET,
@@ -277,7 +279,7 @@ static int rpcb_create_local_net(void)
 		.sin_port		= htons(RPCBIND_PORT),
 	};
 	struct rpc_create_args args = {
-		.net		= &init_net,
+		.net		= net,
 		.protocol	= XPRT_TRANSPORT_TCP,
 		.address	= (struct sockaddr *)&rpcb_inaddr_loopback,
 		.addrsize	= sizeof(rpcb_inaddr_loopback),
@@ -311,7 +313,7 @@ static int rpcb_create_local_net(void)
 		clnt4 = NULL;
 	}
 
-	rpcb_set_local(clnt, clnt4);
+	rpcb_set_local(net, clnt, clnt4);
 
 out:
 	return result;
@@ -325,16 +327,17 @@ int rpcb_create_local(void)
 {
 	static DEFINE_MUTEX(rpcb_create_local_mutex);
 	int result = 0;
+	struct net *net = &init_net;
 
-	if (rpcb_get_local())
+	if (rpcb_get_local(net))
 		return result;
 
 	mutex_lock(&rpcb_create_local_mutex);
-	if (rpcb_get_local())
+	if (rpcb_get_local(net))
 		goto out;
 
-	if (rpcb_create_local_unix() != 0)
-		result = rpcb_create_local_net();
+	if (rpcb_create_local_unix(net) != 0)
+		result = rpcb_create_local_net(net);
 
 out:
 	mutex_unlock(&rpcb_create_local_mutex);

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related

* [PATCH v3 1/3] SUNRPC: move rpcbind internals to sunrpc part of network namespace context
From: Stanislav Kinsbursky @ 2011-10-27 19:11 UTC (permalink / raw)
  To: Trond.Myklebust
  Cc: linux-nfs, xemul, neilb, netdev, linux-kernel, bfields, davem,
	devel
In-Reply-To: <20111027180824.20459.23219.stgit@localhost6.localdomain6>

This patch makes rpcbind logic works in network namespace context. IOW each
network namespace will have it's own unique rpcbind internals (clients and
friends) which is required for registering svc services per network namespace.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>

---
 net/sunrpc/netns.h     |    5 ++++
 net/sunrpc/rpcb_clnt.c |   64 ++++++++++++++++++++++++++----------------------
 2 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h
index d013bf2..83eede3 100644
--- a/net/sunrpc/netns.h
+++ b/net/sunrpc/netns.h
@@ -9,6 +9,11 @@ struct cache_detail;
 struct sunrpc_net {
 	struct proc_dir_entry *proc_net_rpc;
 	struct cache_detail *ip_map_cache;
+
+	struct rpc_clnt *rpcb_local_clnt;
+	struct rpc_clnt *rpcb_local_clnt4;
+	spinlock_t rpcb_clnt_lock;
+	unsigned int rpcb_users;
 };
 
 extern int sunrpc_net_id;
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 983b74f..59bd1fb 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -23,12 +23,15 @@
 #include <linux/errno.h>
 #include <linux/mutex.h>
 #include <linux/slab.h>
+#include <linux/nsproxy.h>
 #include <net/ipv6.h>
 
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/sched.h>
 #include <linux/sunrpc/xprtsock.h>
 
+#include "netns.h"
+
 #ifdef RPC_DEBUG
 # define RPCDBG_FACILITY	RPCDBG_BIND
 #endif
@@ -111,12 +114,6 @@ static void			rpcb_getport_done(struct rpc_task *, void *);
 static void			rpcb_map_release(void *data);
 static struct rpc_program	rpcb_program;
 
-static struct rpc_clnt *	rpcb_local_clnt;
-static struct rpc_clnt *	rpcb_local_clnt4;
-
-DEFINE_SPINLOCK(rpcb_clnt_lock);
-unsigned int			rpcb_users;
-
 struct rpcbind_args {
 	struct rpc_xprt *	r_xprt;
 
@@ -167,29 +164,31 @@ static void rpcb_map_release(void *data)
 static int rpcb_get_local(void)
 {
 	int cnt;
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
-	spin_lock(&rpcb_clnt_lock);
-	if (rpcb_users)
-		rpcb_users++;
-	cnt = rpcb_users;
-	spin_unlock(&rpcb_clnt_lock);
+	spin_lock(&sn->rpcb_clnt_lock);
+	if (sn->rpcb_users)
+		sn->rpcb_users++;
+	cnt = sn->rpcb_users;
+	spin_unlock(&sn->rpcb_clnt_lock);
 
 	return cnt;
 }
 
 void rpcb_put_local(void)
 {
-	struct rpc_clnt *clnt = rpcb_local_clnt;
-	struct rpc_clnt *clnt4 = rpcb_local_clnt4;
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
+	struct rpc_clnt *clnt = sn->rpcb_local_clnt;
+	struct rpc_clnt *clnt4 = sn->rpcb_local_clnt4;
 	int shutdown;
 
-	spin_lock(&rpcb_clnt_lock);
-	if (--rpcb_users == 0) {
-		rpcb_local_clnt = NULL;
-		rpcb_local_clnt4 = NULL;
+	spin_lock(&sn->rpcb_clnt_lock);
+	if (--sn->rpcb_users == 0) {
+		sn->rpcb_local_clnt = NULL;
+		sn->rpcb_local_clnt4 = NULL;
 	}
-	shutdown = !rpcb_users;
-	spin_unlock(&rpcb_clnt_lock);
+	shutdown = !sn->rpcb_users;
+	spin_unlock(&sn->rpcb_clnt_lock);
 
 	if (shutdown) {
 		/*
@@ -204,14 +203,16 @@ void rpcb_put_local(void)
 
 static void rpcb_set_local(struct rpc_clnt *clnt, struct rpc_clnt *clnt4)
 {
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
+
 	/* Protected by rpcb_create_local_mutex */
-	rpcb_local_clnt = clnt;
-	rpcb_local_clnt4 = clnt4;
+	sn->rpcb_local_clnt = clnt;
+	sn->rpcb_local_clnt4 = clnt4;
 	smp_wmb(); 
-	rpcb_users = 1;
+	sn->rpcb_users = 1;
 	dprintk("RPC:       created new rpcb local clients (rpcb_local_clnt: "
-			"%p, rpcb_local_clnt4: %p)\n", rpcb_local_clnt,
-			rpcb_local_clnt4);
+			"%p, rpcb_local_clnt4: %p)\n", sn->rpcb_local_clnt,
+			sn->rpcb_local_clnt4);
 }
 
 /*
@@ -431,6 +432,7 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned short port)
 	struct rpc_message msg = {
 		.rpc_argp	= &map,
 	};
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	dprintk("RPC:       %sregistering (%u, %u, %d, %u) with local "
 			"rpcbind\n", (port ? "" : "un"),
@@ -440,7 +442,7 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned short port)
 	if (port)
 		msg.rpc_proc = &rpcb_procedures2[RPCBPROC_SET];
 
-	return rpcb_register_call(rpcb_local_clnt, &msg);
+	return rpcb_register_call(sn->rpcb_local_clnt, &msg);
 }
 
 /*
@@ -453,6 +455,7 @@ static int rpcb_register_inet4(const struct sockaddr *sap,
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin->sin_port);
 	int result;
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	map->r_addr = rpc_sockaddr2uaddr(sap);
 
@@ -465,7 +468,7 @@ static int rpcb_register_inet4(const struct sockaddr *sap,
 	if (port)
 		msg->rpc_proc = &rpcb_procedures4[RPCBPROC_SET];
 
-	result = rpcb_register_call(rpcb_local_clnt4, msg);
+	result = rpcb_register_call(sn->rpcb_local_clnt4, msg);
 	kfree(map->r_addr);
 	return result;
 }
@@ -480,6 +483,7 @@ static int rpcb_register_inet6(const struct sockaddr *sap,
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin6->sin6_port);
 	int result;
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	map->r_addr = rpc_sockaddr2uaddr(sap);
 
@@ -492,7 +496,7 @@ static int rpcb_register_inet6(const struct sockaddr *sap,
 	if (port)
 		msg->rpc_proc = &rpcb_procedures4[RPCBPROC_SET];
 
-	result = rpcb_register_call(rpcb_local_clnt4, msg);
+	result = rpcb_register_call(sn->rpcb_local_clnt4, msg);
 	kfree(map->r_addr);
 	return result;
 }
@@ -500,6 +504,7 @@ static int rpcb_register_inet6(const struct sockaddr *sap,
 static int rpcb_unregister_all_protofamilies(struct rpc_message *msg)
 {
 	struct rpcbind_args *map = msg->rpc_argp;
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 	dprintk("RPC:       unregistering [%u, %u, '%s'] with "
 		"local rpcbind\n",
@@ -508,7 +513,7 @@ static int rpcb_unregister_all_protofamilies(struct rpc_message *msg)
 	map->r_addr = "";
 	msg->rpc_proc = &rpcb_procedures4[RPCBPROC_UNSET];
 
-	return rpcb_register_call(rpcb_local_clnt4, msg);
+	return rpcb_register_call(sn->rpcb_local_clnt4, msg);
 }
 
 /**
@@ -566,8 +571,9 @@ int rpcb_v4_register(const u32 program, const u32 version,
 	struct rpc_message msg = {
 		.rpc_argp	= &map,
 	};
+	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
-	if (rpcb_local_clnt4 == NULL)
+	if (sn->rpcb_local_clnt4 == NULL)
 		return -EPROTONOSUPPORT;
 
 	if (address == NULL)

^ permalink raw reply related

* [PATCH v3 0/3] SUNRPC: rcbind clients virtualization
From: Stanislav Kinsbursky @ 2011-10-27 19:10 UTC (permalink / raw)
  To: Trond.Myklebust
  Cc: linux-nfs, xemul, neilb, netdev, linux-kernel, bfields, davem,
	devel

v3:
1) First two patches from previous version were squashed.

This patch-set was created in context of clone of git branch:
git://git.linux-nfs.org/projects/trondmy/nfs-2.6.git
and rebased on tag "v3.1".

This patch-set virtualizes rpcbind clients per network namespace context. IOW,
each network namespace will have its own pair of rpcbind clients (if they would
be created by request).

Note:
1) this patch-set depends on "SUNRPC: make rpcbind clients allocated and
destroyed dynamically" patch-set which has been send earlier.
2) init_net pointer is still used instead of current->nsproxy->net_ns,
because I'm not sure yet about how to virtualize services. I.e. NFS callback
services will be per netns. NFSd service will be per netns too from my pow. But
Lockd can be per netns or one for all. And also we have NFSd file system, which
is not virtualized yet.

The following series consists of:

---

Stanislav Kinsbursky (3):
      SUNRPC: move rpcbind internals to sunrpc part of network namespace context
      SUNRPC: optimize net_ns dereferencing in rpcbind creation calls
      SUNRPC: optimize net_ns dereferencing in rpcbind registering calls


 net/sunrpc/netns.h     |    5 ++
 net/sunrpc/rpcb_clnt.c |  103 ++++++++++++++++++++++++++----------------------
 2 files changed, 61 insertions(+), 47 deletions(-)

-- 
Signature

^ permalink raw reply

* Re: asix usb network driver: nfg
From: Mark Lord @ 2011-10-27 18:48 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, linux-kernel
In-Reply-To: <20111026.221719.2216112919297458522.davem@davemloft.net>

On 11-10-26 10:17 PM, David Miller wrote:
> From: Mark Lord <kernel@teksavvy.com>
> Date: Wed, 26 Oct 2011 21:23:15 -0400
> 
>> Any strong advance objections to replacing the in-kernel version
>> with a (fixed) vendor open source version?
> 
> It need to meet the coding etc. standards for inclusion, last
> time I looked at it their driver indeed need a bit of cleaning up.

Yeah, okay -- I've got approval to spend some paid time on the effort,
so I'll have a deeper look at things.

> It's a sad situation, they started with the upstream driver and
> just hacked on it however they pleased in their private copy.
> So now we have this huge divergance and no effort on their part
> to rectify things.

Will there be any issues with "Signed-Off-By" on this?
It's all GPL, by License, but we don't necessarily know who
make what changes to their driver since they forked it.
I don't think that matters much, but then what I think doesn't matter much
either. :)

But it is the only one of the two that's close to working
(and does work when DEBUG messages are enabled -- a timing issue
somewhere that I'll fix).

Thanks David.

^ permalink raw reply

* Re: Quick Fair Queue scheduler maturity and examples
From: Eric Dumazet @ 2011-10-27 16:27 UTC (permalink / raw)
  To: Karel Rericha; +Cc: netdev
In-Reply-To: <1319731732.2601.40.camel@edumazet-laptop>

Le jeudi 27 octobre 2011 à 18:08 +0200, Eric Dumazet a écrit :
> Le jeudi 27 octobre 2011 à 14:46 +0200, Karel Rericha a écrit :
> 
> > Actually I am doing some reseach to replace our main shaping machine
> > with 60 000+ htb classes, which now saturates 12 core Xeon Westmere to
> > 30% (there are five gigabit network ports on each interface affinited
> > to cores). AFAIK QFQ should be O(1) complexity so it would bring
> > saturation a requirements for number of cores down considerably (HTB
> > has O(log(N)) complexity).
> > 
> > I have test machine and about two months to decide if we will stay
> > with HTB or we will try something else. So it would be VERY helpful,
> > if you would search you memory instead your dead disk :-) and send me
> > some example of QFQ usage, if I can ask for a little of your time. I
> > promise to have results published here in return.
> > 
> > Thanks, Karel
> > 
> 
> That seems a good challenge to me ;)
> 
> First upgrade to a recent kernel with QFQ included.
> Also upgrade iproute2 to a recent enough version as well.
> 
> Then you discover "tc  ... qfq help" is not that helpful :(
> 
> # tc qdisc add dev eth3 root qfq help
> Usage: ... qfq
> 
> OK, its parameters are :
> 
> 	qfq weight num1 [maxpkt BYTES]
> 
> You should not touch maxpkt, its default value being 2048
> 
> Oh well, I just tried the obvious and my (remote) machine doesnt answer
> to me anymore...
> 
> Time for a bit of debugging I am afraid :(

Never mind, it was an user error :)

Here is what I used during my tests, I guess you can adapt your
scripts...

DEV=eth3
RATE="rate 40Mbit"
TNETS="10.2.2.0/25"
ALLOT="allot 20000"

tc qdisc del dev dummy0 root 2>/dev/null

tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 rate 1000Mbit \
	bandwidth 1000Mbit
tc class add dev $DEV parent 1: classid 1:1 \
	est 1sec 8sec cbq allot 10000 mpu 64 \
	rate 1000Mbit prio 1 avpkt 1500 bounded

# output to test nets :  40 Mbit limit
tc class add dev $DEV parent 1:1 classid 1:11 \
	est 1sec 8sec cbq $ALLOT mpu 64      \
	$RATE prio 2 avpkt 1400 bounded

tc qdisc add dev $DEV parent 1:11 handle 11:  \
	est 1sec 8sec qfq

tc filter add dev $DEV protocol ip parent 11: handle 3 \
	flow hash keys rxhash divisor 8

for i in `seq 1 8`
do
 classid=11:$(printf %x $i)
 tc class add dev $DEV classid $classid qfq 
 tc qdisc add dev $DEV parent $classid pfifo limit 30
done

for privnet in $TNETS
do
	tc filter add dev $DEV parent 1: protocol ip prio 100 u32 \
		match ip dst $privnet flowid 1:11
done

tc filter add dev $DEV parent 1: protocol ip prio 100 u32 \
	match ip protocol 0 0x00 flowid 1:1

iperf -u -c 10.2.2.1 -P 32 -l 50

^ permalink raw reply

* Re: Quick Fair Queue scheduler maturity and examples
From: Eric Dumazet @ 2011-10-27 16:08 UTC (permalink / raw)
  To: Karel Rericha; +Cc: netdev
In-Reply-To: <CAN==1Rq+WEcezLPNPNug2V11nftDkm2=aRKw95u_R8OPGxG72g@mail.gmail.com>

Le jeudi 27 octobre 2011 à 14:46 +0200, Karel Rericha a écrit :

> Actually I am doing some reseach to replace our main shaping machine
> with 60 000+ htb classes, which now saturates 12 core Xeon Westmere to
> 30% (there are five gigabit network ports on each interface affinited
> to cores). AFAIK QFQ should be O(1) complexity so it would bring
> saturation a requirements for number of cores down considerably (HTB
> has O(log(N)) complexity).
> 
> I have test machine and about two months to decide if we will stay
> with HTB or we will try something else. So it would be VERY helpful,
> if you would search you memory instead your dead disk :-) and send me
> some example of QFQ usage, if I can ask for a little of your time. I
> promise to have results published here in return.
> 
> Thanks, Karel
> 

That seems a good challenge to me ;)

First upgrade to a recent kernel with QFQ included.
Also upgrade iproute2 to a recent enough version as well.

Then you discover "tc  ... qfq help" is not that helpful :(

# tc qdisc add dev eth3 root qfq help
Usage: ... qfq

OK, its parameters are :

	qfq weight num1 [maxpkt BYTES]

You should not touch maxpkt, its default value being 2048

Oh well, I just tried the obvious and my (remote) machine doesnt answer
to me anymore...

Time for a bit of debugging I am afraid :(

^ permalink raw reply

* Re: [PATCH 2/2 v3] net/smsc911x: Add regulator support
From: Mark Brown @ 2011-10-27 15:46 UTC (permalink / raw)
  To: Mike Frysinger
  Cc: Linus Walleij, netdev, Steve Glendinning, Mathieu Poirer,
	Robert Marklund, Paul Mundt, linux-sh, Sascha Hauer,
	Tony Lindgren, linux-omap, uclinux-dist-devel, Linus Walleij
In-Reply-To: <CAJaTeTrzFwxsn22U-NHQ8iCiaUM+mj8PyicavR-DN0HgE08ZEQ@mail.gmail.com>

On Thu, Oct 27, 2011 at 03:21:47PM +0200, Mike Frysinger wrote:

> my gut reaction: smsc911x is working just fine without regulator
> support for many people, so why do we suddenly need to make it a
> requirement ?  this is a fairly small amount of code, so adding a
> smsc911x Kconfig symbol to control the regulator support seems like
> overkill.  only other option would be to change the patch to not make
> missing regulators non-fatal.  so i'd probably lean towards the latter
> (and it sounds like you changed this with earlier versions).

The regulator API contains a series of generic facilities for stubbing
itself out when not in use - there's no need for individual drivers to
worry about this stuff, they should just rely on the framework.  The
main one at the minute is REGULATOR_DUMMY which does what you suggest
and makes regulator_get() never fail.

^ permalink raw reply


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