30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

03 Mar, 2010

2 commits

  • The code does not implement the comment, so timestamps for long traces
    become confusing instead of wrapping neatly as expected. This was actually
    observed. Fortunately for API being in debugfs, we can just fix this instead
    of staying bug-for-bug compatible. Double fortunately, the stable binary
    API is not affected.

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     
  • Due to a simple oversight when bus zero was added, the text API fails to
    deliver the bus number in 'E' messages (which are equivalent of 'C'
    messages, only for error case). This makes it harder, for instance,
    use a search-and-highlight in a text editor. So fix it.

    Also, Alan Stern requested adding timestamps to 'E' messages. This is
    purely cosmetic, but makes it easier to read the trace. This is done
    for both text and binary APIs.

    Signed-off-by: Pete Zaitcev
    Cc: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

12 Dec, 2009

1 commit

  • This patch (as1301) adds support to usbmon for scatter-gather URBs.
    The text interface looks at only the first scatterlist element, since
    it never copies more than 32 bytes of data anyway. The binary
    interface copies as much data as possible up to the first
    non-addressable buffer.

    Signed-off-by: Alan Stern
    CC: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

18 Nov, 2009

1 commit

  • This patch (as1299b) fixes a bug in an error-handling path of usbmon's
    binary interface. The storage area for URB data is divided into
    fixed-size blocks. If an URB's data can't be copied, the area
    reserved for it should be decreased to the size of the truncated
    information (rounded up to a block boundary). Rounding up the amount
    to be removed and subtracting it from the reserved size is definitely
    the wrong thing to do.

    Also, when the data for an isochronous URB can't be copied, we can
    still copy the isoc packet descriptors. In fact the current code does
    copy the descriptors, but then sets the capture length to 0 so they
    remain inaccessible. The capture length should be reduced to the
    length of the descriptors, not set to 0.

    Signed-off-by: Alan Stern
    Acked-by: Pete Zaitcev
    CC: stable
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

28 Sep, 2009

1 commit


23 Sep, 2009

2 commits

  • This patch fixes crashes when usbmon attempts to access GART aperture.
    The old code attempted to take a bus address and convert it into a
    virtual address, which clearly was impossible on systems with actual
    IOMMUs. Let us not persist in this foolishness, and use transfer_buffer
    in all cases instead.

    I think downsides are negligible. The ones I see are:
    - A driver may pass an address of one buffer down as transfer_buffer,
    and entirely different entity mapped for DMA, resulting in misleading
    output of usbmon. Note, however, that PIO based controllers would
    do transfer the same data that usbmon sees here.
    - Out of tree drivers may crash usbmon if they store garbage in
    transfer_buffer. I inspected the in-tree drivers, and clarified
    the documentation in comments.
    - Drivers that use get_user_pages will not be possible to monitor.
    I only found one driver with this problem (drivers/staging/rspiusb).
    - Same happens with with usb_storage transferring from highmem, but
    it works fine on 64-bit systems, so I think it's not a concern.
    At least we don't crash anymore.

    Why didn't we do this in 2.6.10? That's because back in those days
    it was popular not to fill in transfer_buffer, so almost all
    traffic would be invisible (e.g. all of HID was like that).
    But now, the tree is almost 100% PIO friendly, so we can do the
    right thing at last.

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     
  • These statements seem to be unnecessary. No idea why, but I built all
    possible configurations and everything gets built just as before.

    It's an old patch that popped from discussion with Paul in November 2008.
    Obviously not a very high priority but better late than never.

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

07 Jul, 2009

