Commit graph

188140 commits

Author SHA1 Message Date
Will Deacon
da7196e1f9 perf, ARM: Modify kuser rmb() call to compile for Thumb-2
The Thumb-2 instruction set does not provide an encoding
for sub pc, r0, #95 as present in the rmb() definition used
by perf. This results in compilation failure when using a
compiler targetting an instruction set other than ARM.

This patch redefines rmb() for ARM by casting the address
of the kuser helper to a function pointer, therefore getting
the compiler to take care of making the call.

Patch taken against tip/master.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Jamie Iles <jamie.iles@picochip.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <1267616878-2154-1-git-send-email-will.deacon@arm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:13:28 +01:00
Paul E. McKenney
54dbf96c92 rcu: Suppress RCU lockdep warnings during early boot
RCU is used during very early boot, before RCU and lockdep have
been initialized.  So make the underlying primitives
(rcu_read_lock_held(), rcu_read_lock_bh_held(),
rcu_read_lock_sched_held(), and rcu_dereference_check()) check
for early boot via the rcu_scheduler_active flag.  This will
suppress false positives.

Also introduce a debug_lockdep_rcu_enabled() static inline
helper function, which tags the CONTINUE_PROVE_RCU case as
likely(), as suggested by Ingo Molnar.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1267631219-8713-2-git-send-email-paulmck@linux.vnet.ibm.com>
[ v2: removed incomplete debug_lockdep_rcu_update() bits ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:09:19 +01:00
Paul E. McKenney
8d53dd546f rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()
Change the pair of rcu_dereference() calls in
ftrace_perf_buf_prepare() to rcu_dereference_sched().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <1267667418-32233-3-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:07:35 +01:00
Paul E. McKenney
99ee4ca746 rcu: Suppress __mpol_dup() false positive from RCU lockdep
Common code is used during task creation and after the task has
started running.  RCU protection is not needed during task
creation because no other CPU has access to the
under-construction task.  Provide the RCU protection anyway to
suppress the false positive, as there does not appear to be a
good way for the common code to recognize that the task is only
accessible to the CPU creating it.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Paul Menage <menage@google.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1267667418-32233-2-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:07:34 +01:00
Paul E. McKenney
e6033e3b30 rcu: Make rcu_read_lock_sched_held() handle !PREEMPT
The rcu_read_lock_sched_held() needs to unconditionally return
the value "1" in a !PREEMPT kernel, because under !PREEMPT,
-all- kernel code is implicitly preempt-disabled.  This patch
makes this happen.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1267667418-32233-1-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:07:33 +01:00
Paul E. McKenney
cc5b83a9f8 rcu: Add control variables to lockdep_rcu_dereference() diagnostics
Add the values of rcu_scheduler_active() and debug_locks() to
the lockdep_rcu_dereference() output to help diagnose RCU
lockdep splats that occur shortly after the scheduler starts.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1267631219-8713-4-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:07:32 +01:00
Paul E. McKenney
5ed42b8113 rcu, cgroup: Relax the check in task_subsys_state() as early boot is now handled by lockdep-RCU
This patch removes the check for !rcu_scheduler_active because
this check has been incorporated into rcu_dereference_check().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1267631219-8713-3-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 12:07:31 +01:00
Ingo Molnar
e02c4fd314 Merge branch 'tip/tracing/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/urgent 2010-03-04 11:51:29 +01:00
Ingo Molnar
4f16d4e0c9 Merge branch 'perf/core' into perf/urgent
Merge reason: Switch from pre-merge topical split to the post-merge urgent track

Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 11:47:52 +01:00
Paul E. McKenney
db1466b3e1 rcu: Use wrapper function instead of exporting tasklist_lock
Lockdep-RCU commit d11c563d exported tasklist_lock, which is not
a good thing.  This patch instead exports a function that uses
lockdep to check whether tasklist_lock is held.

Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
Cc: Christoph Hellwig <hch@lst.de>
LKML-Reference: <1267631219-8713-1-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 11:46:14 +01:00
Ingo Molnar
0e064caf64 Merge branches 'core/futexes' and 'core/iommu' into core/urgent
Merge reason: Switch from topical split to the stabilization track

Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 11:45:31 +01:00
Masami Hiramatsu
e5a1101664 x86: Issue at least one memory barrier in stop_machine_text_poke()
Fix stop_machine_text_poke() to issue smp_mb() before exiting
waiting loop, and use cpu_relax() for waiting.

Changes in v2:
 - Don't use ACCESS_ONCE().

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: systemtap <systemtap@sources.redhat.com>
Cc: DLE <dle-develop@lists.sourceforge.net>
Cc: Jason Baron <jbaron@redhat.com>
LKML-Reference: <20100304033850.3819.74590.stgit@localhost6.localdomain6>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 11:39:21 +01:00
Masami Hiramatsu
32cb0dd506 perf probe: Correct probe syntax on command line help
Move @SRC right after FUNC in syntax according to syntax change
on command line help.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: systemtap <systemtap@sources.redhat.com>
Cc: DLE <dle-develop@lists.sourceforge.net>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: K.Prasad <prasad@linux.vnet.ibm.com>
LKML-Reference: <20100304033843.3819.10087.stgit@localhost6.localdomain6>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-04 11:39:21 +01:00
Stephen Rothwell
1154fab73c SLUB: Fix per-cpu merge conflict
The slab tree adds a percpu variable usage case (commit
9dfc6e68bf "SLUB: Use this_cpu operations in
slub"), but the percpu tree removes the prefixing of percpu variables (commit
dd17c8f729 "percpu: remove per_cpu__ prefix"),
thus causing the following compilation error:

    CC      mm/slub.o
  mm/slub.c: In function ‘alloc_kmem_cache_cpus’:
  mm/slub.c:2078: error: implicit declaration of function ‘per_cpu_var’
  mm/slub.c:2078: warning: assignment makes pointer from integer without a cast
  make[1]: *** [mm/slub.o] Error 1

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
2010-03-04 12:09:43 +02:00
Pekka Enberg
e2b093f3e9 Merge branches 'slab/cleanups', 'slab/failslab', 'slab/fixes' and 'slub/percpu' into slab-for-linus 2010-03-04 12:07:50 +02:00
David S. Miller
4c32531324 MAINTAINERS: Add netdev to bridge entry.
Noticed by Ingo Molnar.

Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:54 -08:00
Divy Le Ray
a6f018e324 cxgb3: fix hot plug removal crash
queue restart tasklets need to be stopped after napi handlers are stopped
since the latter can restart them.  So stop them after stopping napi.

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:54 -08:00
Anton Vorontsov
0eddba525c gianfar: Fix TX ring processing on SMP machines
Starting with commit a3bc1f11e9 ("gianfar: Revive SKB
recycling") gianfar driver sooner or later stops transmitting any
packets on SMP machines.

start_xmit() prepares new skb for transmitting, generally it does
three things:

1. sets up all BDs (marks them ready to send), except the first one.
2. stores skb into tx_queue->tx_skbuff so that clean_tx_ring()
   would cleanup it later.
3. sets up the first BD, i.e. marks it ready.

Here is what clean_tx_ring() does:

1. reads skbs from tx_queue->tx_skbuff
2. checks if the *last* BD is ready. If it's still ready [to send]
   then it it isn't transmitted, so clean_tx_ring() returns.
   Otherwise it actually cleanups BDs. All is OK.

Now, if there is just one BD, code flow:

- start_xmit(): stores skb into tx_skbuff. Note that the first BD
  (which is also the last one) isn't marked as ready, yet.
- clean_tx_ring(): sees that skb is not null, *and* its lstatus
  says that it is NOT ready (like if BD was sent), so it cleans
  it up (bad!)
- start_xmit(): marks BD as ready [to send], but it's too late.

We can fix this simply by reordering lstatus/tx_skbuff writes.

Reported-by: Martyn Welch <martyn.welch@ge.com>
Bisected-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Tested-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Tested-by: Martyn Welch <martyn.welch@ge.com>
Cc: Sandeep Gopalpet <Sandeep.Kumar@freescale.com>
Cc: Stable <stable@vger.kernel.org> [2.6.33]
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:53 -08:00
David Dillow
4c020a961a r8169: use correct barrier between cacheable and non-cacheable memory
r8169 needs certain writes to be visible to other CPUs or the NIC before
touching the hardware, but was using smp_wmb() which is only required to
order cacheable memory access. Switch to wmb() which is required to
order both cacheable and non-cacheable memory.

Noticed by Catalin Marinas and Paul Mackerras.

Signed-off-by: David Dillow <dave@thedillows.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:53 -08:00
Neil Horman
d0021b252e tipc: Fix oops on send prior to entering networked mode (v3)
Fix TIPC to disallow sending to remote addresses prior to entering NET_MODE

user programs can oops the kernel by sending datagrams via AF_TIPC prior to
entering networked mode.  The following backtrace has been observed:

ID: 13459  TASK: ffff810014640040  CPU: 0   COMMAND: "tipc-client"
[exception RIP: tipc_node_select_next_hop+90]
RIP: ffffffff8869d3c3  RSP: ffff81002d9a5ab8  RFLAGS: 00010202
RAX: 0000000000000001  RBX: 0000000000000001  RCX: 0000000000000001
RDX: 0000000000000000  RSI: 0000000000000001  RDI: 0000000001001001
RBP: 0000000001001001   R8: 0074736575716552   R9: 0000000000000000
R10: ffff81003fbd0680  R11: 00000000000000c8  R12: 0000000000000008
R13: 0000000000000001  R14: 0000000000000001  R15: ffff810015c6ca00
ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
RIP: 0000003cbd8d49a3  RSP: 00007fffc84e0be8  RFLAGS: 00010206
RAX: 000000000000002c  RBX: ffffffff8005d116  RCX: 0000000000000000
RDX: 0000000000000008  RSI: 00007fffc84e0c00  RDI: 0000000000000003
RBP: 0000000000000000   R8: 00007fffc84e0c10   R9: 0000000000000010
R10: 0000000000000000  R11: 0000000000000246  R12: 0000000000000000
R13: 00007fffc84e0d10  R14: 0000000000000000  R15: 00007fffc84e0c30
ORIG_RAX: 000000000000002c  CS: 0033  SS: 002b

What happens is that, when the tipc module in inserted it enters a standalone
node mode in which communication to its own address is allowed <0.0.0> but not
to other addresses, since the appropriate data structures have not been
allocated yet (specifically the tipc_net pointer).  There is nothing stopping a
client from trying to send such a message however, and if that happens, we
attempt to dereference tipc_net.zones while the pointer is still NULL, and
explode.  The fix is pretty straightforward.  Since these oopses all arise from
the dereference of global pointers prior to their assignment to allocated
values, and since these allocations are small (about 2k total), lets convert
these pointers to static arrays of the appropriate size.  All the accesses to
these bits consider 0/NULL to be a non match when searching, so all the lookups
still work properly, and there is no longer a chance of a bad dererence
anywhere.  As a bonus, this lets us eliminate the setup/teardown routines for
those pointers, and elimnates the need to preform any locking around them to
prevent access while their being allocated/freed.

I've updated the tipc_net structure to behave this way to fix the exact reported
problem, and also fixed up the tipc_bearers and media_list arrays to fix an
obvious simmilar problem that arises from issuing tipc-config commands to
manipulate bearers/links prior to entering networked mode

I've tested this for a few hours by running the sanity tests and stress test
with the tipcutils suite, and nothing has fallen over.  There have been a few
lockdep warnings, but those were there before, and can be addressed later, as
they didn't actually result in any deadlock.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Allan Stephens <allan.stephens@windriver.com>
CC: David S. Miller <davem@davemloft.net>
CC: tipc-discussion@lists.sourceforge.net

 bearer.c |   37 ++++++-------------------------------
 bearer.h |    2 +-
 net.c    |   25 ++++---------------------
 3 files changed, 11 insertions(+), 53 deletions(-)
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:52 -08:00
Timo Teräs
6d55cb91a0 gre: fix hard header destination address checking
ipgre_header() can be called with zero daddr when the gre device is
configured as multipoint tunnel and still has the NOARP flag set (which is
typically cleared by the userspace arp daemon).  If the NOARP packets are
not dropped, ipgre_tunnel_xmit() will take rt->rt_gateway (= NBMA IP) and
use that for route look up (and may lead to bogus xfrm acquires).

The multicast address check is removed as sending to multicast group should
be ok.  In fact, if gre device has a multicast address as destination
ipgre_header is always called with multicast address.

Signed-off-by: Timo Teras <timo.teras@iki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:52 -08:00
Mike Galbraith
c839d30a41 net: add scheduler sync hint to tcp_prequeue().
Decreases the odds wakee will suffer from frequent cache misses.

Signed-off-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:53:51 -08:00
stephen hemminger
8f37ada5b5 IPv6: fix race between cleanup and add/delete address
This solves a potential race problem during the cleanup process.
The issue is that addrconf_ifdown() needs to traverse address list,
but then drop lock to call the notifier. The version in -next
could get confused if add/delete happened during this window.
Original code (2.6.32 and earlier) was okay because all addresses
were always deleted.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:39:34 -08:00
stephen hemminger
84e8b803f1 IPv6: addrconf notify when address is unavailable
My recent change in net-next to retain permanent addresses caused regression.
Device refcount would not go to zero when device was unregistered because
left over anycast reference would hold ipv6 dev reference which would hold
device references...

The correct procedure is to call notify chain when address is no longer
available for use.  When interface comes back DAD timer will notify
back that address is available.

Also, link local addresses should be purged when interface is brought
down. The address might be changed.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:39:33 -08:00
stephen hemminger
5b2a19539c IPv6: addrconf timer race
The Router Solicitation timer races with device state changes
because it doesn't lock the device. Use local variable to avoid
one repeated dereference.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:39:33 -08:00
stephen hemminger
122e4519cd IPv6: addrconf dad timer unnecessary bh_disable
Timer code runs in bottom half, so there is no need for
using _bh form of locking.  Also check if device is not ready
to avoid race with address that is no longer active.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-03-04 00:39:32 -08:00
Amit Shah
335a64a5c2 virtio: console: Use better variable names for fill_queue operation
We want to keep track of the number of buffers added to a vq. Use
nr_added_bufs instead of 'ret'.

Also, the users of fill_queue() overloaded a local 'err' variable to
check the numbers of buffers allocated. Use nr_added_bufs instead of
err.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reported-by: Juan Quintela <quintela@redhat.com>
2010-03-04 13:40:39 +05:30
Amit Shah
604b2ad7cc virtio: console: Fix type of 'len' as unsigned int
We declare 'len' as int type but it should be 'unsigned int', as
get_buf() wants it to be.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reported-by: Juan Quintela <quintela@redhat.com>
2010-03-04 13:40:33 +05:30
Paul Mundt
b07f6b327e sh: Fix up flush_cache_vmap() on SMP.
flush_cache_all() uses broadcast IPIs, so we can't wrap in to that when
IRQs are disabled. The local cache flush manages to do what we need here
anyways, so just switch to that.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-03-04 16:47:30 +09:00
Paul Mundt
281983d6ff sh: fix up MMU reset with variable PMB mapping sizes.
Presently we run in to issues with the MMU resetting the CPU when
variable sized mappings are employed. This takes a slightly more
aggressive approach to keeping the TLB and cache state sane before
establishing the mappings in order to cut down on races observed on
SMP configurations.

At the same time, we bump the VMA range up to the 0xb000...0xc000 range,
as there still seems to be some undocumented behaviour in setting up
variable mappings in the 0xa000...0xb000 range, resulting in reset by the
TLB.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-03-04 16:44:20 +09:00
David S. Miller
e5c1a0aa00 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 2010-03-03 22:42:54 -08:00
Akira Fujita
c437b27335 ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl
a) Fix sparse warning in ext4_ioctl()
b) Remove unneeded variable in mext_leaf_block()
c) Fix spelling typo in mext_check_arguments()

