18 May, 2010

22 commits


17 May, 2010

5 commits

  • When looking at a performance problem on PowerPC, I noticed some awful code
    generation:

    c00000000051fc98: 3b 60 00 01 li r27,1
    ...
    c00000000051fca0: 3b 80 00 00 li r28,0
    ...
    c00000000051fcdc: 93 61 00 70 stw r27,112(r1)
    c00000000051fce0: 93 81 00 74 stw r28,116(r1)
    c00000000051fce4: 81 21 00 70 lwz r9,112(r1)
    c00000000051fce8: 80 01 00 74 lwz r0,116(r1)
    c00000000051fcec: 7d 29 07 b4 extsw r9,r9
    c00000000051fcf0: 7c 00 07 b4 extsw r0,r0

    c00000000051fcf4: 7c 20 04 ac lwsync
    c00000000051fcf8: 7d 60 f8 28 lwarx r11,0,r31
    c00000000051fcfc: 7c 0b 48 00 cmpw r11,r9
    c00000000051fd00: 40 c2 00 10 bne- c00000000051fd10
    c00000000051fd04: 7c 00 f9 2d stwcx. r0,0,r31
    c00000000051fd08: 40 c2 ff f0 bne+ c00000000051fcf8
    c00000000051fd0c: 4c 00 01 2c isync

    We create two constants, write them out to the stack, read them straight back
    in and sign extend them. What a mess.

    It turns out this bad code is a result of us defining atomic_t as a
    volatile int.

    We removed the volatile attribute from the powerpc atomic_t definition years
    ago, but commit ea435467500612636f8f4fb639ff6e76b2496e4b (atomic_t: unify all
    arch definitions) added it back in.

    To dig up an old quote from Linus:

    > The fact is, volatile on data structures is a bug. It's a wart in the C
    > language. It shouldn't be used.
    >
    > Volatile accesses in *code* can be ok, and if we have "atomic_read()"
    > expand to a "*(volatile int *)&(x)->value", then I'd be ok with that.
    >
    > But marking data structures volatile just makes the compiler screw up
    > totally, and makes code for initialization sequences etc much worse.

    And screw up it does :)

    With the volatile removed, we see much more reasonable code generation:

    c00000000051f5b8: 3b 60 00 01 li r27,1
    ...
    c00000000051f5c0: 3b 80 00 00 li r28,0
    ...

    c00000000051fc7c: 7c 20 04 ac lwsync
    c00000000051fc80: 7c 00 f8 28 lwarx r0,0,r31
    c00000000051fc84: 7c 00 d8 00 cmpw r0,r27
    c00000000051fc88: 40 c2 00 10 bne- c00000000051fc98
    c00000000051fc8c: 7f 80 f9 2d stwcx. r28,0,r31
    c00000000051fc90: 40 c2 ff f0 bne+ c00000000051fc80
    c00000000051fc94: 4c 00 01 2c isync

    Six instructions less.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     
  • In preparation for removing volatile from the atomic_t definition, this
    patch adds a volatile cast to all the atomic read functions.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     
  • Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    rtnetlink: make SR-IOV VF interface symmetric
    sctp: delete active ICMP proto unreachable timer when free transport
    tcp: fix MD5 (RFC2385) support

    Linus Torvalds
     
  • * 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
    MIPS: Oprofile: Fix Loongson irq handler
    MIPS: N32: Use compat version for sys_ppoll.
    MIPS FPU emulator: allow Cause bits of FCSR to be writeable by ctc1

    Linus Torvalds
     

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

1 commit

  • 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