Andrew Morton [Mon, 19 Jan 2004 02:56:51 +0000 (18:56 -0800)]
[PATCH] kNFSd: Fix incorrect call for follow_up
From: NeilBrown <neilb@cse.unsw.edu.au>
follow_up doesn't check that the passed dentry is at the root of the mounted
file system, so we have to do that, to avoid calling follow_up too many
times.
Andrew Morton [Mon, 19 Jan 2004 02:56:34 +0000 (18:56 -0800)]
[PATCH] kNFSd: Fix problem with stale filehandles.
From: NeilBrown <neilb@cse.unsw.edu.au>
nfsd_setuser was not called until after filehandle lookup was done, so
filehandle lookup would use the wrong userid, and so the permission checking
in nfsd_acceptable would be bogus.
Andrew Morton [Mon, 19 Jan 2004 02:56:07 +0000 (18:56 -0800)]
[PATCH] Use request_list as indicator that req originated from ll_rw_blk
From: Mike Christie <michaelc@cs.wisc.edu>,
Jens Axboe <axboe@suse.de>
It's cleaner and more correct to look at req->rl to determine whether this
request got from the block layer requests lists instead of using req->q.
It's handy to always have req->q available, to lookup the queue from the
request.
Andrew Morton [Mon, 19 Jan 2004 02:55:12 +0000 (18:55 -0800)]
[PATCH] v4l: add infrared remote support
From: Gerd Knorr <kraxel@bytesex.org>
This patch adds a module with some helper functions to handle infrared
remotes using the linux input layer. It doesn't do any useful stuff alone,
but the saa7134 and bttv drivers will use that to support the remotes shipped
with some TV cards.
Andrew Morton [Mon, 19 Jan 2004 02:55:03 +0000 (18:55 -0800)]
[PATCH] v4l: bttv driver update
From: Gerd Knorr <kraxel@bytesex.org>
bttv driver update. Changes:
(1) Added a new, sysfs-based interface to allow access to the bt878 gpio
lines from other kernel modules (new bttv-gpio.c file), which fixes alot
of problems the old interface has (which still is in bttv-if.c, to be
removed in 2.7).
(2) moved the i2c code from bttv-if.c to bttv-i2c.c.
(3) created a new "struct bttv_core" and moved some of the entries from
"struct bttv" to the new one. This is needed for (1) and makes the patch
pretty big, althrough there is no actual code changes.
(4) first cut for suspend support (S1 works for me).
(5) usual batch of new/updated tv card list entries.
Andrew Morton [Mon, 19 Jan 2004 02:54:53 +0000 (18:54 -0800)]
[PATCH] v4l: video-buf update
From: Gerd Knorr <kraxel@bytesex.org>
This patch contains video-buf fixes, mainly remove videobuf_lock() and
videobuf_unlock() functions. They are not needed as get_user_pages() locks
down the pages anyway.
Andrew Morton [Mon, 19 Jan 2004 02:54:44 +0000 (18:54 -0800)]
[PATCH] v4l: v4l2 update
From: Gerd Knorr <kraxel@bytesex.org>
This patch is a v4l2 update. Changes:
* added new ioctls (VIDIOC_G_PRIORITY, VIDIOC_S_PRIORITY) to give v4l apps
priorities for tuning and other controls. Main purpose is that backgrounds
applictions like nxtvepg which are fishing informations from /dev/vbi
(teletext, epg, ...) can run at lower priority than interactive tv apps and
thus the user isn't annonyed with unexpected channel switches.
* add a set of helper functions to handle priorities to the v4l2-common
module.
Andrew Morton [Mon, 19 Jan 2004 02:54:35 +0000 (18:54 -0800)]
[PATCH] v4l: videodev update
From: Gerd Knorr <kraxel@bytesex.org>
This patch fixes some v4l2 ioctl #defines which have wrong _IO* macros. It
also adds a function which maps the old numbers to to new ones to maintain
binary backward compatibility.
Andrew Morton [Mon, 19 Jan 2004 02:46:20 +0000 (18:46 -0800)]
[PATCH] sn: Fix the last patch - missed an IS_PIC_SOFT and needed the CG definition
From: Pat Gefre <pfg@sgi.com>
Fix the last patch - missed an IS_PIC_SOFT and needed the CG definition
Header file clean up
Added some __init definitions for functions that were init only
Removed some 'porting' code - replaced it with linux calls/defintions
Cleaned up some of the types we were using (ones that had been added)
Fixed include files that had the wrong path in their ifdef'd names
Andrew Morton [Mon, 19 Jan 2004 02:43:54 +0000 (18:43 -0800)]
[PATCH] const vs. __attribute__((const)) confusion
From: "H. Peter Anvin" <hpa@zytor.com>
Declaring a function to return a const scalar value is pretty meaningless.
These functions are really trying to say that they don't alter any external
state.
Fix that up by using __attribute__((const)), if the compiler supports that.
Andrew Morton [Mon, 19 Jan 2004 02:43:46 +0000 (18:43 -0800)]
[PATCH] s390: endless loop in follow_page.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
Fix endless loop in get_user_pages() on s390. It happens only on s/390
because pte_dirty always returns 0. For all other architectures this is an
optimization.
In the case of "write && !pte_dirty(pte)" follow_page() returns NULL. On all
architectures except s390 handle_pte_fault() will then create a pte with
pte_dirty(pte)==1 because write_access==1. In the following, second call to
follow_page() all is fine. With the physical dirty bit patch pte_dirty() is
always 0 for s/390 because the dirty bit doesn't live in the pte.
Andrew Morton [Mon, 19 Jan 2004 02:43:37 +0000 (18:43 -0800)]
[PATCH] s390: superflous flush_tlb_range calls.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
while searching for a s390 tlb flush problem I noticed some superflous tlb
flushes. One in zeromap_page_range, one in remap_page_range, and another one
in filemap_sync. The patch just adds comments but I think these three
flush_tlb_range calls can be removed.
Andrew Morton [Mon, 19 Jan 2004 02:43:19 +0000 (18:43 -0800)]
[PATCH] s390: rmap optimization.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
while working on my mm patch for s390 I played with rmap a bit, adding
BUG statements and the like. While doing so I noticed some room for
improvement in rmap. Its minor stuff but anyway...
The first observation is that the pte chain array doesn't have holes,
meaning that from the pte_chain_idx() of the first array every slot of
all following pte chain arrays are full. That is there can't be NULL
pointers. The "if (!pte_paddr)" check in try_to_unmap() can be removed
and if the loop in page_referenced() is started from pte_chain_idx(pc)
then the "if (!pte_paddr)" in page_referenced() can be removed as well.
The second observation is that the first pte array of a pte chain has
at least one entry. Empty pte chain arrays are always freed immediatly
after the last entry was removed. Because of that victim_i can be
calculated in a simpler way. Instead of setting victim_i to -1 and then
check in each loop iteration against -1 victim_i can just be set to
the pte_chain_idx of the first pte chain array.
Andrew Morton [Mon, 19 Jan 2004 02:43:11 +0000 (18:43 -0800)]
[PATCH] s390: tlb flush race.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
I think I found a potential race in install_page/install_file_pte. The
inline function zap_pte releases pages by calling page_remove_rmap and
page_cache_release. If this was the last user of a page it can get
purged from the page cache and then get immediatly reused. But there
might still be a tlb for this page on another cpu. The tlb is removed
in the callers of zap_pte, install_page and install_file_pte, but this
is too late. I admit that its a very unlikely race but never the less..
I fixed this by using the new ptep_clear_flush function that is introduced
with the tlb flush optimization patch for s/390.
Andrew Morton [Mon, 19 Jan 2004 02:43:03 +0000 (18:43 -0800)]
[PATCH] s390: physical dirty/referenced bits.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
this is another s/390 related mm patch. It introduces the concept of
physical dirty and referenced bits into the common mm code. I always
had the nagging feeling that the pte functions for setting/clearing
the dirty and referenced bits are not appropriate for s/390. It works
but it is a bit of a hack.
After the wake of rmap it is now possible to put a much better solution
into place. The idea is simple: since there are not dirty/referenced
bits in the pte make these function nops on s/390 and add operations
on the physical page to the appropriate places. For the referenced bit
this is the page_referenced() function. For the dirty bit there are
two relevant spots: in page_remove_rmap after the last user of the
page removed its reverse mapping and in try_to_unmap after the last
user was unmapped. There are two new functions to accomplish this:
* page_test_and_clear_dirty: Test and clear the dirty bit of a
physical page. This function is analog to ptep_test_and_clear_dirty
but gets a struct page as argument instead of a pte_t pointer.
* page_test_and_clear_young: Test and clear the referenced bit
of a physical page. This function is analog to ptep_test_and_clear_young
but gets a struct page as argument instead of a pte_t pointer.
Its pretty straightforward and with it the s/390 mm makes much more
sense. You'll need the tls flush optimization patch for the patch.
Comments ?
Andrew Morton [Mon, 19 Jan 2004 02:42:53 +0000 (18:42 -0800)]
[PATCH] s390: tlb flush optimization.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
On the s/390 architecture we still have the issue with tlb flushing and the
ipte instruction. We can optimize the tlb flushing a lot with some minor
interface changes between the arch backend and the memory management core.
In the end the whole thing is about the Invalidate Page Table Entry (ipte)
instruction. The instruction sets the invalid bit in the pte and removes the
tlb for the page on all cpus for the virtual to physical mapping of the page
in a particular address space. The nice thing is that only the tlb for this
page gets removed, all the other tlbs stay valid. The reason we can't use
ipte to implement flush_tlb_page() is one of the requirements of the
instruction: the pte that should get flushed needs to be *valid*.
I'd like to add the following four functions to the mm interface:
* ptep_establish: Establish a new mapping. This sets a pte entry to a
page table and flushes the tlb of the old entry on all cpus if it
exists. This is more or less what establish_pte in mm/memory.c does
right now but without the update_mmu_cache call.
* ptep_test_and_clear_and_flush_young. Do what ptep_test_and_clear_young
does and flush the tlb.
* ptep_test_and_clear_and_flush_dirty. Do what ptep_test_and_clear_dirty
does and flush the tlb.
* ptep_get_and_clear_and_flush: Do what ptep_get_and_clear does and
flush the tlb.
The s/390 specific functions in include/pgtable.h define their own optimized
version of these four functions by use of the ipte.
I avoid the definition of these function for every architecture I added them
to include/asm-generic/pgtable.h. Since i386/x86 and others don't include
this header yet and define their own version of the functions found there I
#ifdef'd all functions in include/asm-generic/pgtable.h to be able to pick
the ones that are needed for each architecture (see patch for details).
With the new functions in place it is easy to do the optimization, e.g. the
sequence
Andrew Morton [Mon, 19 Jan 2004 02:42:44 +0000 (18:42 -0800)]
[PATCH] s390: 32 bit ioctl emulation fixes.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
- audit all 32 bit pointer accesses and make them use compat_ioctl(),
because of the necessary conversion on s390
- introduce ULONG_IOCTL() which is used instead of COMPATIBLE_IOCTL()
for all ioctls that have their argument encoded in 'arg' instead
of the memory pointed to by arg. Same reason as above.
- remove most #ifdefs in <linux/compat_ioctl.h>: They don't make
any sense if the respective handlers in fs/compat_ioctl.c are
not disabled as well and they are potentially harmful (the
CONFIG_BLK_DEV_DM e.g. was insufficient).
- comment out COMPATIBLE_IOCTL(SIOCSIFBR) and
COMPATIBLE_IOCTL(SIOCGIFBR), they appear to require a handler
- implement copy_in_user for s390, as needed for many handlers in
fs/compat_ioctl.c
- get rid of all duplicate stuff in arch/s390/kernel/compat_ioctl.c
that is also in fs/compat_ioctl.c
Andrew Morton [Mon, 19 Jan 2004 02:42:36 +0000 (18:42 -0800)]
[PATCH] s390: 32 bit emulation fixes.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
- Add emulation for sys_fadvise64 and sys_fadvise64_64.
- Use common code wrapper for sys_sched_setaffinity and sys_sched_getaffinity.
- Remove unused put_rusage.
- Add ssize_t checks for iovec lengths in do_readv_writev32.
- Add emulation for posix timer system calls.