Signed-off-by: Akira Fujita <a-fujita@rs.jp.nec.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2010-03-04 00:39:24 -05:00
Akira Fujita
7247c0caa2 ext4: Fix the NULL reference in double_down_write_data_sem()
If EXT4_IOC_MOVE_EXT ioctl is called with NULL donor_fd, fget() in
ext4_ioctl() gets inappropriate file structure for donor; so we need
to do this check earlier, before calling double_down_write_data_sem().

Signed-off-by: Akira Fujita <a-fujita@rs.jp.nec.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2010-03-04 00:34:58 -05:00
Akira Fujita
5fd5249aa3 ext4: Fix insertion point of extent in mext_insert_across_blocks()
If the leaf node has 2 extent space or fewer and EXT4_IOC_MOVE_EXT
ioctl is called with the file offset where after the 2nd extent
covers, mext_insert_across_blocks() always tries to insert extent into
the first extent.  As a result, the file gets corrupted because of
wrong extent order.  The patch fixes this problem.

Signed-off-by: Akira Fujita <a-fujita@rs.jp.nec.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2010-03-04 00:31:06 -05:00
Steffen Klassert
7478138782 padata: Allocate the cpumask for the padata instance
The cpumask of the padata instance was used without allocated.
This caused boot crashes if CONFIG_CPUMASK_OFFSTACK is enabled.
This patch fixes this by doing proper allocation for this cpumask.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2010-03-04 13:30:22 +08:00
Akinobu Mita
731eb1a03a ext4: consolidate in_range() definitions
There are duplicate macro definitions of in_range() in mballoc.h and
balloc.c.  This consolidates these two definitions into ext4.h, and
changes extents.c to use in_range() as well.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andreas Dilger <adilger@sun.com>
2010-03-03 23:55:01 -05:00
Akinobu Mita
bda00de7e8 ext4: cleanup to use ext4_grp_offs_to_block()
More cleanup to convert open-coded calculations of the first block
number of a free extent to use ext4_grp_offs_to_block() instead.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andreas Dilger <adilger@sun.com>
2010-03-03 23:53:25 -05:00
Akinobu Mita
5661bd6861 ext4: cleanup to use ext4_group_first_block_no()
This is a cleanup and simplification patch which takes some open-coded
calculations to calculate the first block number of a group and
converts them to use the (already defined) ext4_group_first_block_no()
function.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andreas Dilger <adilger@sun.com>
2010-03-03 23:53:39 -05:00
Dan Williams
dd58ffcf5a Merge branch 'coh' into dmaengine 2010-03-03 21:22:21 -07:00
Dan Williams
aa4d72ae94 ioat: cleanup ->timer_fn() and ->cleanup_fn() prototypes
If the calling convention of ->timer_fn() and ->cleanup_fn() are unified
across hardware versions we can drop parameters to ioat_init_channel() and
unify ioat_is_dma_complete() implementations.

