Linus Torvalds
799c10559d
De-pessimize rds_page_copy_user
...
Don't try to "optimize" rds_page_copy_user() by using kmap_atomic() and
the unsafe atomic user mode accessor functions. It's actually slower
than the straightforward code on any reasonable modern CPU.
Back when the code was written (although probably not by the time it was
actually merged, though), 32-bit x86 may have been the dominant
architecture. And there kmap_atomic() can be a lot faster than kmap()
(unless you have very good locality, in which case the virtual address
caching by kmap() can overcome all the downsides).
But these days, x86-64 may not be more populous, but it's getting there
(and if you care about performance, it's definitely already there -
you'd have upgraded your CPU's already in the last few years). And on
x86-64, the non-kmap_atomic() version is faster, simply because the code
is simpler and doesn't have the "re-try page fault" case.
People with old hardware are not likely to care about RDS anyway, and
the optimization for the 32-bit case is simply buggy, since it doesn't
verify the user addresses properly.
Reported-by: Dan Rosenberg <drosenberg@vsecurity.com>
Acked-by: Andrew Morton <akpm@linux-foundation.org>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-10-15 11:09:28 -07:00
..
af_rds.c
net: sk_sleep() helper
2010-04-20 16:37:13 -07:00
bind.c
RDS: Add a debug message suggesting to load transport modules
2009-08-23 19:13:14 -07:00
cong.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
connection.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ib.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ib.h
RDS/IB+IW: Move recv processing to a tasklet
2009-10-30 15:06:39 -07:00
ib_cm.c
net/rds: Add missing mutex_unlock
2010-05-29 00:18:48 -07:00
ib_rdma.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
ib_recv.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
ib_ring.c
RDS/IW+IB: Set recv ring low water mark to 1/2 full.
2009-04-09 17:21:14 -07:00
ib_send.c
RDS: Properly unmap when getting a remote access error
2010-03-16 21:17:00 -07:00
ib_stats.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2009-09-15 09:39:44 -07:00
ib_sysctl.c
sysctl: Drop & in front of every proc_handler.
2009-11-18 08:37:40 -08:00
info.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
info.h
RDS: Info and stats
2009-02-26 23:39:25 -08:00
iw.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
iw.h
RDS/IB+IW: Move recv processing to a tasklet
2009-10-30 15:06:39 -07:00
iw_cm.c
net/rds: Add missing mutex_unlock
2010-05-29 00:18:48 -07:00
iw_rdma.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
iw_recv.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
iw_ring.c
RDS/IW+IB: Set recv ring low water mark to 1/2 full.
2009-04-09 17:21:14 -07:00
iw_send.c
RDS: Do not BUG() on error returned from ib_post_send
2010-03-16 21:16:53 -07:00
iw_stats.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2009-09-15 09:39:44 -07:00
iw_sysctl.c
sysctl: Drop & in front of every proc_handler.
2009-11-18 08:37:40 -08:00
Kconfig
RDS: Modularize RDMA and TCP transports
2009-08-23 19:13:09 -07:00
loop.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
loop.h
RDS: loopback
2009-02-26 23:39:26 -08:00
Makefile
RDS: Modularize RDMA and TCP transports
2009-08-23 19:13:09 -07:00
message.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
page.c
De-pessimize rds_page_copy_user
2010-10-15 11:09:28 -07:00
rdma.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-11 14:53:53 -07:00
rdma.h
RDS: Add GET_MR_FOR_DEST sockopt
2009-10-30 15:06:37 -07:00
rdma_transport.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-04-27 12:49:13 -07:00
rdma_transport.h
RDS: Common RDMA transport code
2009-02-26 23:39:33 -08:00
rds.h
net: sk_sleep() helper
2010-04-20 16:37:13 -07:00
recv.c
rds: fix a leak of kernel memory
2010-08-18 23:40:03 -07:00
send.c
net: sk_sleep() helper
2010-04-20 16:37:13 -07:00
stats.c
RDS: Export symbols from core RDS
2009-08-23 19:13:07 -07:00
sysctl.c
sysctl: Drop & in front of every proc_handler.
2009-11-18 08:37:40 -08:00
tcp.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
tcp.h
RDS: Add TCP transport to RDS
2009-08-23 19:13:02 -07:00
tcp_connect.c
net: fix a lockdep splat
2010-09-24 22:26:10 -07:00
tcp_listen.c
net: fix a lockdep splat
2010-09-24 22:26:10 -07:00
tcp_recv.c
net: fix a lockdep splat
2010-09-24 22:26:10 -07:00
tcp_send.c
net: fix a lockdep splat
2010-09-24 22:26:10 -07:00
tcp_stats.c
RDS: Add TCP transport to RDS
2009-08-23 19:13:02 -07:00
threads.c
RDS: Enable per-cpu workqueue threads
2010-03-16 21:17:02 -07:00
transport.c
RDS: Track transports via an array, not a list
2009-08-23 19:13:12 -07:00