27 Jul, 2010

14 commits

  • This adds nosy-dump, the userspace part of nosy, the IEEE 1394 traffic
    sniffer for Texas Instruments PCILynx/ PCILynx2 based cards. Author is
    Kristian Høgsberg.

    The files added here are taken from
    git://anongit.freedesktop.org/~krh/nosy commit ee29be97 (2009-11-10)
    with the following changes by Stefan Richter:
    - Parts pertaining to the kernel module removed from Makefile.
    - dist target removed from the Makefile.
    - Mentioned nosy-dump in the Kconfig help to nosy's kernel component.
    - Add copyright notice to nosy-dump.c. This is a duplicate of the
    respective notice in the kernel component nosy.c except for a time
    span of 2002 - 2006, according to Kristian's git log.

    "git shortlog decode-fcp.c list.h nosy-dump.[ch]" from nosy's git
    repository:

    Jonathan Woithe (1):
    Save logs on Ctrl-C

    Kristian Høgsberg (11):
    Pull over nosy from mercurial repo.
    Remove some fields from default view, add logging feature.
    Use infinite time out for poll(), mark more detail fields.
    Fix byte ordering macro.
    Add decoding of iso data and lock packets.
    Add flag to indicate data length field.
    Add cycle start packet decoding, add --iso and --cycle-start flags.
    Distinguish between phy-packets and 0-length iso data.
    Fix transaction and stats view.
    Add simple AV/C decoder.
    Don't break down on big payloads.

    Signed-off-by: Stefan Richter
    Acked-by: Kristian Høgsberg

    Stefan Richter
     
  • These are the ioctls for the special-purpose misc device /dev/nosy, the
    interface to the IEEE 1394 packet sniffer/ protocol analyzer driver.
    Currently only the numbers 00...02 are in use; let's block a few more
    for unforeseen use cases.

    Cc: Randy Dunlap
    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Replace home-grown printk wrapper macros by ones from kernel.h and
    device.h.

    Also raise the log level in set_phy_reg() from debug to error because
    these are really error conditions. Could even be WARN_ON. Lower the
    log level in the device probe and driver shutdown from notice to info.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • 1.) The DMA programs (struct pcl) are PCI-endian = little endian data
    (except for the 3rd quadlet in a PCL which the controller does not
    touch). Annotate them as such.

    Fix all accesses of the PCL to work with big endian CPUs also. Not
    actually tested, I only have a little endian PC to test with. This
    includes replacement of a bitfield struct pcl_status by open-coded
    shift and mask operations.

    2.) The two __attribute__ ((packed)) at struct pcl are not really
    required since it consists of u32/__le32 only, i.e. there will be no
    padding with or without the attribute.

    3.) The received IEEE 1394 data are byteswapped by the controller from
    IEEE 1394 endian = big endian to PCI endian = little endian because the
    PCL_BIGENDIAN control bit is set. Therefore annotate the DMA buffer as
    a __le32 array.

    Fix the one access of the DMA buffer (the check of the transaction code
    of link packets) to work with big endian CPUs. Also fix the two
    accesses of the client bounce buffer (the reading of packet length).

    4.) Add a comment to the userspace ABI header that all of the data gets
    out as little endian data, except for the timestamp which is CPU endian.
    (We could make it little endian too, but why? Vice versa, an ioctl
    could be added to dump packet data in big endian byte order...)

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Fix race between nosy_open() and remove_card() by replacing the
    unprotected array of card pointers by a mutex-protected list of cards.

    Make card instances reference-counted and let each client hold a
    reference.

    Notify clients about card removal via POLLHUP in poll()'s events
    bitmap; also let read() fail with errno=ENODEV if the card was removed
    and everything in the buffer was read.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • and add a missing pci_disable_device() to device shutdown.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Untested, I don't have a PCILynx CardBus card.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • nosy_start/stop_snoop() and nosy_add/remove_client() are simple enough
    to be inlined into their callers.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • nosy_start/stop_snoop() are always only called by the ioctl method, i.e.
    with IRQs enabled. packet_handler() and bus_reset_handler() are always
    only called by the IRQ handler. Hence neither one needs to track IRQ
    flags.

    To underline the call context of packet_handler() and
    bus_reset_handler(), rename these functions to *_irq_handler().

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • nosy_stop_snoop() would blow up the second time it was called without
    nosy_start_snoop() in between.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • The required serialization of NOSY_IOC_START and NOSY_IOC_STOP is
    already provided by the client_list_lock.

    NOSY_IOC_FILTER does not really require serialization since accesses
    to tcode_mask are atomic on any sane CPU architecture. Nevertheless,
    make it explicit that we want this to be atomic by means of
    client_list_lock (which also surrounds the other tcode_mask access in
    the IRQ handler). While we are at it, change the type of tcode_mask to
    u32 for consistency with the user API.

    NOSY_IOC_GET_STATS does not require serialization against itself. But
    there is a bug here regarding concurrent updates of the two counters
    by the IRQ handler. Fix it by taking the client_list_lock in this ioctl
    too.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Extend copyright note to 2007, c.f. Kristian's git log.

    Includes:
    - replace some by
    - add required indirectly included
    - order alphabetically

    Coding style related changes:
    - change to utf8
    - normalize whitespace
    - normalize comment style
    - remove usages of __FUNCTION__
    - remove an unnecessary cast from void *

    Const and static declarations:
    - driver_name is not const in pci_driver.name, drop const qualifier
    - driver_name can be taken from KBUILD_MODNAME
    - the global variable minors[] can and should be static
    - constify struct file_operations instance

    Data types:
    - Remove unused struct member struct packet.code. struct packet is
    only used for driver-internal bookkeeping; it does not appear on the
    wire or in DMA programs or the userspace ABI. Hence the unused
    member .code can be removed without worries.

    Preprocessor macros:
    - unroll a preprocessor macro that containd a return
    - use list_for_each_entry

    Printk:
    - add missing terminating \n in some format strings

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • This adds the traffic sniffer driver for Texas Instruments PCILynx/
    PCILynx2 based cards. The use cases for nosy are analysis of
    nonstandard protocols and as an aid in development of drivers,
    applications, or firmwares.

    Author of the driver is Kristian Høgsberg. Known contributers are
    Jody McIntyre and Jonathan Woithe.

    Nosy programs PCILynx chips to operate in promiscuous mode, which is a
    feature that is not found in OHCI-1394 controllers. Hence, only special
    hardware as mentioned in the Kconfig help text is suitable for nosy.

    This is only the kernelspace part of nosy. There is a userspace
    interface to it, called nosy-dump, proposed to be added into the tools/
    subdirectory of the kernel sources in a subsequent change. Kernelspace
    and userspave component of nosy communicate via a 'misc' character
    device file called /dev/nosy with a simple ioctl() and read() based
    protocol, as described by nosy-user.h.

    The files added here are taken from
    git://anongit.freedesktop.org/~krh/nosy commit ee29be97 (2009-11-10)
    with the following changes by Stefan Richter:
    - Kconfig and Makefile hunks are written from scratch.
    - Commented out version printk in nosy.c.
    - Included missing , reported by Stephen Rothwell.

    "git shortlog nosy{-user.h,.c,.h}" from nosy's git repository:

    Jonathan Woithe (2):
    Nosy updates for recent kernels
    Fix uninitialised memory (needed for 2.6.31 kernel)

    Kristian Høgsberg (5):
    Pull over nosy from mercurial repo.
    Use a misc device instead.
    Add simple AV/C decoder.
    Don't break down on big payloads.
    Set parent device for misc device.

    As a low-level IEEE 1394 driver, its files are placed into
    drivers/firewire/ although nosy is not part of the firewire driver
    stack.

    I am aware of the following literature from Texas Instruments about
    PCILynx programming:
    SCPA020A - PCILynx 1394 to PCI Bus Interface TSB12LV21BPGF
    Functional Specification
    SLLA023 - Initialization and Asynchronous Programming of the
    TSB12LV21A 1394 Device

    Signed-off-by: Stefan Richter
    Acked-by: Kristian Høgsberg

    Stefan Richter
     

17 May, 2010

3 commits


16 May, 2010

12 commits

  • Now we have a set of nested attributes:

    IFLA_VFINFO_LIST (NESTED)
    IFLA_VF_INFO (NESTED)
    IFLA_VF_MAC
    IFLA_VF_VLAN
    IFLA_VF_TX_RATE

    This allows a single set to operate on multiple attributes if desired.
    Among other things, it means a dump can be replayed to set state.

    The current interface has yet to be released, so this seems like
    something to consider for 2.6.34.

    Signed-off-by: Chris Wright
    Signed-off-by: David S. Miller

    Chris Wright
     
  • transport may be free before ICMP proto unreachable timer expire, so
    we should delete active ICMP proto unreachable timer when transport
    is going away.

    Signed-off-by: Wei Yongjun
    Acked-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Wei Yongjun
     
  • TCP MD5 support uses percpu data for temporary storage. It currently
    disables preemption so that same storage cannot be reclaimed by another
    thread on same cpu.

    We also have to make sure a softirq handler wont try to use also same
    context. Various bug reports demonstrated corruptions.

    Fix is to disable preemption and BH.

    Reported-by: Bhaskar Dutta
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • The interrupt enable bit for the performance counters is in the Control
    Register $24, not in the counter register.
    loongson2_perfcount_handler(), we need to use

    Reported-by: Xu Hengyang
    Signed-off-by: Wu Zhangjin
    Cc: linux-mips@linux-mips.org
    Patchwork: http://patchwork.linux-mips.org/patch/1198/
    Signed-off-by: Ralf Baechle

    ---

    Wu Zhangjin
     
  • The sys_ppoll() takes struct 'struct timespec'. This is different for the
    N32 and N64 ABIs. Use the compat version to do the proper conversions.

    Signed-off-by: David Daney
    To: linux-mips@linux-mips.org
    Patchwork: http://patchwork.linux-mips.org/patch/1210/
    Signed-off-by: Ralf Baechle

    ---

    Chandrakala Chavva
     
  • In the FPU emulator code of the MIPS, the Cause bits of the FCSR register
    are not currently writeable by the ctc1 instruction. In odd corner cases,
    this can cause problems. For example, a case existed where a divide-by-zero
    exception was generated by the FPU, and the signal handler attempted to
    restore the FPU registers to their state before the exception occurred. In
    this particular setup, writing the old value to the FCSR register would
    cause another divide-by-zero exception to occur immediately. The solution
    is to change the ctc1 instruction emulator code to allow the Cause bits of
    the FCSR register to be writeable. This is the behaviour of the hardware
    that the code is emulating.

    This problem was found by Shane McDonald, but the credit for the fix goes
    to Kevin Kissell. In Kevin's words:

    I submit that the bug is indeed in that ctc_op: case of the emulator. The
    Cause bits (17:12) are supposed to be writable by that instruction, but the
    CTC1 emulation won't let them be updated by the instruction. I think that
    actually if you just completely removed lines 387-388 [...] things would
    work a good deal better. At least, it would be a more accurate emulation of
    the architecturally defined FPU. If I wanted to be really, really pedantic
    (which I sometimes do), I'd also protect the reserved bits that aren't
    necessarily writable.

    Signed-off-by: Shane McDonald
    To: anemo@mba.ocn.ne.jp
    To: kevink@paralogos.com
    To: sshtylyov@mvista.com
    Patchwork: http://patchwork.linux-mips.org/patch/1205/
    Signed-off-by: Ralf Baechle

    ---

    Shane McDonald
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
    Btrfs: check for read permission on src file in the clone ioctl

    Linus Torvalds
     
  • mempool_alloc() can return null in atomic case.

    Signed-off-by: Denis Kirjanov
    Cc: Joern Engel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    kirjanov@gmail.com
     
  • As we were using an internal dma flushing routine, this patch changes to
    the DMA API flush_kernel_dcache_page(). Driver is able to compile now.

    [akpm@linux-foundation.org: flush_kernel_dcache_page() comes before kunmap_atomic()]
    Signed-off-by: Nicolas Ferre
    Cc: James Bottomley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Ferre
     
  • The existing code would have allowed you to clone a file that was
    only open for writing

    Signed-off-by: Chris Mason

    Dan Rosenberg
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
    JFS: Free sbi memory in error path
    fs/sysv: dereferencing ERR_PTR()
    Fix double-free in logfs
    Fix the regression created by "set S_DEAD on unlink()..." commit

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    perf record: Add a fallback to the reference relocation symbol

    Linus Torvalds
     

15 May, 2010

11 commits

  • I spotted the missing kfree() while removing the BKL.

    [akpm@linux-foundation.org: avoid multiple returns so it doesn't happen again]
    Signed-off-by: Jan Blunck
    Cc: Dave Kleikamp
    Signed-off-by: Andrew Morton
    Signed-off-by: Al Viro

    Jan Blunck
     
  • I moved the dir_put_page() inside the if condition so we don't dereference
    "page", if it's an ERR_PTR().

    Signed-off-by: Dan Carpenter
    Signed-off-by: Al Viro

    Dan Carpenter
     
  • iput() is needed *until* we'd done successful d_alloc_root()

    Signed-off-by: Al Viro

    Al Viro
     
  • 1) i_flags simply doesn't work for mount/unlink race prevention;
    we may have many links to file and rm on one of those obviously
    shouldn't prevent bind on top of another later on. To fix it
    right way we need to mark _dentry_ as unsuitable for mounting
    upon; new flag (DCACHE_CANT_MOUNT) is protected by d_flags and
    i_mutex on the inode in question. Set it (with dont_mount(dentry))
    in unlink/rmdir/etc., check (with cant_mount(dentry)) in places
    in namespace.c that used to check for S_DEAD. Setting S_DEAD
    is still needed in places where we used to set it (for directories
    getting killed), since we rely on it for readdir/rmdir race
    prevention.

    2) rename()/mount() protection has another bogosity - we unhash
    the target before we'd checked that it's not a mountpoint. Fixed.

    3) ancient bogosity in pivot_root() - we locked i_mutex on the
    right directory, but checked S_DEAD on the different (and wrong)
    one. Noticed and fixed.

    Signed-off-by: Al Viro

    Al Viro
     
  • * master.kernel.org:/home/rmk/linux-2.6-arm:
    ARM: 6126/1: ARM mpcore_wdt: fix build failure and other fixes
    ARM: 6125/1: ARM TWD: move TWD registers to common header
    ARM: 6110/1: Fix Thumb-2 kernel builds when UACCESS_WITH_MEMCPY is enabled
    ARM: 6112/1: Use the Inner Shareable I-cache and BTB ops on ARMv7 SMP
    ARM: 6111/1: Implement read/write for ownership in the ARMv6 DMA cache ops
    ARM: 6106/1: Implement copy_to_user_page() for noMMU
    ARM: 6105/1: Fix the __arm_ioremap_caller() definition in nommu.c

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86, mrst: Don't blindly access extended config space

    Linus Torvalds
     
  • If the kernel is large or the profiling step small, /proc/profile
    leaks data and readprofile shows silly stats, until readprofile -r
    has reset the buffer: clear the prof_buffer when it is vmalloc()ed.

    Signed-off-by: Hugh Dickins
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     
  • My old address will shut down in a couple of weeks: update the tree.

    Signed-off-by: Hugh Dickins
    Signed-off-by: Hugh Dickins
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     
  • Do not blindly access extended configuration space unless we actively
    know we're on a Moorestown platform. The fixed-size BAR capability
    lives in the extended configuration space, and thus is not applicable
    if the configuration space isn't appropriately sized.

    This fixes booting certain VMware configurations with CONFIG_MRST=y.

    Moorestown will add a fake PCI-X 266 capability to advertise the
    presence of extended configuration space.

    Reported-and-tested-by: Petr Vandrovec
    Signed-off-by: H. Peter Anvin
    Acked-by: Jacob Pan
    Acked-by: Jesse Barnes
    LKML-Reference:

    H. Peter Anvin
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86, cacheinfo: Turn off L3 cache index disable feature in virtualized environments
    x86, k8: Fix build error when K8_NB is disabled
    x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs
    x86: Fix fake apicid to node mapping for numa emulation

    Linus Torvalds
     
  • When running a quest kernel on xen we get:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000038
    IP: [] cpuid4_cache_lookup_regs+0x2ca/0x3df
    PGD 0
    Oops: 0000 [#1] SMP
    last sysfs file:
    CPU 0
    Modules linked in:

    Pid: 0, comm: swapper Tainted: G W 2.6.34-rc3 #1 /HVM domU
    RIP: 0010:[] [] cpuid4_cache_lookup_regs+0x
    2ca/0x3df
    RSP: 0018:ffff880002203e08 EFLAGS: 00010046
    RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000060
    RDX: 0000000000000000 RSI: 0000000000000040 RDI: 0000000000000000
    RBP: ffff880002203ed8 R08: 00000000000017c0 R09: ffff880002203e38
    R10: ffff8800023d5d40 R11: ffffffff81a01e28 R12: ffff880187e6f5c0
    R13: ffff880002203e34 R14: ffff880002203e58 R15: ffff880002203e68
    FS: 0000000000000000(0000) GS:ffff880002200000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 0000000000000038 CR3: 0000000001a3c000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process swapper (pid: 0, threadinfo ffffffff81a00000, task ffffffff81a44020)
    Stack:
    ffffffff810d7ecb ffff880002203e20 ffffffff81059140 ffff880002203e30
    ffffffff810d7ec9 0000000002203e40 000000000050d140 ffff880002203e70
    0000000002008140 0000000000000086 ffff880040020140 ffffffff81068b8b
    Call Trace:

    [] ? sync_supers_timer_fn+0x0/0x1c
    [] ? mod_timer+0x23/0x25
    [] ? arm_supers_timer+0x34/0x36
    [] ? hrtimer_get_next_event+0xa7/0xc3
    [] ? get_next_timer_interrupt+0x19a/0x20d
    [] get_cpu_leaves+0x5c/0x232
    [] ? sched_clock_local+0x1c/0x82
    [] ? sched_clock_tick+0x75/0x7a
    [] generic_smp_call_function_single_interrupt+0xae/0xd0
    [] smp_call_function_single_interrupt+0x18/0x27
    [] call_function_single_interrupt+0x13/0x20

    [] ? notifier_call_chain+0x14/0x63
    [] ? native_safe_halt+0xc/0xd
    [] ? default_idle+0x36/0x53
    [] cpu_idle+0xaa/0xe4
    [] rest_init+0x7e/0x80
    [] start_kernel+0x40e/0x419
    [] x86_64_start_reservations+0xb3/0xb7
    [] x86_64_start_kernel+0xf8/0x107
    Code: 14 d5 40 ff ae 81 8b 14 02 31 c0 3b 15 47 1c 8b 00 7d 0e 48 8b 05 36 1c 8b
    00 48 63 d2 48 8b 04 d0 c7 85 5c ff ff ff 00 00 00 00 70 38 48 8d 8d 5c ff
    ff ff 48 8b 78 10 ba c4 01 00 00 e8 eb
    RIP [] cpuid4_cache_lookup_regs+0x2ca/0x3df
    RSP
    CR2: 0000000000000038
    ---[ end trace a7919e7f17c0a726 ]---

    The L3 cache index disable feature of AMD CPUs has to be disabled if the
    kernel is running as guest on top of a hypervisor because northbridge
    devices are not available to the guest. Currently, this fixes a boot
    crash on top of Xen. In the future this will become an issue on KVM as
    well.

    Check if northbridge devices are present and do not enable the feature
    if there are none.

    [ hpa: backported to 2.6.34 ]

    Signed-off-by: Frank Arnold
    LKML-Reference:
    Acked-by: Borislav Petkov
    Signed-off-by: H. Peter Anvin
    Cc:

    Frank Arnold