Both ->timer_fn() and ->cleanup_fn() are modified to expect a struct
dma_chan pointer.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2010-03-03 21:21:13 -07:00
Dan Williams
b9cc98697d ioat3: interrupt coalescing
The hardware automatically disables further interrupts after each event
until rearmed.  This allows a delay to be injected between the occurence
of the interrupt and the running of the cleanup routine.  The delay is
scaled by the descriptor backlog and then written to the INTRDELAY
register which specifies the number of microseconds to hold off
interrupt delivery after an interrupt event occurs.  According to
powertop this reduces the interrupt rate from ~5000 intr/s to ~150
intr/s per without affecting throughput (simple dd to a raid6 array).

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2010-03-03 21:21:13 -07:00
Dan Williams
aa75db0080 ioat: close potential BUG_ON race in the descriptor cleanup path
Since ioat_cleanup_preamble() and the update of the last completed
descriptor are not synchronized there is a chance that two cleanup threads
can see descriptors to clean.  If the first cleans up all pending
descriptors then the second will trigger the BUG_ON.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2010-03-03 21:21:10 -07:00
Linus Torvalds
a27341cd5f Prioritize synchronous signals over 'normal' signals
This makes sure that we pick the synchronous signals caused by a
processor fault over any pending regular asynchronous signals sent to
use by [t]kill().

This is not strictly required semantics, but it makes it _much_ easier
for programs like Wine that expect to find the fault information in the
signal stack.

Without this, if a non-synchronous signal gets picked first, the delayed
asynchronous signal will have its signal context pointing to the new
signal invocation, rather than the instruction that caused the SIGSEGV
or SIGBUS in the first place.

This is not all that pretty, and we're discussing making the synchronous
signals more explicit rather than have these kinds of implicit
preferences of SIGSEGV and friends.  See for example

	http://bugzilla.kernel.org/show_bug.cgi?id=15395

for some of the discussion.  But in the meantime this is a simple and
fairly straightforward work-around, and the whole

	if (x & Y)
		x &= Y;

thing can be compiled into (and gcc does do it) just three instructions:

	movq    %rdx, %rax
	andl    $Y, %eax
	cmovne  %rax, %rdx

so it is at least a simple solution to a subtle issue.

Reported-and-tested-by: Pavel Vilim <wylda@volny.cz>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-03-03 19:21:10 -08:00
H Hartley Sweeten
3a8954e8f2 staging: dt3155: revert u_long to u64 usage
Commit 9c1390a923ddb6fba1cf9d7440743369140c6d8a replaced
all u_int's with u32 and u_long's with u64. Unfortunately, a u_long
is still only 32-bits so they should have been replaced with u32 also.