1 commit

  • These warnings were observed on MIPS32 using 2.6.31-rc1 and gcc-4.2.0:

    mm/page_alloc.c: In function 'alloc_pages_exact':
    mm/page_alloc.c:1986: warning: passing argument 1 of 'virt_to_phys' makes pointer from integer without a cast

    drivers/usb/mon/mon_bin.c: In function 'mon_alloc_buff':
    drivers/usb/mon/mon_bin.c:1264: warning: passing argument 1 of 'virt_to_phys' makes pointer from integer without a cast

    [akpm@linux-foundation.org: fix kernel/perf_counter.c too]
    Signed-off-by: Kevin Cernekee
    Cc: Andi Kleen
    Cc: Ralf Baechle
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kevin Cernekee
     

16 Jun, 2009

1 commit


25 Mar, 2009

1 commit

  • This patch adds an extension to the binary API so it reaches parity with
    existing text API (so-called "1u"). The extension delivers additional data,
    such as ISO descriptors and the interrupt interval.

    Signed-Off-By: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

28 Jan, 2009

1 commit

  • Running a 32-bit usbmon(8) on 2.6.28-rc9 produces the following:
    ioctl32(usbmon:28563): Unknown cmd fd(3) cmd(400c9206){t:ffffff92;sz:12} arg(ffd3f458) on /dev/usbmon0

    It happens because the compatibility mode was implemented for 2.6.18
    and not updated for the fsops.compat_ioctl API.

    This patch relocates the pieces from under #ifdef CONFIG_COMPAT into
    compat_ioctl with no other changes except one new whitespace.

    Signed-off-by: Pete Zaitcev
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

08 Jan, 2009

1 commit

  • usbmon can only be built as a module if usbcore is a module too. Trivial
    changes to the relevant Kconfig and Makefile (and a few trivial changes
    elsewhere) allow usbmon to be built as a module even if usbcore is
    builtin.

    This is verified to work in all 9 permutations (3 correctly prohibited
    by Kconfig, 6 build a suitable result).

    Signed-off-by: Paul Bolle
    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

20 Nov, 2008

1 commit

  • There's a bug in the usbmon binary reader: When using read() to fetch
    the packets and a packet's data is partially read, the next read call
    will once again return up to len_cap bytes of data. The b_read counter
    is not regarded when determining the remaining chunk size.

    So, when dumping USB data with "cat /dev/usbmon0 > usbmon.trace" while
    reading from a USB storage device and analyzing the dump file
    afterwards it will get out of sync after a couple of packets.

    Signed-off-by: Ingo van Lil
    Signed-off-by: Pete Zaitcev
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

18 Oct, 2008

1 commit

  • usbmon registers the notifier chain, takes the bus lock and then goes to
    scan the existing devices for hooking up.

    Unfortunately, if usb_mon gets initialized while USB bus discovery is
    going on, it's possible that usbmon gets a notifier on one cpu (which runs
    without USB locks), and the scan is going on and also finds the new bus,
    resulting in a double sysfs registration, which then produces a WARNING.

    Pete Zaitcev did the bug diagnostics on this one

    Signed-off-by: Arjan van de Ven
    Acked-by: Pete Zaitcev
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Arjan van de Ven
     

17 Oct, 2008

1 commit


27 Jul, 2008

1 commit

  • Kmem cache passed to constructor is only needed for constructors that are
    themselves multiplexeres. Nobody uses this "feature", nor does anybody uses
    passed kmem cache in non-trivial way, so pass only pointer to object.

    Non-trivial places are:
    arch/powerpc/mm/init_64.c
    arch/powerpc/mm/hugetlbpage.c

    This is flag day, yes.

    Signed-off-by: Alexey Dobriyan
    Acked-by: Pekka Enberg
    Acked-by: Christoph Lameter
    Cc: Jon Tollefson
    Cc: Nick Piggin
    Cc: Matt Mackall
    [akpm@linux-foundation.org: fix arch/powerpc/mm/hugetlbpage.c]
    [akpm@linux-foundation.org: fix mm/slab.c]
    [akpm@linux-foundation.org: fix ubifs]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

22 Jul, 2008

2 commits


21 Jun, 2008

1 commit


25 Apr, 2008

3 commits


02 Feb, 2008

3 commits