This can be verified by the register definitions in dt3155_io.h.  It
specifically states that the memory mapped registers are 32-bit.

Fix this by changing all the u64 to u32.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Greg Kroah-Hartman <greg@kroah.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
5617f9da46 Staging: comedi: drivers.c: Checkpatch cleanup
WARNING: Use #include <linux/io.h> instead of <asm/io.h>
+#include <asm/io.h>

WARNING: braces {} are not necessary for any arm of this statement
+	if (dev->driver) {
[...]
+	} else {
[...]

WARNING: braces {} are not necessary for single statement blocks
+	if (insn->insn == INSN_READ) {
+		data[0] = (new_data[1] >> (chan - base_bitfield_channel)) & 1;
+	}

WARNING: braces {} are not necessary for single statement blocks
+	if (async->prealloc_buf && async->prealloc_bufsz == new_size) {
+		return 0;
+	}

WARNING: braces {} are not necessary for single statement blocks
+				if (async->buf_page_list[i].virt_addr == NULL) {
+					break;
+				}

WARNING: braces {} are not necessary for single statement blocks
+	if ((int)(async->buf_write_alloc_count + nbytes - free_end) > 0) {
+		nbytes = free_end - async->buf_write_alloc_count;
+	}

WARNING: braces {} are not necessary for single statement blocks
+	if ((int)(async->buf_write_alloc_count + nbytes - free_end) > 0) {
+		nbytes = 0;
+	}

WARNING: braces {} are not necessary for single statement blocks
+	if (async->buf_write_ptr >= async->prealloc_bufsz) {
+		async->buf_write_ptr %= async->prealloc_bufsz;
+	}

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
b91665e95d Staging: arlan: arlan.h: more Checkpatch cleanup
ERROR: do not use C99 // comments
+      volatile	u_char radioModule;// shows EEPROM, can be overridden at 0x111

ERROR: do not use C99 // comments
+      volatile	u_char defaultChannelSet; // shows EEProm, can be overriiden at 0x10A

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
e22245b6c2 Staging: arlan: Makefile: Checkpatch cleanup
ERROR: trailing whitespace
+obj-$(CONFIG_ARLAN) += arlan.o $

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
aa1468b3fa Staging: rt3070: md4.h: Checkpatch cleanup
WARNING: space prohibited between function name and open parenthesis '('
+void MD4Init (MD4_CTX *);

WARNING: space prohibited between function name and open parenthesis '('
+void MD4Update (MD4_CTX *, u8 *, UINT);

WARNING: space prohibited between function name and open parenthesis '('
+void MD4Final (u8 [16], MD4_CTX *);

ERROR: do not use C99 // comments
+#endif //__MD4_H__

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
a5a8695987 Staging: arlan: arlan.h: Checkpatch cleanup
ERROR: trailing whitespace
+ *  Copyright (C) 1998 Elmer.Joandi@ut.ee, +37-255-13500^I$

WARNING: Use #include <linux/io.h> instead of <asm/io.h>
+#include <asm/io.h>

ERROR: do not use C99 // comments
+//#define ARLAN_DEBUGGING 1

ERROR: "foo * bar" should be "foo *bar"
+extern int     arlan_command(struct net_device * dev, int command);

ERROR: trailing whitespace
+ $

ERROR: trailing whitespace
+#define IFDEBUG( L ) if ( (L) & arlan_debug ) $

ERROR: space prohibited after that open parenthesis '('
+#define IFDEBUG( L ) if ( (L) & arlan_debug )

ERROR: space prohibited before that close parenthesis ')'
+#define IFDEBUG( L ) if ( (L) & arlan_debug )

ERROR: trailing whitespace
+#define ARLAN_FAKE_HDR_LEN 12 $

ERROR: space required after that ',' (ctx:VxV)
+	#define ARLAN_DEBUG(a,b) printk(KERN_DEBUG a, b)
 	                     ^

ERROR: trailing whitespace
+^I#define ARLAN_DEBUG(a,b) $

ERROR: space required after that ',' (ctx:VxV)
+	#define ARLAN_DEBUG(a,b)
 	                     ^

ERROR: open brace '{' following struct go on the same line
+struct arlan_shmem
+{

ERROR: trailing whitespace
+      /* Header Signature */ $

ERROR: trailing whitespace
+      $

ERROR: trailing whitespace
+      $

ERROR: trailing whitespace
+      $

ERROR: trailing whitespace
+     $

ERROR: trailing whitespace
+      int systemId; $

ERROR: open brace '{' following struct go on the same line
+struct TxParam
+{

ERROR: "foo * bar" should be "foo *bar"
+      struct arlan_shmem __iomem * card;

ERROR: "foo * bar" should be "foo *bar"
+      struct arlan_shmem * conf;

ERROR: trailing whitespace
+      struct arlan_conf_stru * Conf;^I     $

ERROR: "foo * bar" should be "foo *bar"
+      struct arlan_conf_stru * Conf;

ERROR: trailing whitespace
+ $

ERROR: space required after that ',' (ctx:VxV)
+#define READSHM(to,from,atype) {\
                   ^

ERROR: space required after that ',' (ctx:VxV)
+#define READSHM(to,from,atype) {\
                        ^

ERROR: space required after that ',' (ctx:VxO)
+	memcpy_fromio(&(tmp),&(from),sizeof(atype));\
 	                    ^

ERROR: space required before that '&' (ctx:OxV)
+	memcpy_fromio(&(tmp),&(from),sizeof(atype));\
 	                     ^

ERROR: space required after that ',' (ctx:VxV)
+	memcpy_fromio(&(tmp),&(from),sizeof(atype));\
 	                            ^

ERROR: space required after that ',' (ctx:VxV)
+#define READSHMEM(from,atype)\
                       ^

ERROR: space required after that ',' (ctx:VxV)
+#define WRITESHM(to,from,atype) \
                    ^

ERROR: space required after that ',' (ctx:VxV)
+#define WRITESHM(to,from,atype) \
                         ^

ERROR: space required after that ',' (ctx:VxO)
+	memcpy_toio(&(to),&tmpSHM,sizeof(atype));\
 	                 ^

ERROR: space required before that '&' (ctx:OxV)
+	memcpy_toio(&(to),&tmpSHM,sizeof(atype));\
 	                  ^

ERROR: space required after that ',' (ctx:VxV)
+	memcpy_toio(&(to),&tmpSHM,sizeof(atype));\
 	                         ^

ERROR: space required after that ',' (ctx:VxV)
+#define DEBUGSHM(levelSHM,stringSHM,stuff,atype) \
                          ^

ERROR: space required after that ',' (ctx:VxV)
+#define DEBUGSHM(levelSHM,stringSHM,stuff,atype) \
                                    ^

ERROR: space required after that ',' (ctx:VxV)
+#define DEBUGSHM(levelSHM,stringSHM,stuff,atype) \
                                          ^

ERROR: space required after that ',' (ctx:VxO)
+		memcpy_fromio(&tmpSHM,&(stuff),sizeof(atype));\
 		                     ^

ERROR: space required before that '&' (ctx:OxV)
+		memcpy_fromio(&tmpSHM,&(stuff),sizeof(atype));\
 		                      ^

ERROR: space required after that ',' (ctx:VxV)
+		memcpy_fromio(&tmpSHM,&(stuff),sizeof(atype));\
 		                              ^

ERROR: space required after that ',' (ctx:VxV)
+		IFDEBUG(levelSHM) printk(stringSHM,tmpSHM);\
 		                                  ^

ERROR: space required after that ',' (ctx:VxO)
+	writeb(val,&(to))
 	          ^

ERROR: space required before that '&' (ctx:OxV)
+	writeb(val,&(to))
 	           ^

ERROR: space required after that ',' (ctx:VxO)
+	writew(val,&(to))
 	          ^

ERROR: space required before that '&' (ctx:OxV)
+	writew(val,&(to))
 	           ^

ERROR: space required after that ',' (ctx:VxO)
+	writel(val,&(to))
 	          ^

ERROR: space required before that '&' (ctx:OxV)
+	writel(val,&(to))
 	           ^

ERROR: space prohibited after that open parenthesis '('
+   ( (   READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationMode)    > 0) && \

ERROR: space prohibited after that open parenthesis '('
+     (   READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)    )

ERROR: space prohibited before that close parenthesis ')'
+     (   READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)    )

ERROR: code indent should use tabs where possible
+ ^IREADSHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage)$

ERROR: space required before the open brace '{'
+#define writeControlRegister(dev, v){\

ERROR: space required after that ',' (ctx:WxV)
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage	,((v) &0xF) );\
                                                                             	^

ERROR: need consistent spacing around '&' (ctx:WxV)
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage	,((v) &0xF) );\
                                                                             	      ^

ERROR: space prohibited before that close parenthesis ')'
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage	,((v) &0xF) );\

ERROR: space required after that ',' (ctx:WxV)
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->controlRegister	,(v) 	);}
                                                                               	^

ERROR: space required after that ';' (ctx:VxV)
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->controlRegister	,(v) 	);}
                                                                               	     	 ^

ERROR: space prohibited before that close parenthesis ')'
+   WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->controlRegister	,(v) 	);}

WARNING: suspect code indent for conditional statements (3, 6)
+   if (cr & ARLAN_CHANNEL_ATTENTION){ \
+      writeControlRegister(dev, (cr & ~ARLAN_CHANNEL_ATTENTION));\

ERROR: space required before the open brace '{'
+   if (cr & ARLAN_CHANNEL_ATTENTION){ \

ERROR: space required after that close brace '}'
+   }else  \

ERROR: space required before the open brace '{'
+#define clearChannelAttention(dev){ \

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CHANNEL_ATTENTION);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CHANNEL_ATTENTION);}
                                                                                 ^

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_RESET);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_RESET);}
                                                                    ^

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_RESET);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_RESET);}
                                                                     ^

ERROR: space required before the open brace '{'
+#define setInterruptEnable(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_INTERRUPT_ENABLE)  ;}
                            ^

ERROR: space required after that ';' (ctx:WxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_INTERRUPT_ENABLE)  ;}
                                                                                 ^

ERROR: space required before the open brace '{'
+#define clearInterruptEnable(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_INTERRUPT_ENABLE)  ;}
                            ^

ERROR: space required after that ';' (ctx:WxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_INTERRUPT_ENABLE)  ;}
                                                                                  ^

ERROR: space required before the open brace '{'
+#define setClearInterrupt(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_CLEAR_INTERRUPT)   ;}
                            ^

ERROR: space required after that ';' (ctx:WxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_CLEAR_INTERRUPT)   ;}
                                                                                 ^

ERROR: space required before the open brace '{'
+#define clearClearInterrupt(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CLEAR_INTERRUPT);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CLEAR_INTERRUPT);}
                                                                               ^

ERROR: space required before the open brace '{'
+#define setPowerOff(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | (ARLAN_POWER && ARLAN_ACCESS));\
                            ^

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);}
                                                                      ^

ERROR: space required before the open brace '{'
+#define setPowerOn(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~(ARLAN_POWER));   }
                            ^

ERROR: space required before the open brace '{'
+#define arlan_lock_card_access(dev){\

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);}
                            ^

ERROR: space required after that ';' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);}
                                                                      ^

ERROR: space required before the open brace '{'
+#define arlan_unlock_card_access(dev){\

ERROR: trailing whitespace
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_ACCESS ); }  $

ERROR: space required after that ',' (ctx:VxV)
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_ACCESS ); }
                            ^

ERROR: space prohibited before that close parenthesis ')'
+   writeControlRegister(dev,readControlRegister(dev) | ARLAN_ACCESS ); }

ERROR: trailing whitespace
+ $

ERROR: trailing whitespace
+ $

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:07 -08:00
Andrea Gelmini
fa93e19dcf Staging: comedi: dt2801.c: Checkpatch cleanup
ERROR: code indent should use tabs where possible
+          0 = [-10,10]$

ERROR: code indent should use tabs where possible
+          0 = [-10,10]$

WARNING: braces {} are not necessary for single statement blocks
+		if (stat & (DT_S_COMPOSITE_ERROR | DT_S_READY)) {
+			return stat;
+		}

WARNING: braces {} are not necessary for single statement blocks
+		if (stat & DT_S_COMPOSITE_ERROR) {
+			return stat;
+		}

WARNING: braces {} are not necessary for single statement blocks
+	if (stat & DT_S_READY) {
+		return 0;
+	}

WARNING: braces {} are not necessary for single statement blocks
+		if (stat & DT_S_COMPOSITE_ERROR) {
+			return stat;
+		}

WARNING: braces {} are not necessary for single statement blocks
+		if (stat & DT_S_READY) {
+			return 0;
+		}

WARNING: braces {} are not necessary for single statement blocks
+	if (!(stat & DT_S_READY)) {
+		printk("dt2801: !ready in dt2801_writecmd(), ignoring\n");
+	}

WARNING: braces {} are not necessary for single statement blocks
+	if (!timeout) {
+		printk("dt2801: timeout 1 status=0x%02x\n", stat);
+	}

WARNING: braces {} are not necessary for single statement blocks
+	if (!timeout) {
+		printk("dt2801: timeout 2 status=0x%02x\n", stat);
+	}

WARNING: braces {} are not necessary for any arm of this statement
+		if (stat == -ETIME) {
[...]
+		} else {
[...]

Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-03 16:43:06 -08:00