17 Oct, 2007

1 commit

  • Slab constructors currently have a flags parameter that is never used. And
    the order of the arguments is opposite to other slab functions. The object
    pointer is placed before the kmem_cache pointer.

    Convert

    ctor(void *object, struct kmem_cache *s, unsigned long flags)

    to

    ctor(struct kmem_cache *s, void *object)

    throughout the kernel

    [akpm@linux-foundation.org: coupla fixes]
    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

13 Oct, 2007

5 commits


20 Jul, 2007

1 commit

  • Slab destructors were no longer supported after Christoph's
    c59def9f222d44bb7e2f0a559f2906191a0862d7 change. They've been
    BUGs for both slab and slub, and slob never supported them
    either.

    This rips out support for the dtor pointer from kmem_cache_create()
    completely and fixes up every single callsite in the kernel (there were
    about 224, not including the slab allocator definitions themselves,
    or the documentation references).

    Signed-off-by: Paul Mundt

    Paul Mundt
     

13 Jul, 2007

1 commit

  • Add a class which allows for an easier integration with udev.

    This code was originally written by Paolo Abeni, and arrived to my tree
    as a part of big patch to add binary API on December 18. As I understand,
    Paolo always meant the class to be a part of the whole thing. This is his
    udev rule to go along with the patch:

    KERNEL=="usbmon[0-9]*", NAME="usbmon%n", MODE="0440",OWNER="root",GROUP="bin"

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

09 May, 2007

1 commit


28 Apr, 2007

2 commits

  • Add the "bus zero" feature to the usbmon. If a user process specifies bus
    with number zero, it receives events from all buses. This is useful when
    we wish to see initial enumeration when a bus is created, typically after
    a modprobe. Until now, an application had to loop until a new bus could
    be open, then start capturing on it. This procedure was cumbersome and
    could lose initial events. Also, often it's too bothersome to find exactly
    to which bus a specific device is attached.

    Paolo Albeni provided the original concept implementation. I added the
    handling of "bus->monitored" flag and generally fixed it up.

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     
  • This patch adds a new text API, codenamed '1u', which captures more URB
    fields than old '1t' interface did. Also the '1u' text API is compatible
    with the future "bus zero" extension.

    Signed-off-by: Pete Zaitcev
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

24 Feb, 2007

1 commit

  • mon_bin_exit() and mon_text_exit() are called from __init code, so don't mark
    them as __exit.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Russell King
    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

08 Feb, 2007

1 commit

  • This patch adds a new, "binary" API in addition to the old, text API usbmon
    had before. The new API allows for less CPU use, and it allows to capture
    all data from a packet where old API only captured 32 bytes at most. There
    are some limitations and conditions to this, e.g. in case someone constructs
    a URB with 1GB of data, it's not likely to be captured, because even the
    huge buffers of the new reader are finite. Nonetheless, I expect this new
    capability to capture all data for all real life scenarios.

    The downside is, a special user mode application is required where cat(1)
    worked before. I have sample code at http://people.redhat.com/zaitcev/linux/
    and Paolo Abeni is working on patching libpcap.

    This patch was initially written by Paolo and later I tweaked it, and
    we had a little back-and-forth. So this is a jointly authored patch, but
    I am submitting this I am responsible for the bugs.

    Signed-off-by: Paolo Abeni
    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     

08 Dec, 2006

1 commit

  • Replace all uses of kmem_cache_t with struct kmem_cache.

    The patch was generated using the following script:

    #!/bin/sh
    #
    # Replace one string by another in all the kernel sources.
    #

    set -e

    for file in `find * -name "*.c" -o -name "*.h"|xargs grep -l $1`; do
    quilt add $file
    sed -e "1,\$s/$1/$2/g" $file >/tmp/$$
    mv /tmp/$$ $file
    quilt refresh
    done

    The script was run like this

    sh replace kmem_cache_t "struct kmem_cache"

    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter