Skip to contentSkip to conversation

unregister_ioctl32_conversion and modules. ioctl32 revisited.

PATCH In review Andi Kleen 66 participants 250 messages Dec 15, 2004 – Feb 3, 2005 2 messages not in the archive Page 1 of 2

Subsystems (20)
lore
Share & tools
lore

Andi Kleen

author
#0 lore raw

Hallo,

There seems to be an unfixable module unload race in the current register_ioctl32_conversion support. The problem is that there is no way to wait for a conversion handler is blocked in a sleeping *_user access before module unloading. The module count is also not increase in this case.

I previously thought it could be avoided by always putting the compat wrapper into the same module and using the reference counting that is done by VFS on ->module of the char device or file system converted. But that doesn't work because the ioctl32 lookup is independent from the file descriptor and a conversion handler can be entered even after ->release when the right number is passed.

One way to fix it would be to put a pointer to the module into the compat ioctl hash table and increase the module count atomically from the compat code. But that would bloat the hash table a lot and I don't like it very much. Also you would either break the register_ioctl32_conversion prototype or make it a macro
and assume all calls are from the same module, which is also quite ugly.

A better solution would be to switch the few users of register_ioctl32_conversion() over to a new ->ioctl32 method in file_operations and do the conversion from there. This would avoid the race because the VFS will take care of the module count in open/release.

Michael did a patch for this some time ago for a different motivation - he had some benchmarks where the hash table lookup hurt and it was noticeable faster to use a O(1) ->ioctl32 lookup from the file_operations for his application.

An useful side effect would be also to the ability to support a per device ioctl name space. While the core kernel doesn't have much (any?) ioctls with duplicated numbers this mistake seems to be quite common in out of tree drivers and it is hard to fix without breaking compatibility.

And it would be faster for this case of course too, so even performance critical in kernel ioctls could be slowly converted to ioctl32 I wouldn't do it for all, because the current central tables work reasonably well for them and most ioctls are not speed critical anyways.

As for in kernel code it won't affect much code because near all conversion handlers in the main tree are not modular (alsa is one exception, there are a few others e.g. in some raid drivers). I expect it will be a bigger problem in the future though as ioctl emulation becomes more widespread and is done more in individual drivers.

averell:lsrc/v2.6/linux% gid register_ioctl32_conversion | wc -l 75
averell:lsrc/v2.6/linux%

In tree users are alsa, aaraid, fusion, some s390 stuff, sisfb, alsa

My proposal would be to dust off Michael's patch and convert all users in tree over to ioctl32 and then deprecate and later remove (un)register_ioctl32_conversion

Comments?

-Andi

#1 lore raw

Hello, Andi!
Quoting r. Andi Kleen ([email protected]) "unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 59 lines

Hallo,

There seems to be an unfixable module unload race in the current register_ioctl32_conversion support. The problem is that there is no way to wait for a conversion handler is blocked in a sleeping *_user access before module unloading. The module count is also not increase in this case.

I previously thought it could be avoided by always putting the compat wrapper into the same module and using the reference counting that is done by VFS on ->module of the char device or file system converted. But that doesn't work because the ioctl32 lookup is independent from the file descriptor and a conversion handler can be entered even after ->release when the right number is passed.

One way to fix it would be to put a pointer to the module into the compat ioctl hash table and increase the module count atomically from the compat code. But that would bloat the hash table a lot and I don't like it very much. Also you would either break the register_ioctl32_conversion prototype or make it a macro
and assume all calls are from the same module, which is also quite ugly.

A better solution would be to switch the few users of register_ioctl32_conversion() over to a new ->ioctl32 method in file_operations and do the conversion from there. This would avoid the race because the VFS will take care of the module count in open/release.

Michael did a patch for this some time ago for a different motivation - he had some benchmarks where the hash table lookup hurt and it was noticeable faster to use a O(1) ->ioctl32 lookup from the file_operations for his application.

An useful side effect would be also to the ability to support a per device ioctl name space. While the core kernel doesn't have much (any?) ioctls with duplicated numbers this mistake seems to be quite common in out of tree drivers and it is hard to fix without breaking compatibility.

And it would be faster for this case of course too, so even performance critical in kernel ioctls could be slowly converted to ioctl32 I wouldn't do it for all, because the current central tables work reasonably well for them and most ioctls are not speed critical anyways.

As for in kernel code it won't affect much code because near all conversion handlers in the main tree are not modular (alsa is one exception, there are a few others e.g. in some raid drivers). I expect it will be a bigger problem in the future though as ioctl emulation becomes more widespread and is done more in individual drivers.

averell:lsrc/v2.6/linux% gid register_ioctl32_conversion | wc -l 75
averell:lsrc/v2.6/linux%

In tree users are alsa, aaraid, fusion, some s390 stuff, sisfb, alsa

Quoted 7 lines

My proposal would be to dust off Michael's patch and convert all users in tree over to ioctl32 and then deprecate and later remove (un)register_ioctl32_conversion

Comments?

-Andi

It certainly helps performance, at least for me.

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing
an ioctl with proper internal locking.
2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I post the patch (updated for 2.6.10-rc2, boots) that I built for Juergen, below. If there's interest, let me know.

I'd like to add that my patch does not touch any in-kernel users, that would have to be done separately, probably as a first step simply taking the BKL inside ioctl_compat.

MST

Documentation/filesystems/Locking +9 -0
diff -p -ruw linux-2.6.10-rc2-orig/Documentation/filesystems/Locking linux-2.6.10-rc2/Documentation/filesystems/Locking
@@ -350,6 +350,10 @@ prototypes:
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int,
 			unsigned long);
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int,
+			unsigned long);
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int,
+			unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
@@ -383,6 +387,8 @@ aio_write:		no
 readdir: 		no
 poll:			no
 ioctl:			yes	(see below)
+ioctl_native:		no	(see below)
+ioctl_compat:		no	(see below)
 mmap:			no
 open:			maybe	(see below)
 flush:			no
@@ -428,6 +434,9 @@ move ->readdir() to inode_operations and
 anything that resembles union-mount we won't have a struct file for all
 components. And there are other reasons why the current interface is a mess...
 
+->ioctl() on regular files is superceded by the ->ioctl_native() and
+->ioctl_compat() pair. The lock is not taken for these new calls.
+
 ->read on directories probably must go away - we should just enforce -EISDIR
 in sys_read() and friends.
 
fs/compat.c +16 -8
diff -p -ruw linux-2.6.10-rc2-orig/fs/compat.c linux-2.6.10-rc2/fs/compat.c
@@ -401,15 +401,20 @@ asmlinkage long compat_sys_ioctl(unsigne
 				unsigned long arg)
 {
 	struct file * filp;
-	int error = -EBADF;
+	long error = -EBADF;
 	struct ioctl_trans *t;
+	int fput_needed;
 
-	filp = fget(fd);
-	if(!filp)
+	filp = fget_light(fd, &fput_needed);
+	if (!filp) {
 		goto out2;
+	}
 
-	if (!filp->f_op || !filp->f_op->ioctl) {
-		error = sys_ioctl (fd, cmd, arg);
+	if (!std_sys_ioctl(fd, cmd, arg, filp, &error)) {
+		goto out;
+	} else if (filp->f_op && filp->f_op->ioctl_compat) {
+		error = filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
+						 filp, cmd, arg);
 		goto out;
 	}
 
@@ -425,9 +430,12 @@ asmlinkage long compat_sys_ioctl(unsigne
 			error = t->handler(fd, cmd, arg, filp);
 			unlock_kernel();
 			up_read(&ioctl32_sem);
-		} else {
+		} else if (filp->f_op && filp->f_op->ioctl) {
 			up_read(&ioctl32_sem);
-			error = sys_ioctl(fd, cmd, arg);
+			lock_kernel();
+			error = filp->f_op->ioctl(filp->f_dentry->d_inode,
+						  filp, cmd, arg);
+			unlock_kernel();
 		}
 	} else {
 		up_read(&ioctl32_sem);
@@ -466,7 +474,7 @@ asmlinkage long compat_sys_ioctl(unsigne
 		}
 	}
 out:
-	fput(filp);
+	fput_light(filp, fput_needed);
 out2:
 	return error;
 }
fs/ioctl.c +47 -16

106 lines not on this page · raw message

include/linux/fs.h +17 -0
diff -p -ruw linux-2.6.10-rc2-orig/include/linux/fs.h linux-2.6.10-rc2/include/linux/fs.h
@@ -915,6 +915,23 @@ struct file_operations {
 	int (*readdir) (struct file *, void *, filldir_t);
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* The two calls ioctl_native and ioctl_compat described below
+	 * can be used as a replacement for the ioctl call above. They
+	 * take precedence over ioctl: thus if they are set, ioctl is
+	 * not used.  Unlike ioctl, BKL is not taken: drivers manage
+	 * their own locking. */
+
+	/* If ioctl_native is set, it is used instead of ioctl for
+	 * native ioctl syscalls.
+	 * Note that the standard glibc ioctl trims the return code to
+	 * type int, so dont try to put a 64 bit value there.
+	 */
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* If ioctl_compat is set, it is used for a 32 bit compatible
+	 * ioctl (i.e. a 32 bit binary running on a 64 bit OS).
+	 * Note that only the low 32 bit of the return code are passed
+	 * to the user-space application. */
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
include/linux/ioctl.h +8 -0
diff -p -ruw linux-2.6.10-rc2-orig/include/linux/ioctl.h linux-2.6.10-rc2/include/linux/ioctl.h
@@ -3,5 +3,13 @@
 
 #include <asm/ioctl.h>
 
+/* Handles standard ioctl commands, and returns the result in status.
+   Does nothing and returns non-zero if cmd is not one of the standard commands.
+*/
+
+struct file;
+int std_sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,
+		  struct file *filp, long *status);
+
 #endif /* _LINUX_IOCTL_H */
 
author
#2 lore raw
Quoted 3 lines

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing an ioctl with proper internal locking.

Good point. It is the first step towards BKL less native ioctls. So it's certainly a good idea even for the non compat case.

Quoted 7 lines

2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I post the patch (updated for 2.6.10-rc2, boots) that I built for Juergen, below. If there's interest, let me know.

Patch looks good to me, except for some messed up white space that is probably easily fixed.

Quoted 3 lines

I'd like to add that my patch does not touch any in-kernel users, that would have to be done separately, probably as a first step simply taking the BKL inside ioctl_compat.

I doubt any of the compat wrappers need BKL, they never touch any global state and then just call sys_ioctl which takes the BKL only when needed.

Ok there is a slight possibility that out of tree code wrote compat wrappers that need BKL, but in that case they will just have to deal with the bugs. Removing register_ioctl32_conversion and some comments would take care of them anyways.

-Andi

#3 lore raw

Hello!
Quoting r. Andi Kleen ([email protected]) "Re: unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 10 lines
Quoted 3 lines

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing an ioctl with proper internal locking.

Good point. It is the first step towards BKL less native ioctls. So it's certainly a good idea even for the non compat case.

Quoted 3 lines

2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

Quoted 7 lines
Quoted 4 lines

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I post the patch (updated for 2.6.10-rc2, boots) that I built for Juergen, below. If there's interest, let me know.

Patch looks good to me, except for some messed up white space that is probably easily fixed.

I did try so .. Where? :)

Quoted 4 lines
Quoted 3 lines

I'd like to add that my patch does not touch any in-kernel users, that would have to be done separately, probably as a first step simply taking the BKL inside ioctl_compat.

Quoted 8 lines

I doubt any of the compat wrappers need BKL, they never touch any global state and then just call sys_ioctl which takes the BKL only when needed.

Ok there is a slight possibility that out of tree code wrote compat wrappers that need BKL, but in that case they will just have to deal with the bugs. Removing register_ioctl32_conversion and some comments would take care of them anyways.

I mean out of tree code can just implement ioctl_compat by taking the BKL if it needs it.

MST

author
#4 lore raw
Quoted 5 lines · Michael S. Tsirkin
Quoted 5 lines
Quoted 5 lines

2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

I post the patch (updated for 2.6.10-rc2, boots) that I built for Juergen, below. If there's interest, let me know.

Patch looks good to me, except for some messed up white space that is probably easily fixed.

I did try so .. Where? :)

Most of it actually. But perhaps your mailer just messed up the patch?

Anyways, if there are no negative comments I would recommend you submit your patch (preferably in a non messed up form) to [email protected] for inclusion into -mm*. The other parts of the proposal (converting the existing users and deprecating register_ioctl32_conversion) could be attacked then.

There is also some related work that could be done easily then, e.g. the network stack ioctls currently drop the BKL as first thing. With ioctl_native that could be probably done better. There may be other such low hanging fruit areas too.

-Andi

#5 lore raw

Hello!
Quoting r. Andi Kleen ([email protected]) "Re: unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 22 lines · Michael S. Tsirkin
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines

2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

I post the patch (updated for 2.6.10-rc2, boots) that I built for Juergen, below. If there's interest, let me know.

Patch looks good to me, except for some messed up white space that is probably easily fixed.

I did try so .. Where? :)

Most of it actually. But perhaps your mailer just messed up the patch?

Anyways, if there are no negative comments I would recommend you submit your patch (preferably in a non messed up form) to [email protected] for inclusion into -mm*. The other parts of the proposal (converting the existing users and deprecating register_ioctl32_conversion) could be attacked then.

Quoted 6 lines

There is also some related work that could be done easily then, e.g. the network stack ioctls currently drop the BKL as first thing. With ioctl_native that could be probably done better. There may be other such low hanging fruit areas too.

-Andi

OK, so here's a cleaned-up version, against 2.6.10-rc3. Please comment (and please Cc me, I'm not on the list).
If there are no negative comments I will try to submit to [email protected]

Andi, I'm trying again with an in-line patch, if the white-space is mangled by the mail system again, please let me know so I know to resend as an attachment.

Thanks,
MST

Documentation/filesystems/Locking +9 -0
diff -rpu linux-2.6.10-rc3-orig/Documentation/filesystems/Locking linux-2.6.10-rc3/Documentation/filesystems/Locking
@@ -350,6 +350,10 @@ prototypes:
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int,
 			unsigned long);
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int,
+			unsigned long);
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int,
+			unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
@@ -383,6 +387,8 @@ aio_write:		no
 readdir: 		no
 poll:			no
 ioctl:			yes	(see below)
+ioctl_native:		no	(see below)
+ioctl_compat:		no	(see below)
 mmap:			no
 open:			maybe	(see below)
 flush:			no
@@ -428,6 +434,9 @@ move ->readdir() to inode_operations and
 anything that resembles union-mount we won't have a struct file for all
 components. And there are other reasons why the current interface is a mess...
 
+->ioctl() on regular files is superceded by the ->ioctl_native() and
+->ioctl_compat() pair. The lock is not taken for these new calls.
+
 ->read on directories probably must go away - we should just enforce -EISDIR
 in sys_read() and friends.
 
include/linux/fs.h +17 -0
diff -rpu linux-2.6.10-rc3-orig/include/linux/fs.h linux-2.6.10-rc3/include/linux/fs.h
@@ -915,6 +915,23 @@ struct file_operations {
 	int (*readdir) (struct file *, void *, filldir_t);
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* The two calls ioctl_native and ioctl_compat described below
+	 * can be used as a replacement for the ioctl call above. They
+	 * take precedence over ioctl: thus if they are set, ioctl is
+	 * not used.  Unlike ioctl, BKL is not taken: drivers manage
+	 * their own locking. */
+
+	/* If ioctl_native is set, it is used instead of ioctl for
+	 * native ioctl syscalls.
+	 * Note that the standard glibc ioctl trims the return code to
+	 * type int, so dont try to put a 64 bit value there.
+	 */
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* If ioctl_compat is set, it is used for a 32 bit compatible
+	 * ioctl (i.e. a 32 bit binary running on a 64 bit OS).
+	 * Note that only the low 32 bit of the return code are passed
+	 * to the user-space application. */
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
include/linux/ioctl.h +8 -0
diff -rpu linux-2.6.10-rc3-orig/include/linux/ioctl.h linux-2.6.10-rc3/include/linux/ioctl.h
@@ -3,5 +3,13 @@
 
 #include <asm/ioctl.h>
 
+/* Handles standard ioctl commands, and returns the result in status.
+   Does nothing and returns non-zero if cmd is not one of the standard commands.
+*/
+
+struct file;
+int std_sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,
+		  struct file *filp, long *status);
+
 #endif /* _LINUX_IOCTL_H */
 
fs/ioctl.c +47 -19

106 lines not on this page · raw message

fs/compat.c +15 -8
diff -rpu linux-2.6.10-rc3-orig/fs/compat.c linux-2.6.10-rc3/fs/compat.c
@@ -401,15 +401,19 @@ asmlinkage long compat_sys_ioctl(unsigne
 				unsigned long arg)
 {
 	struct file * filp;
-	int error = -EBADF;
+	long error = -EBADF;
 	struct ioctl_trans *t;
+	int fput_needed;
 
-	filp = fget(fd);
-	if(!filp)
+	filp = fget_light(fd, &fput_needed);
+	if (!filp)
 		goto out2;
 
-	if (!filp->f_op || !filp->f_op->ioctl) {
-		error = sys_ioctl (fd, cmd, arg);
+	if (!std_sys_ioctl(fd, cmd, arg, filp, &error))
+		goto out;
+	else if (filp->f_op && filp->f_op->ioctl_compat) {
+		error = filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
+						 filp, cmd, arg);
 		goto out;
 	}
 
@@ -425,9 +429,12 @@ asmlinkage long compat_sys_ioctl(unsigne
 			error = t->handler(fd, cmd, arg, filp);
 			unlock_kernel();
 			up_read(&ioctl32_sem);
-		} else {
+		} else if (filp->f_op && filp->f_op->ioctl) {
 			up_read(&ioctl32_sem);
-			error = sys_ioctl(fd, cmd, arg);
+			lock_kernel();
+			error = filp->f_op->ioctl(filp->f_dentry->d_inode,
+						  filp, cmd, arg);
+			unlock_kernel();
 		}
 	} else {
 		up_read(&ioctl32_sem);
@@ -466,7 +473,7 @@ asmlinkage long compat_sys_ioctl(unsigne
 		}
 	}
 out:
-	fput(filp);
+	fput_light(filp, fput_needed);
 out2:
 	return error;
 }
#6 lore raw
Quoted 5 lines · Michael S. Tsirkin

+       /* The two calls ioctl_native and ioctl_compat described below +        * can be used as a replacement for the ioctl call above. They +        * take precedence over ioctl: thus if they are set, ioctl is +        * not used.  Unlike ioctl, BKL is not taken: drivers manage +        * their own locking. */

I don't really understand how this should deal with drivers that have both generic and private ioctl conversion handlers. E.g. drivers/s390/block/dasd*.c want to go through the handlers in fs/compat_ioctl.c for stuff like BLKGETSIZE, while it also allows third party modules to dynamically register additional ioctls. See drivers/s390/block/dasd_cmb.c for an example, I think EMC are doing something similar to support their drives.

If the dasd driver now implements an ioctl_compat() method, who will call the standard conversion handlers?

Arnd <><

author
#7 lore raw
Quoted 10 lines

I don't really understand how this should deal with drivers that have both generic and private ioctl conversion handlers. E.g. drivers/s390/block/dasd*.c want to go through the handlers in fs/compat_ioctl.c for stuff like BLKGETSIZE, while it also allows third party modules to dynamically register additional ioctls. See drivers/s390/block/dasd_cmb.c for an example, I think EMC are doing something similar to support their drives.

If the dasd driver now implements an ioctl_compat() method, who will call the standard conversion handlers?

How about just calling back to a special function from these special ioctl handlers?

-Andi

#8 lore raw
Quoted 7 lines · Andi Kleen
Quoted 3 lines

If the dasd driver now implements an ioctl_compat() method, who will call the standard conversion handlers?

How about just calling back to a special function from these special ioctl handlers?

Sorry, I don't understand. AFAICS, if the driver does not have a ioctl_compat() file op, it will only be called for those ioctl numbers that are registered in fs/compat_ioctl.c, but not for the ones that were added by a third party module.
If it has a ioctl_compat() function, it can handle its own ioctls including those that are dynamically added, but not any generic ones that have static conversion functions in fs/compat_ioctl.c. Do you mean it should call back from its private ioctl_compat() function to the global ioctl32_hash_table[] lookup?

Arnd <><

author
#9 lore raw
Quoted 3 lines

Do you mean it should call back
from its private ioctl_compat() function to the global ioctl32_hash_table[] lookup?

Yes.

Some ioctl paths already work this way, e.g. in the block layer.

-Andi

#10 lore raw
Quoted 7 lines · Andi Kleen
Quoted 3 lines

Do you mean it should call back
from its private ioctl_compat() function to the global ioctl32_hash_table[] lookup?

Yes.

Some ioctl paths already work this way, e.g. in the block layer.

Hmm. I just had another idea. Maybe it's easier to return -ENOIOCTLCMD from ->ioctl_compat() in order to get back to the hash lookup. How about the change below?

      Arnd <><
fs/compat.c +0 -0
@@ somewhere in compat_sys_ioctl() @@
        else if (filp->f_op && filp->f_op->ioctl_compat) {
                error = filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
                                                 filp, cmd, arg);
-               goto out;
+               if (error != -ENOIOCTLCMD)
+                        goto out;
        }
 
author
#11 lore raw
Quoted 3 lines

Hmm. I just had another idea. Maybe it's easier to return -ENOIOCTLCMD from ->ioctl_compat() in order to get back to the hash lookup. How about the change below?

Looks good too to me.

-Andi

Quoted 16 lines
      Arnd <><
fs/compat.c +0 -0

@@ somewhere in compat_sys_ioctl() @@

        else if (filp->f_op && filp->f_op->ioctl_compat) {
                error = filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
                                                 filp, cmd, arg);
fs/compat.c +2 -1
-               goto out;
+               if (error != -ENOIOCTLCMD)
+                        goto out;
        }
#12 lore raw
In reply to Arnd Bergmann

Hello!
Quoting r. Arnd Bergmann ([email protected]) "Re: unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 24 lines · Andi Kleen
Quoted 2 lines
Quoted 2 lines

Do you mean it should call back
from its private ioctl_compat() function to the global

ioctl32_hash_table[]

Quoted 5 lines
Quoted 1 line

lookup?

Yes.

Some ioctl paths already work this way, e.g. in the block layer.

Hmm. I just had another idea. Maybe it's easier to return -ENOIOCTLCMD from ->ioctl_compat() in order to get back to the hash lookup. How about the change below?

      Arnd <><
fs/compat.c +0 -0

@@ somewhere in compat_sys_ioctl() @@

        else if (filp->f_op && filp->f_op->ioctl_compat) {
                error =
filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
                                                 filp, cmd, arg);

fs/compat.c

Quoted 4 lines
fs/compat.c +2 -1
-               goto out;
+               if (error != -ENOIOCTLCMD)
+                        goto out;
        }

But what if you really wanted to return -ENOIOCTLCMD? And, the idea was to get rid of the hash eventually?

MST

author
#13 lore raw
Quoted 1 line

But what if you really wanted to return -ENOIOCTLCMD?

It's an internal error code as Arnd pointed out.

Quoted 1 line

And, the idea was to get rid of the hash eventually?

Just rid of the dynamic hash changes. I don't have any plans to convert all the static ioctls in fs/compat_ioctl.c (that would be a lot of work without clear gain)

-Andi

#14 lore raw
Quoted 3 lines · Andi Kleen
Quoted 1 line

But what if you really wanted to return -ENOIOCTLCMD?

It's an internal error code as Arnd pointed out.

can we be sure this will never escape to userspace? i can think of somewhere else we already do this (EFSCORRUPTED) and it does (somewhat deliberately escape to userspace) and this causes confusion from time to time when applications see 'errno == 990'

#15 lore raw
Quoted 6 lines · Chris Wedgwood
Quoted 1 line

It's an internal error code as Arnd pointed out.

can we be sure this will never escape to userspace?  i can think of somewhere else we already do this (EFSCORRUPTED) and it does (somewhat deliberately escape to userspace) and this causes confusion from time to time when applications see 'errno == 990'

It's safe for the compat ioctl case. If someone wants to use the same function for the compat and native handler, it would be a bug to return -ENOIOCTLCMD from that handler with the current code.

To work around this, we could either convert -ENOIOCTLCMD to -EINVAL when returning from sys_ioctl(). Or we could WARN_ON(err == -ENOIOCTLCMD) for the native path in order to make the intention clear.

Arnd <><

#16 lore raw

Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioct l32 revisited.

Hello!
Quoting r. Arnd Bergmann ([email protected]) "Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioct l32 revisited.":

Quoted 8 lines · Chris Wedgwood
Quoted 6 lines
Quoted 1 line

It's an internal error code as Arnd pointed out.

can we be sure this will never escape to userspace?  i can think of somewhere else we already do this (EFSCORRUPTED) and it does (somewhat deliberately escape to userspace) and this causes confusion from time to time when applications see 'errno == 990'

Quoted 6 lines

It's safe for the compat ioctl case. If someone wants to use the same function for the compat and native handler, it would be a bug to return -ENOIOCTLCMD from that handler with the current code.

To work around this, we could either convert -ENOIOCTLCMD to -EINVAL when returning from sys_ioctl().

That would be -ENOTTY, I think.

Quoted 5 lines

Or we could WARN_ON(err ==
-ENOIOCTLCMD)
for the native path in order to make the intention clear.

Arnd <><

#17 lore raw

Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioct l32 revisited.

In reply to Arnd Bergmann

Hello!
Quoting r. Arnd Bergmann ([email protected]) "Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioct l32 revisited.":

Quoted 12 lines · Chris Wedgwood
Quoted 6 lines
Quoted 1 line

It's an internal error code as Arnd pointed out.

can we be sure this will never escape to userspace? i can think of somewhere else we already do this (EFSCORRUPTED) and it does (somewhat deliberately escape to userspace) and this causes confusion from time to time when applications see 'errno == 990'

It's safe for the compat ioctl case. If someone wants to use the same function for the compat and native handler, it would be a bug to return -ENOIOCTLCMD from that handler with the current code.

Quoted 6 lines

To work around this, we could either convert -ENOIOCTLCMD to -EINVAL when returning from sys_ioctl(). Or we could WARN_ON(err == -ENOIOCTLCMD)
for the native path in order to make the intention clear.

Arnd <><

You mean like this?

fs/ioctl.c 2005-01-05 21:14:09.341195424 +0200 renamed from fs/ioctl.c.ok 2005-01-05 21:13:46.165718632 +0200 +1 -1
@@ -162,7 +162,7 @@ asmlinkage long sys_ioctl(unsigned int f
 out:
        fput_light(filp, fput_needed);
 out2:
-       return error;
+       return error==-ENOIOCTLCMD?-ENOTTY:error;
 }
 
 /*
fs/compat.c 2005-01-05 21:16:04.922624376 +0200 renamed from fs/compat.c.ok 2005-01-05 21:15:34.221291688 +0200 +1 -1
@@ -476,7 +476,7 @@ asmlinkage long compat_sys_ioctl(unsigne
 out:
        fput_light(filp, fput_needed);
 out2:
-       return error;
+       return error==-ENOIOCTLCMD?-ENOTTY:error;
 }
 
 static int get_compat_flock(struct flock *kfl, struct compat_flock __user *ufl)
#18 lore raw

Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioct l32 revisited.

Quoted 1 line · Michael S. Tsirkin

You mean like this?

Yes, except that

Quoted 11 lines
fs/ioctl.c     2005-01-05 21:14:09.341195424 +0200 renamed from fs/ioctl.c.ok  2005-01-05 21:13:46.165718632 +0200 +0 -0
@@ -162,7 +162,7 @@ asmlinkage long sys_ioctl(unsigned int f

 out:
        fput_light(filp, fput_needed);
 out2:
-       return error;
+       return error==-ENOIOCTLCMD?-ENOTTY:error;
 }

Quoted 1 line

 /*

- Spacing is broken.
- I think the convention would be to use EINVAL here. ENOTTY mean 'this device does not support ioctl', while EINVAL is used for 'ioctl is supported, but not this number'.
- I would put the conversion only in the place that calls ->native_ioctl in order to make clearer why it is done.

Quoted 11 lines
fs/compat.c    2005-01-05 21:16:04.922624376 +0200 renamed from fs/compat.c.ok 2005-01-05 21:15:34.221291688 +0200 +0 -0
@@ -476,7 +476,7 @@ asmlinkage long compat_sys_ioctl(unsigne

 out:
        fput_light(filp, fput_needed);
 out2:
-       return error;
+       return error==-ENOIOCTLCMD?-ENOTTY:error;
 }

 static int get_compat_flock(struct flock *kfl, struct compat_flock __user *ufl)

I don't think it's needed for the compat case, as we are already handling ENOIOCTLCMD here by doing to hash lookup.

I'd also prefer the code to be based on Christophs version, which unfortunately is lacking handling for ENOIOCTLCMD from compat_ioctl, but otherwise looks better.

	Arnd <><
#19 lore raw
In reply to Michael S. Tsirkin

At Wed, 15 Dec 2004 09:46:35 +0200,

Quoted 8 lines · Michael S. Tsirkin

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing
an ioctl with proper internal locking.
2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I like the idea very well. Other benifits in addition:

3. Can avoid conflict of ioctls with the same value since the convertor is registered locally.

4. Can reject unsupported ioctls for the device (but may be valid for other devices) before converting the data - the same reason as above.

--
Takashi Iwai <[email protected]> ALSA Developer - www.alsa-project.org

#20 lore raw
Quoted 9 lines · Takashi Iwai

At Wed, 15 Dec 2004 09:46:35 +0200,

Quoted 7 lines · Michael S. Tsirkin

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing
an ioctl with proper internal locking.
2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

Quoted 4 lines
Quoted 1 line

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I like the idea very well. Other benifits in addition:

How does this all relate to Ingo's ->unlocked_ioctl stuff which is "an official way to do BKL-less ioctls"?

http://lkml.org/lkml/2004/12/14/53

Lee

#21 lore raw

Hello!
Quoting r. Lee Revell ([email protected]) "Re: unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 14 lines · Takashi Iwai
Quoted 12 lines

At Wed, 15 Dec 2004 09:46:35 +0200,

Quoted 8 lines · Michael S. Tsirkin

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing
an ioctl with proper internal locking.
2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) > >

I like the idea very well. Other benifits in addition:

Quoted 6 lines

How does this all relate to Ingo's ->unlocked_ioctl stuff which is "an official way to do BKL-less ioctls"?

http://lkml.org/lkml/2004/12/14/53

Lee

It conflicts :) When I wrote the original patch for 2.6.8.1 I didnt see the unlocked_ioctl.patch.

unlocked_ioctl is the same as ioctl_native in my patch, except that

1. I added more documentation in several places :) (notably Documentation/filesystems/Locking)

2. I thought it a bit silly to name a function for what it does not do (does not take a lock), and we still need a call for the compat layer.

My patch adds another call to enable special handling for 32 bit ioctls on 64 bit systems.

I could look at porting to -rc3-mm1, unless
we dont want to back unlocked_ioctl.patch off.
What do people here think?

MST

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/

author
#22 lore raw
In reply to Lee Revell
Quoted 10 lines · Lee Revell
Quoted 9 lines · Takashi Iwai

At Wed, 15 Dec 2004 09:46:35 +0200,

Quoted 7 lines · Michael S. Tsirkin

There were two additional motivations for my patch:
1. Make it possible to avoid the BKL completely by writing
an ioctl with proper internal locking.
2. As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

Quoted 7 lines
Quoted 4 lines
Quoted 1 line

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

I like the idea very well. Other benifits in addition:

How does this all relate to Ingo's ->unlocked_ioctl stuff which is "an official way to do BKL-less ioctls"?

This is another "official" way which is more powerful. I suppose it will replace Ingo's patch.

-Andi

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/

#23 lore raw
Quoted 5 lines · Andi Kleen
Quoted 2 lines

How does this all relate to Ingo's ->unlocked_ioctl stuff which is "an official way to do BKL-less ioctls"?

This is another "official" way which is more powerful. I suppose it will replace Ingo's patch.

the ALSA changes are mine but i'm otherwise building ontop of the following patch in -rc3-mm1:

http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10-rc3/2.6.10-rc3-mm1/broken-out/unlocked_ioctl.patch

whichever approach gets adopted upstream, the various actors ought to synchronize a bit more - this is the third approach so far in a very short interval to get rid of the BKL in ioctls :-)

Ingo

author
#24 lore raw
Quoted 9 lines · Ingo Molnar
Quoted 5 lines · Andi Kleen
Quoted 2 lines

How does this all relate to Ingo's ->unlocked_ioctl stuff which is "an official way to do BKL-less ioctls"?

This is another "official" way which is more powerful. I suppose it will replace Ingo's patch.

Quoted 8 lines

the ALSA changes are mine but i'm otherwise building ontop of the following patch in -rc3-mm1:

http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10-rc3/2.6.10-rc3-mm1/broken-out/unlocked_ioctl.patch

whichever approach gets adopted upstream, the various actors ought to synchronize a bit more - this is the third approach so far in a very short interval to get rid of the BKL in ioctls :-)

I think Michael's patch is best (but I'm probably biased) because it addresses the independent problem of a race in unregister_ioctl32_conversion() too (and some other smaller issues in ioctl 32bit emulation)

Andrew, could we replace unlocked_ioctl.patch with Michael's patch? Adapting depending code should be very easy, since only the name of the function vector has changed.

-Andi

#25 lore raw
Quoted 4 lines · Andi Kleen

I think Michael's patch is best (but I'm probably biased) because it addresses
the independent problem of a race in unregister_ioctl32_conversion() too (and some other smaller issues in ioctl 32bit emulation)

They should be separate patches.

Quoted 1 line

Andrew, could we replace unlocked_ioctl.patch with Michael's patch?

Where would one locate Michael's patch?

#26 lore raw

Hello!
Quoting r. Andrew Morton ([email protected]) "Re: [discuss] Re: unregister_ioctl32_conversion and modules. ioctl32 revisited.":

Quoted 11 lines
Quoted 4 lines · Andi Kleen

I think Michael's patch is best (but I'm probably biased) because it addresses
the independent problem of a race in unregister_ioctl32_conversion() too (and some other smaller issues in ioctl 32bit emulation)

They should be separate patches.

Quoted 1 line

Andrew, could we replace unlocked_ioctl.patch with Michael's patch?

Where would one locate Michael's patch?

Here it is for review (against 2.6.10-rc3) http://lkml.org/lkml/2004/12/15/62
I plan to incorporate Arnd Bergmann's comments and repost later today.

MST

author
#27 lore raw
In reply to Andrew Morton
Quoted 7 lines · Andrew Morton
Quoted 4 lines · Andi Kleen

I think Michael's patch is best (but I'm probably biased) because it addresses
the independent problem of a race in unregister_ioctl32_conversion() too (and some other smaller issues in ioctl 32bit emulation)

They should be separate patches.

The two new methods (ioctl_native and ioctl_compat) are in the same patch because they basically touch the same piece of code and would be hard to separate. The other stuff (actually replacing register_ioctl32_conversion and converting a few obvious users to use the BKL less fast path) will be addon patches.

Quoted 4 lines
Quoted 2 lines

Andrew, could we replace unlocked_ioctl.patch with Michael's patch?

Where would one locate Michael's patch?

See his mail.

-Andi

#28 lore raw

PATCH 1/1 unregister_ioctl32_conversion and modules. ioctl32 revisited.

In reply to Andi Kleen

Hello, Andrew!
Since I didnt get any negative comments on this (and some positive) Andi Kleen suggested I submit the following patch to you. It boots fine for me, please consider for mainline inclusion.

Dependencies:
The patch below is against 2.6.10-rc3. Please note it replaces Ingo's ->unlocked_ioctl patch from rc3-mm1, so you have to back that off before applying mine to mm:

http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10-rc3/2.6.10-rc3-mm1/broken-out/unlocked_ioctl.patch

Please mail me directly with comments since I'm not on the list.

Changes from the last version I posted ( http://lkml.org/lkml/2004/12/15/62 )
- Two whitespace cleanups. I hope its all good now.
- Arnd Bergmann's idea: make it possible to go back from ioctl_compat to hash lookup (good for static ioctl tables) by returning -ENOIOCTLCMD from ioctl_compat
- Petr Vandrovec's idea: add HAVE_... macros to make it easier for out-of-kernel modules to detect the new file_operations.

Description:
The patch introduces two new methods (ioctl_native and ioctl_compat):
ioctl_native is called on native ioctl syscall, without BKL being taken, and is, in that respect, equivalent to Ingo's unlocked_ioctl (which is why it conflicts).
ioctl_compat is called on compat (i.e. 32 bit app on 64 bit OS) ioctl, again without BKL being taken.
If a new call is not defined, default to the old behaviour.
(It should be possible for me to build a patch that applies on top of Ingo's unlocked_ioctl, if its really needed let me know and I'll look at it the next week.)

Motivation: Quoting Andi Kleen:

Quoted 8 lines

Hallo,

There seems to be an unfixable module unload race in the current register_ioctl32_conversion support. The problem is that there is no way to wait for a conversion handler is blocked in a sleeping *_user access before module unloading. The module count is also not increase in this case.
...

[Snip]

Quoted 33 lines

A better solution would be to switch the few users of register_ioctl32_conversion() over to a new ->ioctl32 method in file_operations and do the conversion from there. This would avoid the race because the VFS will take care of the module count in open/release.

Michael did a patch for this some time ago for a different motivation - he had some benchmarks where the hash table lookup hurt and it was noticeable faster to use a O(1) ->ioctl32 lookup from the file_operations for his application.

An useful side effect would be also to the ability to support a per device ioctl name space. While the core kernel doesn't have much (any?) ioctls with duplicated numbers this mistake seems to be quite common in out of tree drivers and it is hard to fix without breaking compatibility.

And it would be faster for this case of course too, so even performance critical in kernel ioctls could be slowly converted to ioctl32 I wouldn't do it for all, because the current central tables work reasonably well for them and most ioctls are not speed critical anyways.

As for in kernel code it won't affect much code because near all conversion handlers in the main tree are not modular (alsa is one exception, there are a few others e.g. in some raid drivers). I expect it will be a bigger problem in the future though as ioctl emulation becomes more widespread and is done more in individual drivers.

averell:lsrc/v2.6/linux% gid register_ioctl32_conversion | wc -l 75
averell:lsrc/v2.6/linux%

Quoted 5 lines

In tree users are alsa, aaraid, fusion, some s390 stuff, sisfb, alsa

My proposal would be to dust off Michael's patch and convert all users in tree over to ioctl32 and then deprecate and later remove (un)register_ioctl32_conversion

There was an additional motivation for my patch:
As noted by Juergen Kreileder, the compat hash does not work for ioctls that encode additional information in the command, like this:

#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)

Comments?

Thanks,
MST

Documentation/filesystems/Locking +9 -0
diff -rup linux-2.6.10-rc3/Documentation/filesystems/Locking linux-2.6.10-rc3-mstioctl/Documentation/filesystems/Locking
@@ -350,6 +350,10 @@ prototypes:
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int,
 			unsigned long);
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int,
+			unsigned long);
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int,
+			unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
@@ -383,6 +387,8 @@ aio_write:		no
 readdir: 		no
 poll:			no
 ioctl:			yes	(see below)
+ioctl_native:		no	(see below)
+ioctl_compat:		no	(see below)
 mmap:			no
 open:			maybe	(see below)
 flush:			no
@@ -428,6 +434,9 @@ move ->readdir() to inode_operations and
 anything that resembles union-mount we won't have a struct file for all
 components. And there are other reasons why the current interface is a mess...
 
+->ioctl() on regular files is superceded by the ->ioctl_native() and
+->ioctl_compat() pair. The lock is not taken for these new calls.
+
 ->read on directories probably must go away - we should just enforce -EISDIR
 in sys_read() and friends.
 
include/linux/fs.h +24 -0
diff -rup linux-2.6.10-rc3/include/linux/fs.h linux-2.6.10-rc3-mstioctl/include/linux/fs.h
@@ -900,6 +900,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the ioctl_native and ioctl_compat
+ * fields in struct file_operations. */
+#define HAVE_IOCTL_COMPAT 1
+#define HAVE_IOCTL_NATIVE 1
+
 /*
  * NOTE:
  * read, write, poll, fsync, readv, writev can be called
@@ -915,6 +921,24 @@ struct file_operations {
 	int (*readdir) (struct file *, void *, filldir_t);
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* The two calls ioctl_native and ioctl_compat described below
+	 * can be used as a replacement for the ioctl call above. They
+	 * take precedence over ioctl: thus if they are set, ioctl is
+	 * not used.  Unlike ioctl, BKL is not taken: drivers manage
+	 * their own locking. */
+
+	/* If ioctl_native is set, it is used instead of ioctl for
+	 * native ioctl syscalls.
+	 * Note that the standard glibc ioctl trims the return code to
+	 * type int, so dont try to put a 64 bit value there.
+	 */
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int, unsigned long);
+	/* If ioctl_compat is set, it is used for a 32 bit compatible
+	 * ioctl (i.e. a 32 bit binary running on a 64 bit OS).
+	 * Return -ENOIOCTLCMD if you dont handle it.
+	 * Note that only the low 32 bit of the return code are passed
+	 * to the user-space application. */
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
include/linux/ioctl.h +8 -0
diff -rup linux-2.6.10-rc3/include/linux/ioctl.h linux-2.6.10-rc3-mstioctl/include/linux/ioctl.h
@@ -3,5 +3,13 @@
 
 #include <asm/ioctl.h>
 
+/* Handles standard ioctl commands, and returns the result in status.
+   Does nothing and returns non-zero if cmd is not one of the standard commands.
+*/
+
+struct file;
+int std_sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,
+		  struct file *filp, long *status);
+
 #endif /* _LINUX_IOCTL_H */
 
fs/ioctl.c +48 -20

107 lines not on this page · raw message

fs/compat.c +16 -8
diff -rup linux-2.6.10-rc3/fs/compat.c linux-2.6.10-rc3-mstioctl/fs/compat.c
@@ -401,16 +401,21 @@ asmlinkage long compat_sys_ioctl(unsigne
 				unsigned long arg)
 {
 	struct file * filp;
-	int error = -EBADF;
+	long error = -EBADF;
 	struct ioctl_trans *t;
+	int fput_needed;
 
-	filp = fget(fd);
-	if(!filp)
+	filp = fget_light(fd, &fput_needed);
+	if (!filp)
 		goto out2;
 
-	if (!filp->f_op || !filp->f_op->ioctl) {
-		error = sys_ioctl (fd, cmd, arg);
+	if (!std_sys_ioctl(fd, cmd, arg, filp, &error))
 		goto out;
+	else if (filp->f_op && filp->f_op->ioctl_compat) {
+		error = filp->f_op->ioctl_compat(filp->f_dentry->d_inode,
+						 filp, cmd, arg);
+		if (error != -ENOIOCTLCMD)
+			goto out;
 	}
 
 	down_read(&ioctl32_sem);
@@ -425,9 +430,12 @@ asmlinkage long compat_sys_ioctl(unsigne
 			error = t->handler(fd, cmd, arg, filp);
 			unlock_kernel();
 			up_read(&ioctl32_sem);
-		} else {
+		} else if (filp->f_op && filp->f_op->ioctl) {
 			up_read(&ioctl32_sem);
-			error = sys_ioctl(fd, cmd, arg);
+			lock_kernel();
+			error = filp->f_op->ioctl(filp->f_dentry->d_inode,
+						  filp, cmd, arg);
+			unlock_kernel();
 		}
 	} else {
 		up_read(&ioctl32_sem);
@@ -466,7 +474,7 @@ asmlinkage long compat_sys_ioctl(unsigne
 		}
 	}
 out:
-	fput(filp);
+	fput_light(filp, fput_needed);
 out2:
 	return error;
 }
#29 lore raw

Documentation/filesystems/Locking prototypes: · line 356

Quoted 4 lines
Documentation/filesystems/Locking +4 -0
+	long (*ioctl_native) (struct inode *, struct file *, unsigned int,
+			unsigned long);
+	long (*ioctl_compat) (struct inode *, struct file *, unsigned int,
+			unsigned long);

Please remove the struct inode * argument, it's easily retrievable from file->f_dentry->d_inode. The ioctl prototype is a leftover from really old days where that wasn't true.

#30 lore raw

2.6.10-mm1

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm1

- Added new bk-kconfig tree from Sam

- The bk-usb tree has been dropped due to a tendency to oops.

- Lots of stuff.

Changes since 2.6.10-rc3-mm1:

linus.patch
bk-acpi.patch
bk-alsa.patch
bk-cifs.patch
bk-cpufreq.patch
bk-i2c.patch
bk-ide-dev.patch
bk-input.patch
bk-dtor-input.patch
bk-jfs.patch
bk-kbuild.patch
bk-kconfig.patch
bk-mtd.patch
bk-netdev.patch
bk-ntfs.patch
bk-pci.patch
bk-scsi.patch

External bk trees

-ppc64-make-up-kernel-run-on-power4-logical-partition.patch -direct-io-set-PF_SYNCWRITE.patch
-msync-set-PF_SYNCWRITE.patch -reduce-ext3-log-spamming-blank-lines.patch -do_task_stat-use-pid_alive.patch
-fix-ext2-ext3-memory-leak.patch
-uml-ramdisk-config-fix.patch
-shmctl-shm_lock-perms.patch
-vmlib-wrapped-executable-brk.patch -vmlib-wrapped-mprotect-flags.patch -ppc64-workaround-pci-issue-on-g5.patch -ppc64-pseries-shared-processor-fixes.patch -highmemc-fix-bio-error-propagation.patch -documentation-for-ia64-serial-device-name-changes.patch -add-missing-__kernel__-or-other-protections.patch
-scsi-imm-fix.patch
-gcc4-fixes.patch
-include-asm-x86_64-pgtableh-pgd_offset_gate.patch -swsusp-bugfixes-do-not-oops-when-not-enough-memory-during-resume.patch -swsusp-bugfixes-fix-memory-leak.patch -swsusp-fixes-fix-confusing-printk.patch
-swsusp-fix-header-typo.patch
-swsusp-fix-types.patch -ppc64-make-sure-lppaca-doesnt-cross-page-boundary.patch -arcnet-fixes.patch -x25-when-receiving-a-call-check-listening-sockets-for-matching-call-user-data.patch -x25-remove-unused-header-files.patch -net-socketc__sock_create-cleanup.patch -remove-netfilter-warnings-on-copy_to_user.patch -small-drivers-atm-cleanups.patch -ppc64-fix-signal-mask-on-delivery-error.patch -ppc64-sigmasking-fix.patch
-xen-vmm-4-alloc_skb_from_cache.patch
-sis-drm-bool-bitfields.patch -allocate-sysfs_dirent-structures-from-their-own-slab.patch -parenthesize-init_wait.patch -fix-concurrent-access-to-dev-urandom.patch -ide-cd-unable-to-read-multisession-dvds.patch -fix-bogus-echild-return-from-wait-with-zombie-group-leader.patch -code-to-register-amba-serial-console-is-missing.patch -selinux-adds-a-private-inode-operation.patch -reiserfs-private-inode-abstracted-to-static-inline.patch -reiserfs-fixes-to-allow-reiserfs-to-use-selinux-attributes.patch -reiserfs-cleaning-up-const-checks.patch
-selinux-hooks-cleanup.patch
-dvb-saa7146-driver-misc-updates.patch
-dvb-b2c2-driver-splitup.patch
-dvb-update-dib-usb-driver.patch
-dvb-dvb-core-update.patch
-dvb-frontend-update.patch
-dvb-av7110-driver-update.patch
-documentation-mem=.patch
-rocket-documentation-changes.patch -remove-speedstep_coppermine-docs.patch -final-polish-on-disk-ioctl-documentation.patch -scsi-qla2xxx-qla_rscnc-remove-unused-functions-fwd.patch

Merged

+vmscan-total_scanned-fix.patch

Fix kswapd CPU utilisation problem

-iounmap-fix.patch
-pageattr-fix.patch
-pageattr-flush-tlb-fix.patch
-pageattr-guard-page.patch

These were conflicting with other patches

-4level-core-patch.patch
-4level-bogus-bug_on.patch -4level-fix-vmalloc-overflow.patch -4level-core-tweaks.patch
-4level-highpte-fix.patch -4level-architecture-changes-for-alpha.patch -4level-architecture-changes-for-arm.patch -4level-fixes-arm.patch -4level-architecture-changes-for-cris.patch -4level-convert-drm-to-4levels.patch -4level-add-asm-generic-support-for-emulating.patch -4level-make-3level-fallback-more-type-safe.patch -4level-ia64-support.patch -4level-ia64-support-fix.patch -pml4-ia64-build-fix.patch -4level-architecture-changes-for-i386.patch -4level-architecture-changes-for-i386-fix.patch -4level-architecture-changes-for-m32r.patch -4level-architecture-changes-for-ppc.patch -4level-architecture-changes-for-ppc64.patch -4level-architecture-changes-for-s390.patch -4level-architecture-changes-for-s390-fix.patch -4level-architecture-changes-for-sh.patch -4level-architecture-changes-for-sh64.patch -4level-architecture-changes-for-sparc.patch -4level-architecture-changes-for-sparc64.patch -4level-architecture-changes-for-x86_64.patch -4level-architecture-changes-for-x86_64-pml4_offset_gate-fix.patch -uml-pml4-support.patch -uml-config_highmem-atomicity-fix.patch

Andi and Nick's 4-level-pagetable implementation was merged.

+ide-dev-build-fix.patch

Fix build error in bk-ide-dev.patch

+bk-kbuild-in_gate_area_no_task-warning-fix.patch

Fix build error in bk-kbuild.patch

-numa-policies-for-file-mappings-mpol_mf_move.patch

Dropped due to patch clashes. Is being redone.

+slab-add-more-arch-overrides-to-control-object-alignment.patch

Allow architecture to override slab minimum alignment.

+collect-page_states-only-from-online-cpus.patch +collect-page_states-only-from-online-cpus-tidy.patch

get_page_state() SMP speedup.

+alloc_large_system_hash-numa-interleaving.patch
+filesystem-hashes-numa-interleaving.patch
+tcp-hashes-numa-interleaving.patch

Spread the large hashtables across NUMA nodes

-page-fault-scalability-patch-v11-ia64-atomic-pte-operations.patch -page-fault-scalability-patch-v11-universal-cmpxchg-for-i386.patch -page-fault-scalability-patch-v11-i386-atomic-pte-operations.patch -page-fault-scalability-patch-v11-x86_64-atomic-pte-operations.patch -page-fault-scalability-patch-v11-s390-atomic-pte-operations.patch

These were causing patch clashes and aren't a lot of use on their own.

+xircom_tulip_cb-build-fix-warning-fix.patch

Fix xircom_cb warning

+netfilter-fix-return-values-of-ipt_recent-checkentry.patch +netfilter-fix-ip_conntrack_proto_sctp-exit-on-sysctl.patch +netfilter-fix-ip_ct_selective_cleanup-and-rename.patch +netfilter-add-comment-above-remove_expectations-in.patch +netfilter-remove-ipchains-and-ipfwadm-compatibility.patch +netfilter-remove-copy_to_user-warnings-in-netfilter.patch +netfilter-fix-cleanup-in-ipt_recent-should-ipt_registrater_match-error.patch +fix-broken-rst-handling-in-ip_conntrack.patch

netfilter fixes

+ppc32-add-uimage-to-default-targets.patch +ppc32-fix-io_remap_page_range-for-36-bit-phys-platforms.patch +ppc32-resurrect-documentation-powerpc-cpu_featurestxt.patch

ppc32 udpates

-remove-unnecessary-inclusions-of-asm-aouth.patch

This broke the build.

+gp-rel-data-support-vs-bk-kbuild-fix.patch

Fix gp-rel-data-support.patch versus bk-kbuild.

+frv-debugging-fixes.patch
+frv-minix-ext2-bitops-fixes.patch
+frv-perfctr_info-syscall.patch
+frv-update-the-trap-tables-comment.patch
+frv-accidental-tlb-entry-write-protect-fix.patch
+frv-pagetable-handling-fixes.patch
+frv-fr55x-cpu-support-fixes.patch

FRV arch updates

+implement-nommu-find_vma.patch +fix-nommu-map_shared-handling.patch +permit-nommu-map_shared-of-memory-backed-files.patch +cross-reference-nommu-vmas-with-mappings.patch

nommu fixes

+trivial-cleanup-in-arch-i386-kernel-heads.patch
+remove-pfn_to_pgdat-on-x86.patch
+boot_ap_for_nondefault_kernel.patch
+i386-boot-loader-ids.patch
+proc-sys-kernel-bootloader_type.patch

x86 updates

-x86_64-cleanups-preparing-for-memory-hotplug.patch

THis broke and is being redone

+xen-vmm-4-return-code-for-arch_free_page-fix.patch

Fix xen-vmm-4-return-code-for-arch_free_page.patch

+arm26-remove-arm32-cruft.patch +arm26-update-the-atomic-ops.patch +arm26-build-system-updates.patch +arm26-update-comments-headers-notes.patch +arm26-necessary-compilation-fixes-for-2610.patch +arm26cleanup-trap-handling-assembly.patch +arm26-new-execve-code.patch +arm26-move-some-files-to-better-locations.patch +arm26-remove-shark-arm32-from-arm26.patch +arm26-softirq-update.patch +arm26-update-systemh-to-some-semblance-of-recentness.patch +arm26-replace-arm32-time-handling-code-with-smaller-version.patch +arm26-tlb-update.patch +arm26-better-put_user-macros.patch +arm26-better-unistdh-reimplemented-based-on-arm32.patch

arm26 architecture update

+fix-naming-in-swsusp.patch +swsusp-kill-unused-variable.patch +swsusp-kill-one-line-helpers-handle-read-errors.patch +swsusp-small-cleanups.patch +swsusp-kill-on2-algorithm-in-swsusp.patch +swsusp-try_to_freeze-to-make-freezing-hooks-nicer.patch +swsusp-try_to_freeze-to-make-freezing-hooks-nicer-fix.patch

swsusp update

+m32r-add-new-relocation-types-to-elfh.patch
+m32r-support-pgprot_noncached.patch
+m32r-update-ptracec-for-multithread.patch
+m32r-fix-not-to-execute-noexec-pages-0-3.patch
+m32r-cause-sigsegv-for-nonexec-page.patch
+m32r-dont-encode-ace_instruction-in.patch
+m32r-clean-up-arch-m32r-mm-faultc-3-3.patch
+m32r-clean-up-include-asm-m32r-pgtableh.patch
+m32r-support-page_none-1-3.patch
+m32r-remove-page_user-2-3.patch
+m32r-clean-up.patch
+m32r-include-asm-m32r-thread_infoh-minor.patch
+m32r-use-kmalloc-for-m32r-stacks-2-2.patch
+m32r-make-kernel-headers-for-mutual.patch
+m32r-use-generic-hardirq-framework.patch
+m32r-update-include-asm-m32r-systemh.patch
+m32r-update-include-asm-m32r-mmu_contexth.patch

m32r update

-uml-fix-__pgd_alloc-declaration.patch

Not needed any more

+s390-core-patches.patch
+s390-common-i-o-layer.patch
+s390-network-device-driver-patches.patch
+s390-dasd-driver.patch
+s390-character-device-drivers.patch
+s390-dcss-driver-cleanup-fix.patch
+s390-sclp-device-driver-cleanup.patch

S/390 update

-rcu-eliminate-rcu_datalast_qsctr.patch
+rcu-make-two-internal-structs-static.patch
+rcu-simplify-quiescent-state-detection.patch

rcu cleanups

-ioctl-cleanup.patch
-unlocked_ioctl.patch
+ioctl-rework.patch

New version of the dont-hold-BKL-across-ioctl patch.

+remove-rcu-abuse-in-cpu_idle-warning-fix.patch

RCU cleanup

+udf-simplify-udf_iget-fix-race.patch
+udf-fix-reservation-discarding.patch

UDF fixes

+remove-dead-ext3_put_inode-prototype.patch

ext3 cleanup

+compat-sigtimedwait.patch
+compat-sigtimedwait-sparc64-fix.patch
+compat-sigtimedwait-ppc64-fix.patch

compat signal fixes

+prio_tree-roll-call-to-prio_tree_first-into-prio_tree_next.patch +prio_tree-generalization.patch +prio_tree-move-general-code-from-mm-to-lib.patch

priority tree generalisation

+lcd-fix-memory-leak-code-cleanup.patch

Fix this char driver

+initramfs-unprivileged-image-creation.patch

initramfs permissions fix

+fix-conflicting-cpu_idle-declarations.patch

cleanup and fix up cpu_idle() declarations

+removes-redundant-sys_delete_module.patch

Remove unneeded function.

+task_structexit_state-usage.patch

Fix the handling of task_struct.state bits.

+trivial-uninline-kill-__exit_mm.patch

Code cleanup

+pcmcia-rename-pcmcia-devices.patch
+pcmcia-pd6729-e-mail-update.patch
+pcmcia-pd6729-cleanups.patch
+pcmcia-pd6729-isa_irq-handling.patch
+pcmcia-remove-obsolete-code.patch
+pcmcia-remove-pending_events.patch
+pcmcia-remove-client_attributes.patch +pcmcia-remove-unneeded-parameter-from-rsrc_mgr.patch +pcmcia-remove-dev_info-from-client.patch +pcmcia-remove-mtd-and-bulkmem-replaced-by-pcmciamtd.patch +pcmcia-per-socket-resource-database.patch +pcmcia-validate_mem-only-for-non-statically-mapped-sockets.patch +pcmcia-adjust_io_region-only-for-non-statically-mapped-sockets.patch +pcmcia-find_io_region-only-for-non-statically-mapped-sockets.patch +pcmcia-find_mem_region-only-for-non-statically-mapped-sockets.patch +pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets.patch +pcmcia-move-resource-handling-code-only-for-non-statically-mapped-sockets-to-other-file.patch +pcmcia-make-rsrc_nonstatic-an-independend-module.patch +pcmcia-allocate-resource-database-per-socket.patch +pcmcia-remove-typedef.patch
+pcmcia-grab-lock-in-resource_release.patch

pcmcia update

+knfsd-move-nfserr_openmode-checking-from-nfsd_read-write-into-nfs4_preprocess_stateid_op-in-preperation-for-delegation-state.patch +knfsd-check-the-callback-netid-in-gen_callback.patch
+knfsd-count-the-nfs4_client-structure-usage.patch +knfsd-preparation-for-delegation-client-callback-probe.patch +knfsd-preparation-for-delegation-client-callback-probe-warning-fixes.patch +knfsd-probe-the-callback-path-upon-a-successful-setclientid_confirm.patch +knfsd-check-for-existence-of-file_lock-parameter-inside-of-the-kernel-lock.patch +knfsd-get-rid-of-the-special-delegation_stateid_t-use-the-existing-stateid_t.patch +knfsd-add-structures-for-delegation-support.patch +knfsd-allocate-and-initialize-the-delegation-structure.patch +knfsd-find-a-delegation-for-a-file-given-a-stateid.patch +knfsd-add-the-delegation-release-and-free-functions.patch
+knfsd-changes-to-expire_client.patch
+knfsd-delay-nfsd_colse-for-delegations-until-reaping.patch
+knfsd-delegation-recall-callback-rpc.patch
+knfsd-kernel-thread-for-delegation-callback.patch +knfsd-helper-functions-for-deciding-to-grant-a-delegation.patch
+knfsd-attempt-to-hand-out-a-delegation.patch
+knfsd-remove-unnecessary-stateowner-existence-check.patch +knfsd-check-for-openmode-violations-given-a-delegation-stateid.patch +knfsd-add-checking-of-delegation-stateids-to-nfs4_preprocess_stateid_op.patch +knfsd-add-the-delegreturn-operation.patch
+knfsd-add-to-the-laundromat-service-for-delegations.patch +knfsd-clear-the-recall_lru-of-delegations-at-shutdown.patch

knfsd update

+export-sched_setscheduler-for-kernel-module-use.patch

Allow modules to set kernel thread scheduling policy

+sched-fix-scheduling-latencies-in-mttrc-reenables-interrupts.patch

Fix sched-fix-scheduling-latencies-in-mttrc.patch

+replace-numnodes-with-node_online_map-alpha.patch +replace-numnodes-with-node_online_map-arm.patch +replace-numnodes-with-node_online_map-i386.patch +replace-numnodes-with-node_online_map-ia64.patch +replace-numnodes-with-node_online_map-m32r.patch +replace-numnodes-with-node_online_map-mips.patch +replace-numnodes-with-node_online_map-parisc.patch +replace-numnodes-with-node_online_map-ppc64.patch +replace-numnodes-with-node_online_map-x86_64.patch +replace-numnodes-with-node_online_map.patch

Clean up and fix numa node ID handling

-remove-rcu-abuse-in-cpu_idle-warning-fix.patch

Not needed

+ppc64-fix-cpu-hotplug.patch

Fix i386-cpu-hotplug-updated-for-mm.patch for ppc64

reiser4-export-inode_lock.patch reiser4-export-pagevec-funcs.patch reiser4-export-radix_tree_preload.patch
+reiser4-export-find_get_pages.patch
reiser4-radix-tree-tag.patch reiser4-radix_tree_lookup_slot.patch
-reiser4-aliased-dir.patch -reiser4-kobject-umount-race.patch -reiser4-kobject-umount-race-cleanup.patch +#reiser4-aliased-dir.patch +#reiser4-kobject-umount-race.patch +#reiser4-kobject-umount-race-cleanup.patch
reiser4-perthread-pages.patch reiser4-unstatic-kswapd.patch reiser4-include-reiser4.patch
reiser4-doc.patch
reiser4-only.patch
-reiser4-page_cache_readahead-fix.patch -reiser4-fix-a-use-after-free-bug-in-reiser4_parse_options.patch -reiser4-missing-context-creation-is-added.patch -reiser4-crypto-update.patch -reiser4-max_cbk_iteration-fix.patch -reiser4-reduce-stack-usage.patch -reiser4-fix-deadlock.patch -reiser4-dont-use-shrink_dcache_anon.patch -reiser4-kmap-atomic-fixes.patch +reiser4-recover-read-performance.patch +reiser4-export-find_get_pages_tag.patch +reiser4-add-missing-context.patch

New reiser4 code drop

+fix-rom-enable-disable-in-r128-and-radeon-fb-drivers.patch +fbdev-cleanup-i2c-code-of-rivafb.patch +fbdev-revive-bios-less-booting-for-rage-xl-cards.patch +fbdev-revive-global_mode_option.patch +fbcon-fbdev-add-blanking-notification.patch +fbcon-fbdev-add-blanking-notification-fix.patch +fbdev-check-return-value-of-fb_add_videomode.patch +fbdev-do-a-symbol_put-for-each-symbol_get-in-savagefb.patch +fbdev-add-viewsonic-pf775a-to-broken-display-database.patch +fbdev-fix-default-timings-in-vga16fb.patch +fbdev-reduce-stack-usage-of-intelfb.patch +zr36067-driver-correct-jpeg-app-com-markers.patch +zr36067-driver-ppc-be-port.patch +zr36067-driver-reduce-stack-size-usage.patch

fbdev updates

+moxa-update-status-of-moxa-smartio-driver.patch +moxa-remove-ancient-changelog-readmemoxa.patch +moxa-remove-readmemoxa-from-documentation-00-index.patch +specialix-remove-bouncing-e-mail-address.patch +stallion-update-to-documentation-stalliontxt.patch +riscom8-update-staus-and-documentation-of-driver.patch +pm-remove-outdated-docs.patch +docs-add-sparse-howto.patch +cciss-documentation-update.patch +cciss-correct-mailing-list-address-in-source-code.patch +cpqarray-correct-mailing-list-address-in-source-code.patch +sh-remove-x86-specific-help-in-kconfig.patch +cyclades-put-readmecycladez-in-documentation-serial.patch +tipar-document-driver-options.patch +tipar-code-cleanup.patch

Various documentaiton updates and char driver cleanups

+binfmt_scriptc-make-em86_format-static.patch +remove-unused-include-asm-m68k-adb_mouseh.patch +scsi-aic7xxx-remove-two-useless-variables.patch +remove-in_string_c.patch +remove-ct_to_secs-ct_to_usecs.patch +bttv-driverc-make-some-variables-static.patch +arch-alpha-kconfig-kill-stale-reference-to-documentation-smptex.patch +init-initramfsc-make-unpack_to_rootfs-static.patch +oss-misc-cleanups.patch +inux-269-fs-proc-basec-array-size.patch +linux-269-fs-proc-proc_ttyc-avoid-array.patch +signalc-convert-assertion-to-bug_on.patch +right-severity-level-for-fatal-message.patch +remove-unused-drivers-char-rio-cdprotoh.patch +remove-unused-drivers-char-rsf16fmih.patch +mtd-added-nec-upd29f064115-support.patch

Various code cleanups

+optimize-prefetch-usage-in-list_for_each_xxx.patch

speed up list_for_each()

+waiting-10s-before-mounting-root-filesystem.patch

Retry the mount of the root filesytem during bootup.

number of patches in -mm: 896
number of changesets in external trees: 453
number of patches in -mm only: 879
total patches: 1332

All 896 patches:

linus.patch

expose-reiserfs_sync_fs.patch
Expose reiserfs_sync_fs()

fix-reiserfs-quota-debug-messages.patch
Fix reiserfs quota debug messages

fix-of-quota-deadlock-on-pagelock-quota-core.patch
Fix of quota deadlock on pagelock: quota core

vfs_quota_off-oops-fix.patch
vfs_quota_off-oops-fix

quota-umount-race-fix.patch
quota umount race fix

fix-of-quota-deadlock-on-pagelock-ext2.patch
Fix of quota deadlock on pagelock: ext2

fix-of-quota-deadlock-on-pagelock-ext2-tweaks.patch
fix-of-quota-deadlock-on-pagelock-ext2-tweaks

fix-of-quota-deadlock-on-pagelock-ext3.patch
Fix of quota deadlock on pagelock: ext3

fix-of-quota-deadlock-on-pagelock-ext3-tweaks.patch
fix-of-quota-deadlock-on-pagelock-ext3-tweaks

fix-of-quota-deadlock-on-pagelock-reiserfs.patch
Fix of quota deadlock on pagelock: reiserfs

fix-of-quota-deadlock-on-pagelock-reiserfs-fix.patch
fix-of-quota-deadlock-on-pagelock-reiserfs-fix

reiserfs-bug-fix-do-not-clear-ms_active-mount-flag.patch
reiserfs bug fix: do not clear MS_ACTIVE mount flag

allow-disabling-quota-messages-to-console.patch
Allow disabling quota messages to console

vmscan-total_scanned-fix.patch
vmscan: total_scanned fix

cs461x-gameport-code-isnt-being-included-in-build.patch
CS461x gameport code isn't being included in build

bk-acpi.patch

acpi-report-errors-in-fanc.patch
ACPI: report errors in fan.c

acpi-flush-tlb-when-pagetable-changed.patch
acpi: flush TLB when pagetable changed

bk-alsa.patch

bk-cifs.patch

bk-cpufreq.patch

bk-i2c.patch

bk-ide-dev.patch

ide-dev-build-fix.patch
ide-dev-build-fix

bk-input.patch

bk-dtor-input.patch

bk-jfs.patch

bk-kbuild.patch

bk-kbuild-in_gate_area_no_task-warning-fix.patch
bk-kbuild-in_gate_area_no_task-warning-fix

bk-kconfig.patch

bk-mtd.patch

bk-netdev.patch

via-rhine-warning-fix.patch
via-rhine warning fix

hostap-fix-kconfig-typos-and-missing-select-crypto.patch
hostap: fix Kconfig typos and missing select CRYPTO

ixgb-lr-card-support.patch
ixgb LR card support

bk-ntfs.patch

bk-pci.patch

bk-scsi.patch

mm.patch
add -mmN to EXTRAVERSION

fix-smm-failures-on-e750x-systems.patch
fix SMM failures on E750x systems

mm-keep-count-of-free-areas.patch
mm: keep count of free areas

mm-higher-order-watermarks.patch
mm: higher order watermarks

mm-higher-order-watermarks-fix.patch
higher order watermarks fix

mm-teach-kswapd-about-higher-order-areas.patch
mm: teach kswapd about higher order areas

simplified-readahead.patch
Simplified readahead

simplified-readahead-fix.patch
Simplified readahead fix

simplified-readahead-cleanups.patch
simplified-readahead-cleanups

readahead-congestion-control.patch
Simplified readahead

make-tree_lock-an-rwlock.patch
make mapping->tree_lock an rwlock

mempolicy-optimization.patch
mempolicy optimisation

mm-overcommit-updates.patch
mm: overcommit updates

kill-off-highmem_start_page.patch
kill off highmem_start_page

make-sure-ioremap-only-tests-valid-addresses.patch
make sure ioremap only tests valid addresses

mark_page_accessed-for-reads-on-non-page-boundaries.patch
mark_page_accessed() for read()s on non-page boundaries

do_anonymous_page-use-setpagereferenced.patch
do_anonymous_page() use SetPageReferenced

slab-add-more-arch-overrides-to-control-object-alignment.patch
slab: Add more arch overrides to control object alignment

collect-page_states-only-from-online-cpus.patch
collect page_states only from online cpus

collect-page_states-only-from-online-cpus-tidy.patch
collect-page_states-only-from-online-cpus-tidy

alloc_large_system_hash-numa-interleaving.patch
alloc_large_system_hash: NUMA interleaving

filesystem-hashes-numa-interleaving.patch
filesystem hashes: NUMA interleaving

tcp-hashes-numa-interleaving.patch
TCP hashes: NUMA interleaving

must-fix.patch
must fix lists update
must fix list update
mustfix update
must-fix update
mustfix lists

xircom_tulip_cb-build-fix.patch
xircom_tulip_cb.c build fix

xircom_tulip_cb-build-fix-warning-fix.patch
xircom_tulip_cb-build-fix warning fix

net-netconsole-poll-support-for-3c509.patch
net: Netconsole poll support for 3c509

pcnet32-79c976-with-fiber-optic.patch
pcnet32: 79c976 with fiber optic fix

multicast-filtering-for-tunc.patch
Multicast filtering for tun.c

r8169-missing-netif_poll_enable-and-irq-ack.patch
r8169: missing netif_poll_enable and irq ack

r8169-c-101.patch
r8169: C 101

r8169-large-send-enablement.patch
r8169: Large Send enablement

r8169-reduce-max-mtu-for-large-frames.patch
r8169: reduce max MTU for large frames

r8169-oversized-driver-field-for-ethtool.patch
r8169: oversized driver field for ethtool

fix-ibm_emac-autonegotiation-result-parsing.patch
EMAC: fix ibm_emac autonegotiation result parsing

netfilter-fix-return-values-of-ipt_recent-checkentry.patch
netfilter: fix return values of ipt_recent checkentry

netfilter-fix-ip_conntrack_proto_sctp-exit-on-sysctl.patch
netfilter: Fix ip_conntrack_proto_sctp exit on sysctl fail

netfilter-fix-ip_ct_selective_cleanup-and-rename.patch
netfilter: Fix ip_ct_selective_cleanup(), and rename ip_ct_iterate_cleanup()

netfilter-add-comment-above-remove_expectations-in.patch
netfilter: Add comment above remove_expectations in destroy_conntrack()

netfilter-remove-ipchains-and-ipfwadm-compatibility.patch
netfilter: Remove IPCHAINS and IPFWADM compatibility

netfilter-remove-copy_to_user-warnings-in-netfilter.patch
netfilter: Remove copy_to_user Warnings in Netfilter

netfilter-fix-cleanup-in-ipt_recent-should-ipt_registrater_match-error.patch
netfilter: Fix cleanup in ipt_recent should ipt_registrater_match error

fix-broken-rst-handling-in-ip_conntrack.patch
Fix broken RST handling in ip_conntrack

ppc32-freescale-book-e-mmu-cleanup.patch
ppc32: freescale Book-E MMU cleanup

ppc32-refactor-common-book-e-exception-code.patch
ppc32: refactor common book-e exception code

ppc32-switch-to-kbuild_defconfig.patch
ppc32: Switch to KBUILD_DEFCONFIG

ppc32-marvell-host-bridge-support-mv64x60.patch
ppc32: Marvell host bridge support (mv64x60)

ppc32-marvell-host-bridge-support-mv64x60-review-fixes.patch
ppc32-marvell-host-bridge-support-mv64x60 review fixes

ppc32-support-for-marvell-ev-64260-bp-eval-platform.patch
ppc32: support for Marvell EV-64260[ab]-BP eval platform

ppc32-support-for-force-cpci-690-board.patch
ppc32: support for Force CPCI-690 board

ppc32-support-for-artesyn-katana-cpci-boards.patch
ppc32: support for Artesyn Katana cPCI boards

ppc32-add-support-for-ibm-750fx-and-750gx-eval-boards.patch
ppc32: add Support for IBM 750FX and 750GX Eval Boards

ppc32-ppc4xx-pic-rewrite-cleanup.patch
ppc32: PPC4xx PIC rewrite/cleanup

ppc32-performance-monitor-oprofile-support-for-e500.patch
ppc32: performance Monitor/Oprofile support for e500

ppc32-performance-monitor-oprofile-support-for-e500-review-fixes.patch
Fix prototypes & externs in e500 oprofile support

ppc32-fix-ebonyc-warnings.patch
ppc32: fix ebony.c warnings

ppc32-remove-bogus-sprn_cpc0_gpio-define.patch
ppc32: remove bogus SPRN_CPC0_GPIO define

ppc32-debug-setcontext-syscall-implementation.patch
PPC debug setcontext syscall implementation.

ppc32-add-uimage-to-default-targets.patch
ppc32: add uImage to default targets

ppc32-fix-io_remap_page_range-for-36-bit-phys-platforms.patch
ppc32: fix io_remap_page_range for 36-bit phys platforms

ppc32-resurrect-documentation-powerpc-cpu_featurestxt.patch
ppc32: Resurrect Documentation/powerpc/cpu_features.txt

ppc64-kprobes-implementation.patch
ppc64: kprobes implementation

ppc64-tweaks-to-cpu-sysfs-information.patch
ppc64: tweaks to ppc64 cpu sysfs information

ppc64-reloc_hide.patch

kprobes-wrapper-to-define-jprobeentry.patch
Kprobes: wrapper to define jprobe.entry

termio-userspace-access-error-handling.patch
Termio userspace access error handling

ide_arch_obsolete_init-fix.patch
IDE_ARCH_OBSOLETE_INIT fix

out-of-line-implementation-of-find_next_bit.patch
out-of-line implementation of find_next_bit()

gp-rel-data-support.patch
GP-REL data support

gp-rel-data-support-vs-bk-kbuild-fix.patch
gp-rel-data-support-vs-bk-kbuild-fix

vm-routine-fixes.patch
VM routine fixes

vm-routine-fixes-CONFIG_SHMEM-fix.patch
vm-routine-fixes CONFIG_SHMEM fix

frv-fujitsu-fr-v-cpu-arch-maintainer-record.patch
FRV: Fujitsu FR-V CPU arch maintainer record

frv-fujitsu-fr-v-arch-documentation.patch
FRV: Fujitsu FR-V arch documentation

frv-fujitsu-fr-v-cpu-arch-implementation-part-1.patch
FRV: Fujitsu FR-V CPU arch implementation part 1

frv-fujitsu-fr-v-cpu-arch-implementation-part-2.patch
FRV: Fujitsu FR-V CPU arch implementation part 2

frv-fujitsu-fr-v-cpu-arch-implementation-part-3.patch
FRV: Fujitsu FR-V CPU arch implementation part 3

frv-fujitsu-fr-v-cpu-arch-implementation-part-4.patch
FRV: Fujitsu FR-V CPU arch implementation part 4

frv-fujitsu-fr-v-cpu-arch-implementation-part-5.patch
FRV: Fujitsu FR-V CPU arch implementation part 5

frv-fujitsu-fr-v-cpu-arch-implementation-part-6.patch
FRV: Fujitsu FR-V CPU arch implementation part 6

frv-fujitsu-fr-v-cpu-arch-implementation-part-7.patch
FRV: Fujitsu FR-V CPU arch implementation part 7

frv-fujitsu-fr-v-cpu-arch-implementation-part-8.patch
FRV: Fujitsu FR-V CPU arch implementation part 8

frv-fujitsu-fr-v-cpu-arch-implementation-part-9.patch
FRV: Fujitsu FR-V CPU arch implementation part 9

put-memory-in-dma-zone-not-normal-zone-in-frv-arch.patch
Put memory in DMA zone not Normal zone in FRV arch

frv-kill-off-highmem_start_page.patch
kill off highmem_start_page

frv-first-batch-of-fujitsu-fr-v-arch-include-files.patch
FRV: First batch of Fujitsu FR-V arch include files

frv-remove-obsolete-hardirq-stuff-from-includes.patch
frv: emove obsolete hardirq stuff from includes

frv-pci-dma-fixes.patch
frv: PCI DMA fixes

fix-frv-pci-config-space-write.patch
frv: Fix PCI config space write

frv-more-fujitsu-fr-v-arch-include-files.patch
FRV: More Fujitsu FR-V arch include files

convert-frv-to-use-remap_pfn_range.patch
convert FRV to use remap_pfn_range

frv-yet-more-fujitsu-fr-v-arch-include-files.patch
FRV: Yet more Fujitsu FR-V arch include files

frv-remaining-fujitsu-fr-v-arch-include-files.patch
FRV: Remaining Fujitsu FR-V arch include files

frv-make-calibrate_delay-optional.patch
FRV: Make calibrate_delay() optional

frv-better-mmap-support-in-uclinux.patch
FRV: Better mmap support in uClinux

frv-procfs-changes-for-nommu-changes.patch
FRV: procfs changes for nommu changes

frv-change-setup_arg_pages-to-take-stack-pointer.patch
FRV: change setup_arg_pages() to take stack pointer

frv-change-setup_arg_pages-to-take-stack-pointer-fixes.patch
Fix usage of setup_arg_pages() in IA64, MIPS, S390 and Sparc64

frv-add-fdpic-elf-binary-format-driver.patch
FRV: Add FDPIC ELF binary format driver

fix-some-elf-fdpic-binfmt-problems.patch
Fix some ELF-FDPIC binfmt problems

further-nommu-changes.patch
Further nommu changes

further-nommu-proc-changes.patch
Further nommu /proc changes

frv-arch-nommu-changes.patch
frv: nommu changes

make-more-syscalls-available-for-the-fr-v-arch.patch
Make more syscalls available for the FR-V arch

frv-debugging-fixes.patch
FRV: debugging fixes

frv-minix-ext2-bitops-fixes.patch
frv: Minix & ext2 bitops fixes

frv-perfctr_info-syscall.patch
frv: perfctr_info syscall

frv-update-the-trap-tables-comment.patch
frv: update the trap tables comment

frv-accidental-tlb-entry-write-protect-fix.patch
frv: accidental TLB entry write-protect fix

frv-pagetable-handling-fixes.patch
FRV: pagetable handling fixes

frv-fr55x-cpu-support-fixes.patch
FRV: FR55x CPU support fixes

implement-nommu-find_vma.patch
Implement nommu find_vma()

fix-nommu-map_shared-handling.patch
Fix nommu MAP_SHARED handling

permit-nommu-map_shared-of-memory-backed-files.patch
Permit nommu MAP_SHARED of memory backed files

cross-reference-nommu-vmas-with-mappings.patch
Cross-reference nommu VMAs with mappings

superhyway-bus-support.patch
SuperHyway bus support

assign-pkmap_base-dynamically.patch
Assign PKMAP_BASE dynamically

x86-remove-data-header-and-code-overlap-in-boot-setups.patch
x86: remove data-header and code overlap in boot/setup.S

cyrix-mii-cpuid-returns-stale-%ecx.patch
Cyrix MII cpuid returns stale %ecx

nx-fix-noexec-kernel-parameter.patch
NX: Fix noexec kernel parameter

nx-triple-fault-with-4k-kernel-mappings-and-pae.patch
NX: Triple fault with 4k kernel mappings and PAE

trivial-cleanup-in-arch-i386-kernel-heads.patch
Trivial cleanup in arch/i386/kernel/head.S

remove-pfn_to_pgdat-on-x86.patch
remove pfn_to_pgdat() on x86

boot_ap_for_nondefault_kernel.patch
Secondary cpus boot-up for non defalut location built kernels

i386-boot-loader-ids.patch
i386 boot loader IDs

proc-sys-kernel-bootloader_type.patch
/proc/sys/kernel/bootloader_type

intel-thermal-monitor-for-x86_64.patch
Intel thermal monitor for x86_64

x86_64-do_general_protection-retval-check.patch
x86_64: do_general_protection() retval check

x86_64-add-a-real-pfn_valid.patch
x86_64: Add a real pfn_valid

x86_64-fix-bugs-in-the-amd-k8-cmp-support-code.patch
x86_64: Fix bugs in the AMD K8 CMP support code.

x86_64-fix-bugs-in-the-amd-k8-cmp-support-code-fix.patch
x86_64: numa_add_cpu() fix

x86_64-reenable-mga-dri-on-x86-64.patch
x86_64: Reenable MGA DRI on x86-64

x86_64-remove-duplicated-fake_stack_frame-macro.patch
x86_64: Remove duplicated FAKE_STACK_FRAME macro.

x86_64-remove-bios-reboot-code.patch
x86_64: Remove BIOS reboot code

x86_64-add-reboot=force.patch
x86_64: Add reboot=force

x86_64-collected-ioremap-fixes.patch
x86_64: Collected ioremap fixes

x86_64-handle-nx-correctly-in-pageattr.patch
x86_64: Handle NX correctly in pageattr

x86_64-split-acpi-boot-table-parsing.patch
x86_64: Split ACPI boot table parsing

x86_64-split-acpi-boot-table-parsing-fix.patch
x86_64-split-acpi-boot-table-parsing-fix

x86_64-add-srat-numa-discovery-to-x86-64.patch
x86_64: Add SRAT NUMA discovery to x86-64.

x86_64-update-uptime-after-suspend.patch
x86_64: Update uptime after suspend

x86_64-allow-a-kernel-debugger-to-hide-single-steps-in.patch
x86_64: Allow a kernel debugger to hide single steps in more cases.

x86_64-remove-debug-information-for-vsyscalls.patch
x86_64: Remove debug information for vsyscalls

x86_64-rename-htvalid-to-cmp_legacy.patch
x86_64: Rename HTVALID to CMP_LEGACY

x86_64-scheduler-support-for-amd-cmp.patch
x86_64: Scheduler support for AMD CMP

x86_64-add-a-missing-__iomem-pointed-out-by-linus.patch
x86_64: Add a missing __iomem pointed out by Linus.

x86_64-add-a-missing-newline-in-proc-cpuinfo.patch
x86_64: Add a missing newline in /proc/cpuinfo

x86_64-always-print-segfaults-for-init.patch
x86_64: Always print segfaults for init.

x86_64-export-phys_proc_id.patch
x86_64: Export phys_proc_id

x86_64-allow-to-configure-more-cpus-and-nodes.patch
x86_64: Allow to configure more CPUs and nodes.

x86_64-allow-to-configure-more-cpus-and-nodes-fix.patch
x86_64-allow-to-configure-more-cpus-and-nodes fix

x86_64-fix-a-warning-in-the-cmp-support-code-for.patch
x86_64: Fix a warning in the CMP support code for !CONFIG_NUMA

x86_64-fix-some-outdated-assumptions-that-cpu-numbers.patch
x86_64: Fix some outdated assumptions that CPU numbers are equal numbers.

x86_64-fix-em64t-config-description.patch
x86_64: Fix EM64T config description

x86_64-remove-unneeded-ifdef-in-hardirqh.patch
x86_64: Remove unneeded ifdef in hardirq.h

x86_64-add-slit-inter-node-distance-information-to.patch
x86_64: Add SLIT (inter node distance) information to sysfs.

x86_64-add-x86_64-support-for-jack-steiners-slit-sysfs.patch
x86_64: Add x86_64 support for Jack Steiner's SLIT sysfs patch

x86_64-eliminate-some-useless-printks-in-acpi-numac.patch
x86_64: Eliminate some useless printks in ACPI numa.c

xen-vmm-4-add-ptep_establish_new-to-make-va-available.patch
Xen VMM #4: add ptep_establish_new to make va available

xen-vmm-4-return-code-for-arch_free_page.patch
Xen VMM #4: return code for arch_free_page

xen-vmm-4-return-code-for-arch_free_page-fix.patch
Get rid of arch_free_page() warning

xen-vmm-4-runtime-disable-of-vt-console.patch
Xen VMM #4: runtime disable of VT console

xen-vmm-4-has_arch_dev_mem.patch
Xen VMM #4: HAS_ARCH_DEV_MEM

xen-vmm-4-split-free_irq-into-teardown_irq.patch
Xen VMM #4: split free_irq into teardown_irq

h8-300-new-systemcall-support.patch
H8/300 new systemcall support

arm26-remove-arm32-cruft.patch
arm26: remove arm32 cruft

arm26-update-the-atomic-ops.patch
arm26: update the atomic ops

arm26-build-system-updates.patch
arm26 build system updates

arm26-update-comments-headers-notes.patch
arm26: update comments, headers, notes

arm26-necessary-compilation-fixes-for-2610.patch
arm26: necessary compilation fixes for 2.6.10

arm26cleanup-trap-handling-assembly.patch
arm26:cleanup trap handling assembly

arm26-new-execve-code.patch
arm26: new execve code

arm26-move-some-files-to-better-locations.patch
arm26: move some files to better locations

arm26-remove-shark-arm32-from-arm26.patch
arm26: remove shark (arm32) from arm26

arm26-softirq-update.patch
arm26: softirq update

arm26-update-systemh-to-some-semblance-of-recentness.patch
arm26: update system.h to some semblance of recentness.

arm26-replace-arm32-time-handling-code-with-smaller-version.patch
arm26: replace arm32 time handling code with smaller version

arm26-tlb-update.patch
arm26: TLB update

arm26-better-put_user-macros.patch
arm26: better put_user macros.

arm26-better-unistdh-reimplemented-based-on-arm32.patch
arm26: better unistd.h (reimplemented based on arm32)

ia64-remove-hcdp-support-for-early-printk.patch
ia64: remove HCDP support for early printk

typeofdev-powersaved_state.patch
typeof(dev->power.saved_state)

fix-naming-in-swsusp.patch
fix naming in swsusp

swsusp-kill-unused-variable.patch
swsusp: kill unused variable

swsusp-kill-one-line-helpers-handle-read-errors.patch
swsusp: kill one-line helpers, handle read errors

swsusp-small-cleanups.patch
From: Pavel Machek <[email protected]>
Subject: swsusp: Small cleanups

swsusp-kill-on2-algorithm-in-swsusp.patch
swsusp: Kill O(n^2) algorithm in swsusp

swsusp-try_to_freeze-to-make-freezing-hooks-nicer.patch
swsusp: try_to_freeze to make freezing hooks nicer

swsusp-try_to_freeze-to-make-freezing-hooks-nicer-fix.patch
swsusp-try_to_freeze-to-make-freezing-hooks-nicer fix

m32r-add-new-relocation-types-to-elfh.patch
m32r: Add new relocation types to elf.h

m32r-support-pgprot_noncached.patch
m32r: Support pgprot_noncached()

m32r-update-ptracec-for-multithread.patch
m32r: Update ptrace.c for multithread debugging

m32r-fix-not-to-execute-noexec-pages-0-3.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Fix not to execute noexec pages (0/3)

m32r-cause-sigsegv-for-nonexec-page.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Cause SIGSEGV for nonexec page execution (1/3)

m32r-dont-encode-ace_instruction-in.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Don't encode ACE_INSTRUCTION in address (2/3)

m32r-clean-up-arch-m32r-mm-faultc-3-3.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Clean up arch/m32r/mm/fault.c (3/3)

m32r-clean-up-include-asm-m32r-pgtableh.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Clean up include/asm-m32r/pgtable.h

m32r-support-page_none-1-3.patch
m32r: Support PAGE_NONE

m32r-remove-page_user-2-3.patch
m32r: Remove PAGE_USER

m32r-clean-up.patch
m32r: Clean up include/asm-m32r/pgtable-2level.h

m32r-include-asm-m32r-thread_infoh-minor.patch
m32r: include/asm-m32r/thread_info.h minor updates

m32r-use-kmalloc-for-m32r-stacks-2-2.patch
m32r: Use kmalloc for m32r stacks

m32r-make-kernel-headers-for-mutual.patch
m32r: Make kernel headers for mutual exclusion

m32r-use-generic-hardirq-framework.patch
m32r: Use generic hardirq framework

m32r-update-include-asm-m32r-systemh.patch
m32r: Update include/asm-m32r/system.h

m32r-update-include-asm-m32r-mmu_contexth.patch
m32r: Update include/asm-m32r/mmu_context.h

uml-remove-most-devfs_mk_symlink-calls.patch
uml: remove most devfs_mk_symlink calls

uml-fix-__wrap_free-comment.patch
uml: fix __wrap_free comment

uml-fix-some-ptrace-functions-returns-values.patch
uml: fix some ptrace functions returns values

uml-redo-the-signal-delivery-mechanism.patch
uml: redo the signal delivery mechanism

uml-make-restorer-match-i386.patch
uml: make restorer match i386

uml-unistdh-cleanup.patch
uml: unistd.h cleanup

uml-remove-a-quilt-induced-duplicity.patch
uml: remove a quilt-induced duplicity

uml-fix-sigreturn-to-not-copy_user-under-a-spinlock.patch
uml: fix sigreturn to not copy_user under a spinlock

uml-close-host-file-descriptors-properly.patch
uml: close host file descriptors properly

uml-free-host-resources-associated-with-freed-irqs.patch
uml: free host resources associated with freed IRQs

uml-unregister-signal-handlers-at-reboot.patch
uml: unregister signal handlers at reboot

hostfs-uml-set-sendfile-to-generic_file_sendfile.patch
hostfs: uml: set .sendfile to generic_file_sendfile

hostfs-uml-add-some-other-pagecache-methods.patch
hostfs: uml: add some other pagecache methods

uml-terminal-cleanup.patch
uml: terminal cleanup

uml-first-part-rework-of-run_helper-and-users.patch
Uml: first part rework of run_helper() and users.

uml-finish-fixing-run_helper-failure-path.patch
uml: finish fixing run_helper failure path

uml-add-elf-vsyscall-support.patch
uml: add elf vsyscall support

uml-make-vsyscall-page-into-process-page-tables.patch
uml: make vsyscall page into process page tables

uml-include-vsyscall-page-in-core-dumps.patch
uml: include vsyscall page in core dumps

uml-add-tracesysgood-support.patch
uml: Add TRACESYSGOOD support

uml-kill-host-processes-properly.patch
uml: kill host processes properly

uml-defconfig-update.patch
uml: defconfig update

uml-small-vsyscall-fixes.patch
uml: small vsyscall fixes

uml-export-end_iomem.patch
uml: export end_iomem

uml-system-call-restart-fixes.patch
uml: system call restart fixes

uml-fix-setting-of-tif_sigpending.patch
uml: Fix setting of TIF_SIGPENDING

uml-allow-vsyscall-code-to-build-on-24.patch
uml: Allow vsyscall code to build on 2.4

uml-sysemu-fixes.patch
uml: SYSEMU fixes

uml-correctly-restore-extramask-in-sigreturn.patch
uml: correctly restore extramask in sigreturn

uml-fix-update_process_times-call.patch
uml: fix update_process_times call

uml-detect-sysemu_singlestep.patch
uml: detect SYSEMU_SINGLESTEP

uml-use-sysemu_singlestep.patch
uml: use SYSEMU_SINGLESTEP

uml-declare-ptrace_setfpregs.patch
uml: declare ptrace_setfpregs

uml-remove-bogus-__nr_sigreturn-check.patch
uml: Remove bogus __NR_sigreturn check

uml-fix-highmem-compilation.patch
uml: Fix highmem compilation

uml-symbol-export.patch
uml: symbol export

uml-fix-umldir-init-order.patch
uml: fix umldir init order

uml-raise-tty-limit.patch
uml: raise tty limit

uml-sysfs-support-for-uml-network-driver.patch
uml: sysfs support for uml network driver.

uml-sysfs-support-for-the-uml-block-devices.patch
uml: sysfs support for the uml block devices.

s390-remove-compat-setup_arg_pages32.patch
s390: remove compat setup_arg_pages32

s390-core-patches.patch
s390: core patches

s390-common-i-o-layer.patch
s390: Common I/O layer

s390-network-device-driver-patches.patch
s390: Network device driver patches

s390-dasd-driver.patch
s390: DASD driver

s390-character-device-drivers.patch
s390: Character device drivers

s390-dcss-driver-cleanup-fix.patch
s390: DCSS driver cleanup fix

s390-sclp-device-driver-cleanup.patch
From: Heiko Carstens <[email protected]>
Subject: [PATCH 8/8] s390: SCLP device driver cleanup

enhanced-i-o-accounting-data-patch.patch
enhanced I/O accounting data patch

enhanced-memory-accounting-data-collection.patch
enhanced Memory accounting data collection

enhanced-memory-accounting-data-collection-tidy.patch
enhanced-memory-accounting-data-collection-tidy

wacom-tablet-driver.patch
wacom tablet driver

force-feedback-support-for-uinput.patch
Force feedback support for uinput

kmap_atomic-takes-char.patch
kmap_atomic takes char*

kmap_atomic-takes-char-fix.patch
kmap_atomic-takes-char-fix

kmap_atomic-fallout.patch
kmap_atomic fallout

kunmap-fallout-more-fixes.patch
kunmap-fallout-more-fixes

4-4gb-incorrect-bound-check-in-do_getname.patch
4/4GB: Incorrect bound check in do_getname()

handle-quoted-module-parameters.patch
handle quoted module parameters

CONFIG_SOUND_VIA82CXXX_PROCFS.patch
Add CONFIG_SOUND_VIA82CXXX_PROCFS

make-sysrq-f-call-oom_kill.patch
make sysrq-F call oom_kill()

allow-admin-to-enable-only-some-of-the-magic-sysrq-functions.patch
Allow admin to enable only some of the Magic-Sysrq functions

gen_init_cpio-symlink-pipe-socket-support.patch
gen_init_cpio symlink, pipe and socket support

gen_init_cpio-slink_pipe_sock_2.patch
gen_init_cpio-slink_pipe_sock_2

initramfs-allow-no-trailer.patch
INITRAMFS: allow no trailer

move-irq_enter-and-irq_exit-to-common-code.patch
move irq_enter and irq_exit to common code

remove-unused-irq_cpustat-fields.patch
remove unused irq_cpustat fields

hold-bkl-for-shorter-period-in-generic_shutdown_super.patch
Hold BKL for shorter period in generic_shutdown_super().

cleanups-for-the-ipmi-driver.patch
Cleanups for the IPMI driver

htree-telldir-fix.patch
ext3 htree telldir() fix

kill-blkh.patch
kill blk.h

ext3-cleanup-handling-of-aborted-transactions.patch
ext3: cleanup handling of aborted transactions.

ext3-handle-attempted-delete-of-bitmap-blocks.patch
ext3: handle attempted delete of bitmap blocks.

ext3-handle-attempted-double-delete-of-metadata.patch
ext3: handle attempted double-delete of metadata.

cpumask_t-initializers.patch
cpumask_t initializers

time-run-too-fast-after-s3.patch
time runx too fast after S3

fork-total_forks-not-counted-under-tasklist_lock.patch
fork: total_forks not counted under tasklist_lock

suppress-might_sleep-if-oopsing.patch
suppress might_sleep() if oopsing

file-sync-no-i_sem.patch
Reduce i_sem usage during file sync operations

ext3-support-for-ea-in-inode.patch
ext3: support for EA in inode

ext3-support-for-ea-in-inode-warning-fix.patch
ext3-xattr-warning-fix

off-by-one-in-drivers-parport-probec.patch
Off by one in drivers/parport/probe.c

compile-with-ffreestanding.patch
compile with -ffreestanding

sys_stime-needs-a-compat-function.patch
sys_stime needs a compat function

sys_stime-needs-a-compat-function-update.patch

sync-in-core-time-granuality-with-filesystems.patch
Sync in core time granuality with filesystems

sync-in-core-time-granuality-with-filesystems-sonypi-fix.patch
sync-in-core-time-granuality-with-filesystems-sonypi-fix

remove-ip2-programs.patch
remove ip2 programs

rcu-eliminate-rcu_ctrlblklock.patch
rcu: eliminate rcu_ctrlblk.lock

rcu-make-two-internal-structs-static.patch
rcu: make two internal structs static

rcu-simplify-quiescent-state-detection.patch
rcu: simplify quiescent state detection

smb_file_open-retval-fix.patch
smb_file_open() retval fix

sys_sched_setaffinity-on-up-should-fail-for-non-zero.patch
sys_sched_setaffinity() on UP should fail for non-zero CPUs.

make-gconfig-work-with-gtk-24.patch
make gconfig work with gtk-2.4

edd-add-edd=off-and-edd=skipmbr-options.patch
EDD: add edd=off and edd=skipmbr options

panic_timeout-move-to-kernelh.patch
panic_timeout: move to kernel.h

add-pr_get_name.patch
Add PR_GET_NAME

fix-alt-sysrq-deadlock.patch
fix alt-sysrq deadlock

cpumask-range-check-before-using-value.patch
cpumask: range check before using value

noop-iosched-make-code-static.patch
noop iosched: make code static

noop-iosched-remove-unused-includes.patch
noop iosched: remove unused includes

loop-device-recursion-avoidance.patch
loop device resursion avoidance

noone-uses-have_arch_si_codes-or-have_arch_sigevent_t.patch
noone uses HAVE_ARCH_SI_CODES or HAVE_ARCH_SIGEVENT_T

get_blkdev_list-cleanup.patch
get_blkdev_list() cleanup

ext-apply-umask-to-symlinks-with-acls-configured-out.patch
Ext[23]: apply umask to symlinks with ACLs configured out

fix-missing-wakeup-in-ipc-sem.patch
fix missing wakeup in ipc/sem

irq-resource-deallocation-acpi.patch
IRQ resource deallocation: ACPI

irq-resource-deallocation-ia64.patch
IRQ resource deallocation: ia64

ioctl-rework.patch
ioctl rework

__getblk_slow-can-loop-forever-when-pages-are-partially.patch
__getblk_slow can loop forever when pages are partially mapped

remove-rcu-abuse-in-cpu_idle.patch
Remove RCU abuse in cpu_idle()

remove-rcu-abuse-in-cpu_idle-warning-fix.patch
remove-rcu-abuse-in-cpu_idle-warning-fix

udf-simplify-udf_iget-fix-race.patch
udf: simplify udf_iget, fix race

udf-fix-reservation-discarding.patch
udf: fix reservation discarding

remove-dead-ext3_put_inode-prototype.patch
remove dead ext3_put_inode prototype

compat-sigtimedwait.patch
compat: sigtimedwait

compat-sigtimedwait-sparc64-fix.patch
compat-sigtimedwait-sparc64-fix

compat-sigtimedwait-ppc64-fix.patch
compat-sigtimedwait ppc64 fix

msync-set-PF_SYNCWRITE.patch
msync(): set PF_SYNCWRITE

prio_tree-roll-call-to-prio_tree_first-into-prio_tree_next.patch
prio_tree: roll call to prio_tree_first into prio_tree_next

prio_tree-generalization.patch
prio_tree: generalization

prio_tree-move-general-code-from-mm-to-lib.patch
prio_tree: move general code from mm/ to lib/

lcd-fix-memory-leak-code-cleanup.patch
lcd: fix memory leak, code cleanup

initramfs-unprivileged-image-creation.patch
initramfs: unprivileged image creation

fix-conflicting-cpu_idle-declarations.patch
fix conflicting cpu_idle() declarations

removes-redundant-sys_delete_module.patch
remove redundant sys_delete_module()

fix-stop-signal-race.patch
fix stop signal race

move-group_exit-flag-into-signal_structflags-word.patch
move group_exit flag into signal_struct.flags word

fix-ptracer-death-race-yielding-bogus-bug_on.patch
fix ptracer death race yielding bogus BUG_ON

move-waitchld_exit-from-task_struct-to-signal_struct.patch
move waitchld_exit from task_struct to signal_struct

task_structexit_state-usage.patch
task_struct.exit_state usage

trivial-uninline-kill-__exit_mm.patch
uninline/kill __exit_mm()

selinux-scalability-add-spin_trylock_irq-and.patch
SELinux scalability: add spin_trylock_irq and spin_trylock_irqsave

selinux-scalability-convert-avc-to-rcu.patch
SELinux scalability: convert AVC to RCU

selinux-scalability-convert-avc-to-rcu-fix.patch
SELinux: fix bug in avc_update_node()

selinux-atomic_dec_and_test-bug.patch
SELinux: atomic_dec_and_test() bug

selinux-scalability-avc-statistics-and-tuning.patch
SELinux scalability: AVC statistics and tuning

selinux-regenerate-selinux-module-headers.patch
SELinux: regenerate SELinux module headers

selinux-update-selinux_task_setscheduler.patch
SELinux: update selinux_task_setscheduler

selinux-audit-task-comm-if-exe-cannot-be-determined.patch
SELinux: audit task comm if exe cannot be determined

selinux-add-dynamic-context-transition-support-to-selinux.patch
SELinux: add dynamic context transition support to SELinux

selinux-enhance-selinux-control-of-executable-mappings.patch
SELinux: enhance SELinux control of executable mappings

selinux-add-member-node-to-selinuxfs.patch
SELinux: add member node to selinuxfs

selinux-eliminate-unaligned-accesses-by-policy-loading-code.patch
SELinux: eliminate unaligned accesses by policy loading code

oprofile-add-check_user_page_readable.patch
oprofile: add check_user_page_readable()

oprofile-arch-independent-code-for-stack-trace.patch
oprofile: arch-independent code for stack trace sampling

oprofile-arch-independent-code-for-stack-trace-rename-timer_init.patch
oprofile-arch-independent-code-for-stack-trace: rename timer_init

oprofile-timer-backtrace-fix-2.patch
oprofile: backtrace operation does not initialized

oprofile-i386-support-for-stack-trace-sampling.patch
oprofile: i386 support for stack trace sampling

oprofile-i386-support-for-stack-trace-sampling-cleanup.patch
oprofile-i386-support-for-stack-trace-sampling-cleanup

oprofile-i386-support-for-stack-trace-sampling-fix.patch
oprofile-i386-support-for-stack-trace-sampling x86_64 fix

oprofile-ia64-support-for-oprofile-stack-trace.patch
oprofile: ia64 support for oprofile stack trace sampling

oprofile-update-alpha-for-api-changes.patch
oprofile: update alpha for api changes

oprofile-update-arm-for-api-changes.patch
oprofile: update arm for api changes

oprofile-update-ppc-for-api-changes.patch
oprofile: update ppc for api changes

oprofile-update-parisc-for-api-changes.patch
oprofile: update parisc for api changes

oprofile-update-s390-for-api-changes.patch
oprofile: update s390 for api changes

oprofile-update-sh-for-api-changes.patch
oprofile: update sh for api changes

oprofile-update-sparc64-for-api-changes.patch
oprofile: update sparc64 for api changes

oprofile-minor-cleanups.patch
oprofile: minor cleanups

pcmcia-new-ds-cs-interface.patch
pcmcia: new ds - cs interface

pcmcia-call-device-drivers-from-ds-not-from-cs.patch
pcmcia: call device drivers from ds, not from cs

pcmcia-unify-bind_mtd-and-pcmcia_bind_mtd.patch
pcmcia: unify bind_mtd and pcmcia_bind_mtd

pcmcia-unfiy-bind_device-and-pcmcia_bind_device.patch
pcmcia: unfiy bind_device and pcmcia_bind_device

pcmcia-device-model-integration-can-only-be-submitted-under-gpl.patch
pcmcia: device model integration can only be submitted under GPL

pcmcia-add-pcmcia_devices.patch
pcmcia: add pcmcia_device(s)

pcmcia-remove-socket_bind_t-use-pcmcia_devices-instead.patch
pcmcia: remove socket_bind_t, use pcmcia_devices instead

pcmcia-remove-internal-module-use-count-use-module_refcount-instead.patch
pcmcia: remove internal module use count, use module_refcount instead

pcmcia-set-drivers-owner-field.patch
pcmcia: set driver's .owner field

pcmcia-move-pcmcia_unregister_client-to-ds.patch
pcmcia: move pcmcia_(un,)register_client to ds

pcmcia-device-model-integration-can-only-be-submitted-under-gpl-part-2.patch
pcmcia: device model integration can only be submitted under GPL, part 2

pcmcia-use-kref-instead-of-native-atomic-counter.patch
pcmcia: use kref instead of native atomic counter

pcmcia-add-pcmcia_putget_socket.patch
pcmcia: add pcmcia_(put,get)_socket

pcmcia-grab-a-reference-to-the-cs-socket-in-ds.patch
pcmcia: grab a reference to the cs-socket in ds

pcmcia-get-a-reference-to-ds-socket-for-each-pcmcia_device.patch
pcmcia: get a reference to ds-socket for each pcmcia_device

pcmcia-add-a-pointer-to-client-in-struct-pcmcia_device.patch
pcmcia: add a pointer to client in struct pcmcia_device

pcmcia-use-pcmcia_device-in-send_event.patch
pcmcia: use pcmcia_device in send_event

pcmcia-use-pcmcia_device-to-mark-clients-as-stale.patch
pcmcia: use pcmcia_device to mark clients as stale

pcmcia-code-moving-in-ds.patch
pcmcia: code moving in ds

pcmcia-use-pcmcia_device-in-register_client.patch
pcmcia: use pcmcia_device in register_client

pcmcia-direct-ordered-unbind-of-devices.patch
pcmcia: direct-ordered unbind of devices

pcmcia-bug-on-dev_list-=-null.patch
pcmcia: BUG on dev_list != NULL

pcmcia-bug-if-clients-are-kept-too-long.patch
pcmcia: BUG() if clients are kept too long

pcmcia-move-struct-client_t-inside-struct-pcmcia_device.patch
pcmcia: move struct client_t inside struct pcmcia_device

pcmcia-use-driver_find-in-ds.patch
pcmcia: use driver_find in ds

pcmcia-set_netdev-for-network-devices.patch
pcmcia: SET_NETDEV for network devices

pcmcia-set_netdev-for-wireless-network-devices.patch
pcmcia: SET_NETDEV for wireless network devices

pcmcia-reduce-stack-usage-in-ds_ioctl-randy-dunlap.patch
pcmcia: reduce stack usage in ds_ioctl (Randy Dunlap)

pcmcia-add-disable_clkrun-option.patch
pcmcia: Add disable_clkrun option

pcmcia-rename-pcmcia-devices.patch
pcmcia: rename PCMCIA devices

pcmcia-pd6729-e-mail-update.patch
pcmcia: pd6729: e-mail update

pcmcia-pd6729-cleanups.patch
pcmcia: pd6729: cleanups

pcmcia-pd6729-isa_irq-handling.patch
pcmcia: pd6729: isa_irq handling

pcmcia-remove-obsolete-code.patch
pcmcia: remove obsolete code

pcmcia-remove-pending_events.patch
pcmcia: remove pending_events

pcmcia-remove-client_attributes.patch
pcmcia: remove client_attributes

pcmcia-remove-unneeded-parameter-from-rsrc_mgr.patch
pcmcia: remove unneeded parameter from rsrc_mgr

pcmcia-remove-dev_info-from-client.patch
pcmcia: remove dev_info from client

pcmcia-remove-mtd-and-bulkmem-replaced-by-pcmciamtd.patch
pcmcia: remove mtd and bulkmem (replaced by pcmciamtd)

pcmcia-per-socket-resource-database.patch
pcmcia: per-socket resource database

pcmcia-validate_mem-only-for-non-statically-mapped-sockets.patch
pcmcia: validate_mem only for non-statically mapped sockets

pcmcia-adjust_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_io_region only for non-statically mapped sockets

pcmcia-find_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_io_region only for non-statically mapped sockets

pcmcia-find_mem_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_mem_region only for non-statically mapped sockets

pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_ and release_resources only for non-statically mapped sockets

pcmcia-move-resource-handling-code-only-for-non-statically-mapped-sockets-to-other-file.patch
pcmcia: move resource handling code only for non-statically mapped sockets to other file

pcmcia-make-rsrc_nonstatic-an-independend-module.patch
pcmcia: make rsrc_nonstatic an independend module

pcmcia-allocate-resource-database-per-socket.patch
pcmcia: allocate resource database per-socket

pcmcia-remove-typedef.patch
pcmcia: remove typedef

pcmcia-grab-lock-in-resource_release.patch
pcmcia: grab lock in resource_release

knfsd-nfsd_translate_wouldblocks.patch
knfsd: nfsd_translate_wouldblocks

knfsd-svcrpc-auth_null-fixes.patch
knfsd: svcrpc: auth_null fixes

knfsd-svcrpc-share-code-duplicated-between-auth_unix-and-auth_null.patch
knfsd: svcrpc: share code duplicated between auth_unix and auth_null

knfsd-nfsd4-fix-open_downgrade-decode-error.patch
knfsd: nfsd4: fix open_downgrade decode error.

knfsd-rpcsec_gss-comparing-pointer-to-0-instead-of-null.patch
knfsd: rpcsec_gss: comparing pointer to 0 instead of NULL

knfsd-nfsd4-fix-fileid-in-readdir-responses.patch
knfsd: nfsd4: fix fileid in readdir responses

knfsd-nfsd4-use-the-fsid-export-option-when-returning-the-fsid-attribute.patch
knfsd: nfsd4: use the fsid export option when returning the fsid attribute

knfsd-nfsd4-encode_dirent-cleanup.patch
knfsd: nfsd4 encode_dirent cleanup

knfsd-nfsd4-encode_dirent-superfluous-assignment.patch
knfsd: nfsd4: encode_dirent: superfluous assignment

knfsd-nfsd4-encode_dirent-superfluous-local-variables.patch
knfsd: nfsd4: encode_dirent: superfluous local variables

knfsd-nfsd4-encode_dirent-more-readdir-attribute-encoding-to-new-function.patch
knfsd: nfsd4: encode_dirent: more readdir attribute encoding to new function

knfsd-nfsd4-encode_dirent-simplify-nfs4_encode_dirent_fattr.patch
knfsd: nfsd4: encode_dirent: simplify nfs4_encode_dirent_fattr

knfsd-nfsd4-encode_dirent-move-rdattr_error-code-to-new-function.patch
knfsd: nfsd4: encode_dirent: move rdattr_error code to new function

knfsd-nfsd4-encode_dirent-simplify-error-handling.patch
knfsd: nfsd4: encode_dirent: simplify error handling

knfsd-nfsd4-encode_dirent-simplify-control-flow.patch
knfsd: nfsd4: encode_dirent: simplify control flow

knfsd-nfsd4-encode_dirent-fix-dropit-return.patch
knfsd: nfsd4: encode_dirent: fix dropit return

knfsd-nfsd4-encode_dirent-trivial-cleanup.patch
knfsd: nfsd4: encode_dirent: trivial cleanup

knfsd-move-nfserr_openmode-checking-from-nfsd_read-write-into-nfs4_preprocess_stateid_op-in-preperation-for-delegation-state.patch
knfsd: move nfserr_openmode checking from nfsd_read/write into nfs4_preprocess_stateid_op() in preperation for delegation state.

knfsd-check-the-callback-netid-in-gen_callback.patch
knfsd: check the callback netid in gen_callback.

knfsd-count-the-nfs4_client-structure-usage.patch
knfsd: count the nfs4_client structure usage

knfsd-preparation-for-delegation-client-callback-probe.patch
knfsd: preparation for delegation: client callback probe

knfsd-preparation-for-delegation-client-callback-probe-warning-fixes.patch
knfsd-preparation-for-delegation-client-callback-probe-warning-fixes

knfsd-probe-the-callback-path-upon-a-successful-setclientid_confirm.patch
knfsd: probe the callback path upon a successful setclientid_confirm

knfsd-check-for-existence-of-file_lock-parameter-inside-of-the-kernel-lock.patch
knfsd: check for existence of file_lock parameter inside of the kernel lock.

knfsd-get-rid-of-the-special-delegation_stateid_t-use-the-existing-stateid_t.patch
knfsd: get rid of the special delegation_stateid_t, use the existing stateid_t.

knfsd-add-structures-for-delegation-support.patch
knfsd: add structures for delegation support

knfsd-allocate-and-initialize-the-delegation-structure.patch
knfsd: allocate and initialize the delegation structure.

knfsd-find-a-delegation-for-a-file-given-a-stateid.patch
knfsd: find a delegation for a file given a stateid.

knfsd-add-the-delegation-release-and-free-functions.patch
knfsd: add the delegation release and free functions

knfsd-changes-to-expire_client.patch
knfsd: changes to expire_client

knfsd-delay-nfsd_colse-for-delegations-until-reaping.patch
knfsd: delay nfsd_colse for delegations until reaping

knfsd-delegation-recall-callback-rpc.patch
knfsd: delegation recall callback rpc.

knfsd-kernel-thread-for-delegation-callback.patch
knfsd: kernel thread for delegation callback

knfsd-helper-functions-for-deciding-to-grant-a-delegation.patch
knfsd: helper functions for deciding to grant a delegation.

knfsd-attempt-to-hand-out-a-delegation.patch
knfsd: attempt to hand out a delegation

knfsd-remove-unnecessary-stateowner-existence-check.patch
knfsd: remove unnecessary stateowner existence check.

knfsd-check-for-openmode-violations-given-a-delegation-stateid.patch
knfsd: check for openmode violations given a delegation stateid.

knfsd-add-checking-of-delegation-stateids-to-nfs4_preprocess_stateid_op.patch
knfsd: add checking of delegation stateids to nfs4_preprocess_stateid_op.

knfsd-add-the-delegreturn-operation.patch
knfsd: add the DELEGRETURN operation.

knfsd-add-to-the-laundromat-service-for-delegations.patch
knfsd: add to the laundromat service for delegations.

knfsd-clear-the-recall_lru-of-delegations-at-shutdown.patch
knfsd: clear the recall_lru of delegations at shutdown

kgdb-ga.patch
kgdb stub for ia32 (George Anzinger's one)
kgdbL warning fix
kgdb buffer overflow fix
kgdbL warning fix
kgdb: CONFIG_DEBUG_INFO fix
x86_64 fixes
correct kgdb.txt Documentation link (against 2.6.1-rc1-mm2)
kgdb: fix for recent gcc
kgdb warning fixes
THREAD_SIZE fixes for kgdb
Fix stack overflow test for non-8k stacks kgdb-ga.patch fix for i386 single-step into sysenter fix TRAP_BAD_SYSCALL_EXITS on i386
add TRAP_BAD_SYSCALL_EXITS config for i386 kgdb-is-incompatible-with-kprobes kgdb-ga-build-fix
kgdb-ga-fixes

kgdb-kill-off-highmem_start_page.patch
kgdb: kill off highmem_start_page

kgdboe-netpoll.patch
kgdb-over-ethernet via netpoll
kgdboe: fix configuration of MAC address

kgdb-x86_64-support.patch
kgdb-x86_64-support.patch for 2.6.2-rc1-mm3
kgdb-x86_64-warning-fixes
kgdb-x86_64-fix
kgdb-x86_64-serial-fix
kprobes exception notifier fix

invalidate_inodes-speedup.patch
invalidate_inodes speedup
more invalidate_inodes speedup fixes

dev-mem-restriction-patch.patch
/dev/mem restriction patch

dev-mem-restriction-patch-allow-reads.patch
dev-mem-restriction-patch: allow reads

jbd-remove-livelock-avoidance.patch
JBD: remove livelock avoidance code in journal_dirty_data()

journal_add_journal_head-debug.patch
journal_add_journal_head-debug

list_del-debug.patch
list_del debug check

unplug-can-sleep.patch
unplug functions can sleep

firestream-warnings.patch
firestream warnings

perfctr-core.patch
perfctr: core

perfctr-i386.patch
perfctr: i386

perfctr-x86-core-updates.patch
perfctr x86 core updates

perfctr-x86-driver-updates.patch
perfctr x86 driver updates

perfctr-x86-driver-cleanup.patch
perfctr: x86 driver cleanup

perfctr-prescott-fix.patch
Prescott fix for perfctr

perfctr-x86-update-2.patch
perfctr x86 update 2

perfctr-x86_64.patch
perfctr: x86_64

perfctr-x86_64-core-updates.patch
perfctr x86_64 core updates

perfctr-ppc.patch
perfctr: PowerPC

perfctr-ppc32-driver-update.patch
perfctr: ppc32 driver update

perfctr-ppc32-mmcr0-handling-fixes.patch
perfctr ppc32 MMCR0 handling fixes

perfctr-ppc32-update.patch
perfctr ppc32 update

perfctr-ppc32-update-2.patch
perfctr ppc32 update

perfctr-virtualised-counters.patch
perfctr: virtualised counters

perfctr-remap_page_range-fix.patch

virtual-perfctr-illegal-sleep.patch
virtual perfctr illegal sleep

make-perfctr_virtual-default-in-kconfig-match-recommendation.patch
Make PERFCTR_VIRTUAL default in Kconfig match recommendation in help text

perfctr-ifdef-cleanup.patch
perfctr ifdef cleanup

perfctr-update-2-6-kconfig-related-updates.patch
perfctr: Kconfig-related updates

perfctr-virtual-updates.patch
perfctr virtual updates

perfctr-virtual-cleanup.patch
perfctr: virtual cleanup

perfctr-ppc32-preliminary-interrupt-support.patch
perfctr ppc32 preliminary interrupt support

perfctr-update-5-6-reduce-stack-usage.patch
perfctr: reduce stack usage

perfctr-interrupt-support-kconfig-fix.patch
perfctr interrupt_support Kconfig fix

perfctr-low-level-documentation.patch
perfctr low-level documentation

perfctr-inheritance-1-3-driver-updates.patch
perfctr inheritance: driver updates

perfctr-inheritance-2-3-kernel-updates.patch
perfctr inheritance: kernel updates

perfctr-inheritance-3-3-documentation-updates.patch
perfctr inheritance: documentation updates

perfctr-inheritance-locking-fix.patch
perfctr inheritance locking fix

perfctr-api-changes-first-step.patch
perfctr API changes: first step

perfctr-virtual-update.patch
perfctr virtual update

perfctr-x86-64-ia32-emulation-fix.patch
perfctr x86-64 ia32 emulation fix

perfctr-sysfs-update-1-4-core.patch
perfctr sysfs update: core

perfctr-sysfs-update.patch
Perfctr sysfs update

perfctr-sysfs-update-2-4-x86.patch
perfctr sysfs update: x86

perfctr-sysfs-update-3-4-x86-64.patch
perfctr sysfs update: x86-64

perfctr-sysfs-update-4-4-ppc32.patch
perfctr sysfs update: ppc32

sched-more-agressive-wake_idle.patch
sched: more agressive wake_idle()

sched-can_migrate-exception-for-idle-cpus.patch
sched: can_migrate exception for idle cpus

sched-newidle-fix.patch
sched: newidle fix

sched-active_load_balance-fixlet.patch
sched: active_load_balance() fixlet

sched-reset-cache_hot_time.patch
sched: reset cache_hot_time

schedc-whitespace-mangler.patch
sched.c whitespace mangler

sched-alter_kthread_prio.patch
sched: alter_kthread_prio

sched-adjust_timeslice_granularity.patch
sched: adjust_timeslice_granularity

sched-add_requeue_task.patch
sched: add_requeue_task

requeue_granularity.patch
sched: requeue_granularity

sched-remove_interactive_credit.patch
sched: remove_interactive_credit

sched-use-cached-current-value.patch
sched: use cached current value

dont-hide-thread_group_leader-from-grep.patch
don't hide thread_group_leader() from grep

sched-no-need-to-recalculate-rq.patch
sched: no need to recalculate rq

export-sched_setscheduler-for-kernel-module-use.patch
export sched_setscheduler() for kernel module use

add-do_proc_doulonglongvec_minmax-to-sysctl-functions.patch
Add do_proc_doulonglongvec_minmax to sysctl functions add-do_proc_doulonglongvec_minmax-to-sysctl-functions-fix add-do_proc_doulonglongvec_minmax-to-sysctl-functions fix 2

add-sysctl-interface-to-sched_domain-parameters.patch
Add sysctl interface to sched_domain parameters

preempt-smp.patch
improve preemption on SMP

preempt-smp-_raw_read_trylock-bias-fix.patch
preempt-smp _raw_read_trylock bias fix

preempt-cleanup.patch
preempt cleanup

preempt-cleanup-fix.patch
preempt-cleanup-fix

add-lock_need_resched.patch
add lock_need_resched()

sched-add-cond_resched_softirq.patch
sched: add cond_resched_softirq()

sched-ext3-fix-scheduling-latencies-in-ext3.patch
sched: ext3: fix scheduling latencies in ext3

break-latency-in-invalidate_list.patch
break latency in invalidate_list()

sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent.patch
sched: vfs: fix scheduling latencies in prune_dcache() and select_parent()

sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent-fix.patch
sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent fix

sched-net-fix-scheduling-latencies-in-netstat.patch
sched: net: fix scheduling latencies in netstat

sched-net-fix-scheduling-latencies-in-__release_sock.patch
sched: net: fix scheduling latencies in __release_sock

sched-mm-fix-scheduling-latencies-in-unmap_vmas.patch
sched: mm: fix scheduling latencies in unmap_vmas()

sched-mm-fix-scheduling-latencies-in-get_user_pages.patch
sched: mm: fix scheduling latencies in get_user_pages()

sched-mm-fix-scheduling-latencies-in-filemap_sync.patch
sched: mm: fix scheduling latencies in filemap_sync()

fix-keventd-execution-dependency.patch
fix keventd execution dependency

sched-fix-scheduling-latencies-in-mttrc.patch
sched: fix scheduling latencies in mttr.c

sched-fix-scheduling-latencies-in-mttrc-reenables-interrupts.patch
sched-fix-scheduling-latencies-in-mttrc reenables interrupts

sched-fix-scheduling-latencies-in-vgaconc.patch
sched: fix scheduling latencies in vgacon.c

sched-fix-scheduling-latencies-for-preempt-kernels.patch
sched: fix scheduling latencies for !PREEMPT kernels

idle-thread-preemption-fix.patch
idle thread preemption fix

oprofile-smp_processor_id-fixes.patch
oprofile smp_processor_id() fixes

fix-smp_processor_id-warning-in-numa_node_id.patch
Fix smp_processor_id() warning in numa_node_id()

replace-numnodes-with-node_online_map-alpha.patch
Subject: [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha

replace-numnodes-with-node_online_map-arm.patch
Subject: [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm

replace-numnodes-with-node_online_map-i386.patch
Subject: [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386

replace-numnodes-with-node_online_map-ia64.patch
Subject: [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64

replace-numnodes-with-node_online_map-m32r.patch
Subject: [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r

replace-numnodes-with-node_online_map-mips.patch
Subject: [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips

replace-numnodes-with-node_online_map-parisc.patch
Subject: [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc

replace-numnodes-with-node_online_map-ppc64.patch
Subject: [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64

replace-numnodes-with-node_online_map-x86_64.patch
Subject: [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64

replace-numnodes-with-node_online_map.patch
Subject: [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent

vmtrunc-truncate_count-not-atomic.patch
vmtrunc: truncate_count not atomic

vmtrunc-restore-unmap_vmas-zap_bytes.patch
vmtrunc: restore unmap_vmas zap_bytes

vmtrunc-unmap_mapping_range_tree.patch
vmtrunc: unmap_mapping_range_tree

vmtrunc-unmap_mapping-dropping-i_mmap_lock.patch
vmtrunc: unmap_mapping dropping i_mmap_lock

vmtrunc-vm_truncate_count-race-caution.patch
vmtrunc: vm_truncate_count race caution

vmtrunc-bug-if-page_mapped.patch
vmtrunc: bug if page_mapped

vmtrunc-restart_addr-in-truncate_count.patch
vmtrunc: restart_addr in truncate_count

remove-the-bkl-by-turning-it-into-a-semaphore.patch
remove the BKL by turning it into a semaphore

oprofile-preempt-warning-fixes.patch
oprofile preempt warning fixes

smp_processor_id-commentary.patch
smp_processor_id() commentary

cpu_down-warning-fix.patch
cpu_down() warning fix

linux-2.6.8.1-49-rpc_workqueue.patch
nfs: RPC: Convert rpciod into a work queue for greater flexibility

linux-2.6.8.1-50-rpc_queue_lock.patch
nfs: RPC: Remove the rpc_queue_lock global spinlock

allow-modular-ide-pnp.patch
allow modular ide-pnp

allow-x86_64-to-reenable-interrupts-on-contention.patch
Allow x86_64 to reenable interrupts on contention

i386-cpu-hotplug-updated-for-mm.patch
i386 CPU hotplug updated for -mm

ppc64-fix-cpu-hotplug.patch
ppc64: fix hotplug cpu

serialize-access-to-ide-devices.patch
serialize access to ide devices

disable-atykb-warning.patch
disable atykb "too many keys pressed" warning

export-file_ra_state_init-again.patch
Export file_ra_state_init() again

cachefs-filesystem.patch
CacheFS filesystem

numa-policies-for-file-mappings-mpol_mf_move-cachefs.patch
numa-policies-for-file-mappings-mpol_mf_move for cachefs

cachefs-release-search-records-lest-they-return-to-haunt-us.patch
CacheFS: release search records lest they return to haunt us

fix-64-bit-problems-in-cachefs.patch
Fix 64-bit problems in cachefs

cachefs-fixed-typos-that-cause-wrong-pointer-to-be-kunmapped.patch
cachefs: fixed typos that cause wrong pointer to be kunmapped

cachefs-return-the-right-error-upon-invalid-mount.patch
CacheFS: return the right error upon invalid mount

fix-cachefs-barrier-handling-and-other-kernel-discrepancies.patch
Fix CacheFS barrier handling and other kernel discrepancies

remove-error-from-linux-cachefsh.patch
Remove #error from linux/cachefs.h

cachefs-warning-fix-2.patch
cachefs warning fix 2

cachefs-linkage-fix-2.patch
cachefs linkage fix

cachefs-build-fix.patch
cachefs build fix

cachefs-documentation.patch
CacheFS documentation

add-page-becoming-writable-notification.patch
Add page becoming writable notification

add-page-becoming-writable-notification-fix.patch
do_wp_page_mk_pte_writable() fix

provide-a-filesystem-specific-syncable-page-bit.patch
Provide a filesystem-specific sync'able page bit

provide-a-filesystem-specific-syncable-page-bit-fix.patch
provide-a-filesystem-specific-syncable-page-bit-fix

provide-a-filesystem-specific-syncable-page-bit-fix-2.patch
provide-a-filesystem-specific-syncable-page-bit-fix-2

make-afs-use-cachefs.patch
Make AFS use CacheFS

afs-cachefs-dependency-fix.patch
afs-cachefs-dependency-fix

split-general-cache-manager-from-cachefs.patch
Split general cache manager from CacheFS

turn-cachefs-into-a-cache-backend.patch
Turn CacheFS into a cache backend

rework-the-cachefs-documentation-to-reflect-fs-cache-split.patch
Rework the CacheFS documentation to reflect FS-Cache split

update-afs-client-to-reflect-cachefs-split.patch
Update AFS client to reflect CacheFS split

assign_irq_vector-section-fix.patch
assign_irq_vector __init section fix

kexec-i8259-shutdowni386.patch
kexec: i8259-shutdown.i386

kexec-i8259-shutdown-x86_64.patch
kexec: x86_64 i8259 shutdown

kexec-apic-virtwire-on-shutdowni386patch.patch
kexec: apic-virtwire-on-shutdown.i386.patch

kexec-apic-virtwire-on-shutdownx86_64.patch
kexec: apic-virtwire-on-shutdown.x86_64

kexec-ioapic-virtwire-on-shutdowni386.patch
kexec: ioapic-virtwire-on-shutdown.i386

kexec-apic-virt-wire-fix.patch
kexec: apic-virt-wire fix

kexec-ioapic-virtwire-on-shutdownx86_64.patch
kexec: ioapic-virtwire-on-shutdown.x86_64

kexec-e820-64bit.patch
kexec: e820-64bit

kexec-kexec-generic.patch
kexec: kexec-generic

kexec-ide-spindown-fix.patch
kexec-ide-spindown-fix

kexec-ifdef-cleanup.patch
kexec ifdef cleanup

kexec-machine_shutdownx86_64.patch
kexec: machine_shutdown.x86_64

kexec-kexecx86_64.patch
kexec: kexec.x86_64

kexec-kexecx86_64-4level-fix.patch
kexec-kexecx86_64-4level-fix

kexec-machine_shutdowni386.patch
kexec: machine_shutdown.i386

kexec-kexeci386.patch
kexec: kexec.i386

kexec-use_mm.patch
kexec: use_mm

kexec-loading-kernel-from-non-default-offset.patch
kexec: loading kernel from non-default offset

kexec-loading-kernel-from-non-default-offset-fix.patch
kdump: fix bss compile error

kexec-enabling-co-existence-of-normal-kexec-kernel-and-panic-kernel.patch
kexec: nabling co-existence of normal kexec kernel and panic kernel

kexec-ppc-support.patch
kexec: ppc support

crashdump-documentation.patch
crashdump: documentation

crashdump-memory-preserving-reboot-using-kexec.patch
crashdump: memory preserving reboot using kexec

crashdump-memory-preserving-reboot-using-kexec-fix.patch
kdump: Fix for boot problems on SMP

kdump-config_discontigmem-fix.patch
kdump: CONFIG_DISCONTIGMEM fix

crashdump-routines-for-copying-dump-pages.patch
crashdump: routines for copying dump pages

crashdump-routines-for-copying-dump-pages-kmap-fiddle.patch
crashdump-routines-for-copying-dump-pages-kmap-fiddle

crashdump-kmap-build-fix.patch
crashdump kmap build fix

crashdump-register-snapshotting-before-kexec-boot.patch
crashdump: register snapshotting before kexec boot

crashdump-elf-format-dump-file-access.patch
crashdump: ELF format dump file access

crashdump-linear-raw-format-dump-file-access.patch
crashdump: linear/raw format dump file access

crashdump-minor-bug-fixes-to-kexec-crashdump-code.patch
crashdump: minor bug fixes to kexec crashdump code

crashdump-cleanups-to-the-kexec-based-crashdump-code.patch
crashdump: cleanups to the kexec based crashdump code

x86-rename-apic_mode_exint.patch
x86: rename APIC_MODE_EXINT

x86-local-apic-fix.patch
x86: local apic fix

new-bitmap-list-format-for-cpusets.patch
new bitmap list format (for cpusets)

cpusets-big-numa-cpu-and-memory-placement.patch
cpusets - big numa cpu and memory placement

cpusets-fix-cpuset_get_dentry.patch
cpusets : fix cpuset_get_dentry()

cpusets-fix-race-in-cpuset_add_file.patch
cpusets: fix race in cpuset_add_file()

cpusets-remove-more-casts.patch
cpusets: remove more casts

cpusets-make-config_cpusets-the-default-in-sn2_defconfig.patch
cpusets: make CONFIG_CPUSETS the default in sn2_defconfig

cpusets-document-proc-status-allowed-fields.patch
cpusets: document proc status allowed fields

cpusets-dont-export-proc_cpuset_operations.patch
Cpusets - Dont export proc_cpuset_operations

cpusets-display-allowed-masks-in-proc-status.patch
cpusets: display allowed masks in proc status

cpusets-simplify-cpus_allowed-setting-in-attach.patch
cpusets: simplify cpus_allowed setting in attach

cpusets-remove-useless-validation-check.patch
cpusets: remove useless validation check

cpusets-config_cpusets-depends-on-smp.patch
Cpusets: CONFIG_CPUSETS depends on SMP

cpusets-tasks-file-simplify-format-fixes.patch
Cpusets tasks file: simplify format, fixes

cpusets-simplify-memory-generation.patch
Cpusets: simplify memory generation

cpusets-interoperate-with-hotplug-online-maps.patch
cpusets: interoperate with hotplug online maps

cpusets-alternative-fix-for-possible-race-in.patch
cpusets: alternative fix for possible race in cpuset_tasks_read()

cpusets-remove-casts.patch
cpusets: remove void* typecasts

reiser4-sb_sync_inodes.patch
reiser4: vfs: add super_operations.sync_inodes()

reiser4-allow-drop_inode-implementation.patch
reiser4: export vfs inode.c symbols

reiser4-truncate_inode_pages_range.patch
reiser4: vfs: add truncate_inode_pages_range()

reiser4-export-remove_from_page_cache.patch
reiser4: export pagecache add/remove functions to modules

reiser4-export-page_cache_readahead.patch
reiser4: export page_cache_readahead to modules

reiser4-reget-page-mapping.patch
reiser4: vfs: re-check page->mapping after calling try_to_release_page()

reiser4-rcu-barrier.patch
reiser4: add rcu_barrier() synchronization point

reiser4-export-inode_lock.patch
reiser4: export inode_lock to modules

reiser4-export-pagevec-funcs.patch
reiser4: export pagevec functions to modules

reiser4-export-radix_tree_preload.patch
reiser4: export radix_tree_preload() to modules

reiser4-export-find_get_pages.patch

reiser4-radix-tree-tag.patch
reiser4: add new radix tree tag

reiser4-radix_tree_lookup_slot.patch
reiser4: add radix_tree_lookup_slot()

reiser4-perthread-pages.patch
reiser4: per-thread page pools

reiser4-unstatic-kswapd.patch
reiser4: make kswapd() unstatic for debug

reiser4-include-reiser4.patch
reiser4: add to build system

reiser4-doc.patch
reiser4: documentation

reiser4-only.patch
reiser4: main fs

reiser4-recover-read-performance.patch
reiser4: recover read performance

reiser4-export-find_get_pages_tag.patch
reiser4-export-find_get_pages_tag

reiser4-add-missing-context.patch

add-acpi-based-floppy-controller-enumeration.patch
Add ACPI-based floppy controller enumeration.

possible-dcache-bug-debugging-patch.patch
Possible dcache BUG: debugging patch

3c59x-reload-eeprom-values-at-rmmod-for-needy-cards.patch
3c59x: reload EEPROM values at rmmod for needy cards

3c59x-remove-eeprom_reset-for-3c905b.patch
3c59x: remove EEPROM_RESET for 3c905B

3c59x-add-eeprom_reset-for-3c900-boomerang.patch
3c59x: Add EEPROM_RESET for 3c900 Boomerang

3c59x-pm-fix.patch
3c59x: enable power management unconditionally

3c59x-missing-pci_disable_device.patch
3c59x: missing pci_disable_device

3c59x-use-netdev_priv.patch
3c59x: use netdev_priv

3c59x-make-use-of-generic_mii_ioctl.patch
3c59x: Make use of generic_mii_ioctl

3c59x-vortex-select-mii.patch
3c59x: VORTEX select MII

3c59x-support-more-ethtool_ops.patch
3c59x: support more ethtool_ops

serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
serial: add support for non-standard XTALs to 16c950 driver

add-support-for-possio-gcc-aka-pcmcia-siemens-mc45.patch
Add support for Possio GCC AKA PCMCIA Siemens MC45

new-serial-flow-control.patch
new serial flow control

mpsc-driver-patch.patch
serial: MPSC driver

vm-pageout-throttling.patch
vm: pageout throttling

revert-allow-oem-written-modules-to-make-calls-to-ia64-oem-sal-functions.patch
revert "allow OEM written modules to make calls to ia64 OEM SAL functions"

md-improve-hash-code-in-linearc.patch
md: improve 'hash' code in linear.c

md-add-interface-for-userspace-monitoring-of-events.patch
md: add interface for userspace monitoring of events.

make-acpi_bus_register_driver-consistent-with-pci_register_driver-again.patch
make acpi_bus_register_driver() consistent with pci_register_driver()

enforce-a-gap-between-heap-and-stack.patch
Enforce a gap between heap and stack

remove-lock_section-from-x86_64-spin_lock-asm.patch
remove LOCK_SECTION from x86_64 spin_lock asm

kfree_skb-dump_stack.patch
kfree_skb-dump_stack

for-mm-only-remove-remap_page_range-completely.patch
vm: for -mm only: remove remap_page_range() completely

cancel_rearming_delayed_work.patch
cancel_rearming_delayed_work()
make cancel_rearming_delayed_workqueue static

ipvs-deadlock-fix.patch
ipvs deadlock fix

minimal-ide-disk-updates.patch
Minimal ide-disk updates

no-buddy-bitmap-patch-revist-intro-and-includes.patch
no buddy bitmap patch revist: intro and includes

no-buddy-bitmap-patch-revisit-for-mm-page_allocc.patch
no buddy bitmap patch revisit: for mm/page_alloc.c

no-buddy-bitmap-patch-revisit-for-mm-page_allocc-fix.patch
no-buddy-bitmap-patch-revisit-for-mm-page_allocc fix

no-buddy-bitmap-patch-revist-for-ia64.patch
no buddy bitmap patch revist: for ia64

no-buddy-bitmap-patch-revist-for-ia64-fix.patch
no-buddy-bitmap-patch-revist-for-ia64 fix

use-find_trylock_page-in-free_swap_and_cache-instead-of-hand-coding.patch
use find_trylock_page in free_swap_and_cache instead of hand coding

fbdev-sis-framebuffer-driver-update-1717.patch
fbdev: SiS framebuffer driver update 1.7.17

fbdev-sysfs-fix.patch
fbdev: sysfs fix

pm2fb-module-parameters-and-module-conditional-code.patch
pm2fb: module parameters and module-conditional code

pm2fb-save-restore-memory-config.patch
pm2fb: save/restore memory config

pm2fb-use-modedb-in-modules.patch
pm2fb: use modedb in modules

pm2fb-fix-big-endian-sparc-support.patch
pm2fb: fix big-endian (Sparc) support

pm2fb-fix-fbi-image-display-on-24-bit-depth-big-endian.patch
pm2fb: fix fbi image display on 24 bit depth big endian

fix-rom-enable-disable-in-r128-and-radeon-fb-drivers.patch
fix ROM enable/disable in r128 and radeon fb drivers

fbdev-cleanup-i2c-code-of-rivafb.patch
fbdev: Cleanup i2c code of rivafb

fbdev-revive-bios-less-booting-for-rage-xl-cards.patch
fbdev: Revive BIOS-less booting for Rage XL cards

fbdev-revive-global_mode_option.patch
fbdev: Revive global_mode_option

fbcon-fbdev-add-blanking-notification.patch
fbcon/fbdev: Add blanking notification

fbcon-fbdev-add-blanking-notification-fix.patch
fbcon-fbdev-add-blanking-notification-fix

fbdev-check-return-value-of-fb_add_videomode.patch
fbdev: Check return value of fb_add_videomode

fbdev-do-a-symbol_put-for-each-symbol_get-in-savagefb.patch
fbdev: Do a symbol_put for each symbol_get in savagefb

fbdev-add-viewsonic-pf775a-to-broken-display-database.patch
fbdev: Add Viewsonic PF775a to broken display database

fbdev-fix-default-timings-in-vga16fb.patch
fbdev: Fix default timings in vga16fb

fbdev-reduce-stack-usage-of-intelfb.patch
fbdev: Reduce stack usage of intelfb

zr36067-driver-correct-jpeg-app-com-markers.patch
zr36067 driver - correct jpeg app/com markers

zr36067-driver-ppc-be-port.patch
zr36067 driver - ppc/be port

zr36067-driver-reduce-stack-size-usage.patch
zr36067 driver - reduce stack size usage

raid6-altivec-support.patch
raid6: altivec support

remove-export_symbol_novers.patch
Remove EXPORT_SYMBOL_NOVERS

figure-out-who-is-inserting-bogus-modules.patch
Figure out who is inserting bogus modules

use-mmiowb-in-qla1280c.patch
use mmiowb in qla1280.c

readpage-vs-invalidate-fix.patch
readpage-vs-invalidate fix

invalidate_inode_pages-mmap-coherency-fix.patch
invalidate_inode_pages2() mmap coherency fix

cputime-introduce-cputime.patch
cputime: introduce cputime

cputime-fix-do_setitimer.patch
cputime: fix do_setitimer.

cputime-missing-pieces.patch
cputime: missing pieces.

mm-check_rlimit-oops-on-p-signal.patch
check_rlimit oops on p->signal

cputime-microsecond-based-cputime-for-s390.patch
cputime: microsecond based cputime for s390

detect-atomic-counter-underflows.patch
detect atomic counter underflows

lock-initializer-unifying-batch-2-alpha.patch
Lock initializer unifying: ALPHA

lock-initializer-unifying-batch-2-ia64.patch
Lock initializer unifying: IA64

lock-initializer-unifying-batch-2-m32r.patch
Lock initializer unifying: M32R

lock-initializer-unifying-batch-2-mips.patch
Lock initializer unifying: MIPS

lock-initializer-unifying-batch-2-misc-drivers.patch
Lock initializer unifying: Misc drivers

lock-initializer-unifying-batch-2-block-devices.patch
Lock initializer unifying: Block devices

lock-initializer-unifying-batch-2-drm.patch
Lock initializer unifying: DRM

lock-initializer-unifying-batch-2-character-devices.patch
Lock initializer unifying: character devices

lock-initializer-unifying-batch-2-rio.patch
Lock initializer unifying: RIO

lock-initializer-unifying-batch-2-firewire.patch
Lock initializer unifying: Firewire

lock-initializer-unifying-batch-2-isdn.patch
Lock initializer unifying: ISDN

lock-initializer-unifying-batch-2-raid.patch
Lock initializer unifying: Raid

lock-initializer-unifying-batch-2-media-drivers.patch
Lock initializer unifying: media drivers

lock-initializer-unifying-batch-2-drivers-serial.patch
Lock initializer unifying: drivers/serial

lock-initializer-unifying-batch-2-filesystems.patch
Lock initializer unifying: Filesystems

lock-initializer-unifying-batch-2-video.patch
Lock initializer unifying: Video

lock-initializer-unifying-batch-2-sound.patch
Lock initializer unifying: sound

lock-initializer-cleanup-common-headers.patch
Lock initializer cleanup (common headers)

lock-initializer-cleanup-character-devices.patch
Lock initializer cleanup (character devices)

lock-initializer-cleanup-core.patch
Lock initializer cleanup (Core)

moxa-update-status-of-moxa-smartio-driver.patch
moxa: Update status of Moxa Smartio driver

moxa-remove-ancient-changelog-readmemoxa.patch
moxa: Remove ancient changelog README.moxa

moxa-remove-readmemoxa-from-documentation-00-index.patch
moxa: Remove README.moxa from Documentation/00-INDEX

specialix-remove-bouncing-e-mail-address.patch
specialix: remove bouncing e-mail address

stallion-update-to-documentation-stalliontxt.patch
stallion: Update to Documentation/stallion.txt

riscom8-update-staus-and-documentation-of-driver.patch
riscom8: Update staus and documentation of driver

pm-remove-outdated-docs.patch
From: Pavel Machek <[email protected]>
Subject: pm: remove outdated docs

docs-add-sparse-howto.patch
From: Pavel Machek <[email protected]>
Subject: docs: add sparse howto

cciss-documentation-update.patch
cciss: Documentation update

cciss-correct-mailing-list-address-in-source-code.patch
cciss: Correct mailing list address in source code

cpqarray-correct-mailing-list-address-in-source-code.patch
cpqarray: Correct mailing list address in source code

sh-remove-x86-specific-help-in-kconfig.patch
sh: Remove x86-specific help in Kconfig

cyclades-put-readmecycladez-in-documentation-serial.patch
cyclades: Put README.cycladeZ in Documentation/serial

tipar-document-driver-options.patch
tipar: Document driver options

tipar-code-cleanup.patch
tipar: Code cleanup

eth1394-module_parm-conversion.patch
eth1394 MODULE_PARM conversion

isapnp-module_param-conversion.patch
isapnp module_param conversion

sr-module_param-conversion.patch
sr module_param conversion

media-video-module_param-conversion.patch
media/video module_param conversion

btaudio-module_param-conversion.patch
btaudio module_param conversion

small-drivers-char-rio-cleanups-fwd.patch
small drivers/char/rio/ cleanups

small-char-generic_serialc-cleanup-fwd.patch
small char/generic_serial.c cleanup

debug_bugverbose-for-i386-fwd.patch
DEBUG_BUGVERBOSE for i386

telephony-ixjc-cleanup-fwd.patch
telephony/ixj.c cleanup

char-cycladesc-remove-unused-code-fwd.patch
char/cyclades.c: remove unused code

oss-ac97-quirk-facility.patch
oss: AC97 quirk facility

oss-ac97-quirk-facility-fix.patch
oss-ac97-quirk-facility fix

ext3-use-generic_open_file-to-fix-possible-preemption-bugs.patch
ext3: use generic_open_file to fix possible preemption bugs

bttv-i2cc-make-two-functions-static.patch
bttv-i2c.c: make two functions static

bttv-riscc-make-some-functions-static.patch
bttv-risc.c: make some functions static

bttv-help-fix.patch
bttv help fix

zoran_driverc-make-zoran_num_formats-static.patch
zoran_driver.c: make zoran_num_formats static

media-video-msp3400c-remove-unused-struct-d1.patch
media/video/msp3400.c: remove unused struct d1

zoran_devicec-make-zr36057_init_vfe-static.patch
zoran_device.c: make zr36057_init_vfe static

drivers-media-video-the-easy-cleanups.patch
drivers/media/video: the easy cleanups

small-ftape-cleanups-fwd.patch
small ftape cleanups

reiser3-cleanups.patch
reiser3 cleanups

cdromc-make-several-functions-static.patch
cdrom.c: make several functions static (fwd)

fs-coda-psdevc-shouldnt-include-lph.patch
fs/coda/psdev.c shouldn't include lp.h

remove-early_param-tests.patch
remove early_param test code

MODULE_PARM-allmod.patch
MODULE_PARM conversions

MODULE_PARM-allyes.patch
MODULE_PARM conversions

lockd-fix-two-struct-definitions.patch
lockd: fix two struct definitions

small-mca-cleanups-fwd.patch
small MCA cleanups

small-drivers-media-radio-cleanups-fwd.patch
small drivers/media/radio/ cleanups

ifdef-typos-arch_ppc_platforms_prep_setupc.patch
ifdef typos: arch_ppc_platforms_prep_setup.c

ifdef-typos-arch_ppc_platforms_prep_setupc-another-one.patch
ifdef typos: arch_ppc_platforms_prep_setup.c -another one

ifdef-typos-arch_ppc_syslib_ppc4xx_dmac.patch
ifdef typos: arch_ppc_syslib_ppc4xx_dma.c

ifdef-typos-arch_sh_boards_renesas_hs7751rvoip_ioc.patch
ifdef typos: arch_sh_boards_renesas_hs7751rvoip_io.c

ifdef-typos-drivers_char_ipmi_ipmi_si_intfc.patch
ifdef typos: drivers_char_ipmi_ipmi_si_intf.c

ifdef-typos-drivers_net_wireless_wavelan_csc.patch
ifdef typos: drivers_net_wireless_wavelan_cs.c

ifdef-typos-drivers_usb_net_usbnetc.patch
ifdef typos: drivers_usb_net_usbnet.c

ifdef-typos-mips-au100_usb_device.patch
ifdef typos mips: AU1[0X]00_USB_DEVICE

ipmi-use-c99-struct-inits.patch
IPMI: use C99 struct inits.

drm-remove-unused-functions-fwd.patch
DRM: remove unused functions

floppyc-remove-an-unused-function-fwd.patch
floppy.c: remove an unused function

media-video-ir-kbd-i2cc-remove-an-unused-function-fwd.patch
media/video/ir-kbd-i2c.c: remove an unused function

nfs-remove-an-unused-function-fwd.patch
NFS: remove an unused function

watchdog-machzwdc-remove-unused-functions-fwd.patch
watchdog/machzwd.c: remove unused functions

video-drivers-remove-unused-functions-fwd.patch
video drivers: remove unused functions

isdn-b1pcmciac-remove-an-unused-variable-fwd.patch
ISDN b1pcmcia.c: remove an unused variable

binfmt_scriptc-make-struct-script_format-static-fwd.patch
binfmt_script.c: make struct script_format static

bioc-make-bio_destructor-static-fwd.patch
bio.c: make bio_destructor static

devpts-inodec-make-one-struct-static-fwd.patch
devpts/inode.c: make one struct static

small-proc_fs-cleanups-fwd.patch
small proc_fs cleanups

kernel-timerc-comment-typo.patch
Fix kernel/timer.c comment typo

mark-qnx4fs_rw-as-broken-fwd.patch
mark QNX4FS_RW as BROKEN

oss-remove-unused-functions-fwd.patch
OSS: remove unused functions

dvb-av7110_hwc-remove-unused-functions-fwd.patch
DVB av7110_hw.c: remove unused functions

schedc-remove-an-unused-macro-fwd.patch
sched.c: remove an unused macro

scsi-ahcic-remove-an-unused-function-fwd.patch
scsi/ahci.c: remove an unused function

scsi-aic7xxx-aic79xx_osmc-remove-an-unused-function-fwd.patch
scsi/aic7xxx/aic79xx_osm.c: remove an unused function

schedc-remove-an-unused-function-fwd.patch
sched.c: remove an unused function

prism54-small-prismcompat-cleanup-fwd.patch
prism54: small prismcompat cleanup

some-parport_pcc-cleanups-fwd.patch
some parport_pc.c cleanups

fix-typo-and-email-in-saktxt.patch
fix typo and email in SAK.txt

cris-remove-kernel-20-ifdefs-fwd.patch
cris: remove kernel 2.0 #ifdef's

afs-afs_voltypes-isnt-always-required-fwd.patch
AFS: afs_voltypes isn't always required

befs-if-0-two-unused-global-functions-fwd.patch
befs: #if 0 two unused global functions

binfmt_scriptc-make-em86_format-static.patch
binfmt_script.c: make em86_format static

remove-unused-include-asm-m68k-adb_mouseh.patch
remove unused include/asm-m68k/adb_mouse.h

scsi-aic7xxx-remove-two-useless-variables.patch
scsi/aic7xxx/: remove two useless variables

remove-in_string_c.patch
remove IN_STRING_C

remove-ct_to_secs-ct_to_usecs.patch
remove CT_TO_SECS()/CT_TO_USECS()

bttv-driverc-make-some-variables-static.patch
bttv-driver.c: make some variables static

arch-alpha-kconfig-kill-stale-reference-to-documentation-smptex.patch
arch/alpha/Kconfig: Kill stale reference to Documentation/smp.tex

init-initramfsc-make-unpack_to_rootfs-static.patch
init/initramfs.c: make unpack_to_rootfs static

oss-misc-cleanups.patch
OSS: misc cleanups

inux-269-fs-proc-basec-array-size.patch
fs/proc/base.c: array size

linux-269-fs-proc-proc_ttyc-avoid-array.patch
fs/proc/proc_tty.c: avoid array

optimize-prefetch-usage-in-list_for_each_xxx.patch
optimize prefetch() usage in list_for_each_xxx

signalc-convert-assertion-to-bug_on.patch
signal.c: convert assertion to BUG_ON()

right-severity-level-for-fatal-message.patch
Right severity level for fatal message

remove-unused-drivers-char-rio-cdprotoh.patch
remove unused drivers/char/rio/cdproto.h

remove-unused-drivers-char-rsf16fmih.patch
remove unused drivers/char/rsf16fmi.h

mtd-added-nec-upd29f064115-support.patch
mtd: added NEC uPD29F064115 support

waiting-10s-before-mounting-root-filesystem.patch
retry mounting the root filesystem at boot time

#31 lore raw

Re: 2.6.10-mm1

Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

#32 lore raw

Re: 2.6.10-mm1

Quoted 7 lines · Christoph Hellwig
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

And apparently it's broken on NUMA. I couldn't find generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA enabled.

Jesse

mm/filemap.c +0 -4
diff -Napur -X /home/jbarnes/dontdiff linux-2.6.10-mm1.orig/mm/filemap.c linux-2.6.10-mm1/mm/filemap.c
@@ -1542,10 +1542,6 @@ struct vm_operations_struct generic_file
 	.nopage		= filemap_nopage,
 	.populate	= filemap_populate,
 	.page_mkwrite	= filemap_page_mkwrite,
-#ifdef CONFIG_NUMA
-	.set_policy     = generic_file_set_policy,
-	.get_policy     = generic_file_get_policy,
-#endif
 };
 
 /* This is used for a general mmap of a disk file */
#33 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

Quoted 4 lines · Jesse Barnes
Quoted 3 lines · Christoph Hellwig
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

Quoted 8 lines
Quoted 4 lines

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

And apparently it's broken on NUMA. I couldn't find generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA enabled.

On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the kernel, but it does not boot. It only prints this to the serial console:

Bootdata ok (command line is root=/dev/sdb3 vga=792 earlyprintk=ttyS0,57600 console=ttyS0,57600 console=tty0)
Linux version 2.6.10-mm1 (rafael@chimera) (gcc version 3.3.4 (pre 3.3.5 20040809)) #1 SMP Mon Jan 3 23:09:30 CET 2005
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
BIOS-e820: 000000003fff0000 - 000000003ffff000 (ACPI data)
BIOS-e820: 000000003ffff000 - 0000000040000000 (ACPI NVS)
BIOS-e820: 00000000ff7c0000 - 0000000100000000 (reserved)
kernel direct mapping tables upto ffff810100000000 @ 8000-c000 Scanning NUMA topology in Northbridge 24
Number of nodes 2 (10010)
Node 0 already present. Skipping
Node 1 already present. Skipping
No NUMA configuration found
Faking a node at 0000000000000000-000000003fff0000
Bootmem setup node 0 0000000000000000-000000003fff0000
No mptable found.
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:5 APIC version 16
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
Processor #1 15:5 APIC version 16
ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
ACPI: IOAPIC (id[0x03] address[0xfc9fe000] gsi_base[24]) IOAPIC[1]: apic_id 3, version 17, address 0xfc9fe000, GSI 24-27
ACPI: IOAPIC (id[0x04] address[0xfc9ff000] gsi_base[28]) IOAPIC[2]: apic_id 4, version 17, address 0xfc9ff000, GSI 28-31
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) Setting APIC routing to flat
Using ACPI (MADT) for SMP configuration information
Checking aperture...
CPU 0: aperture @ f0000000 size 128 MB
CPU 1: aperture @ f0000000 size 128 MB

and then it goes into an infinite loop that writes some garbage to the framebuffer (yellow lines on top of the screen).

On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE startup the box hangs for a while and I get the message like "The process for the file protocol has terminated unexpectedly" and desktop icons are not displayed, and I get a "cpu overload" message from arts etc.).

Please let me know if you need more information.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#34 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

Quoted 44 lines · Rafael J. Wysocki

On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the kernel, but it does not boot. It only prints this to the serial console:

Bootdata ok (command line is root=/dev/sdb3 vga=792 earlyprintk=ttyS0,57600 console=ttyS0,57600 console=tty0)
Linux version 2.6.10-mm1 (rafael@chimera) (gcc version 3.3.4 (pre 3.3.5 20040809)) #1 SMP Mon Jan 3 23:09:30 CET 2005
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
BIOS-e820: 000000003fff0000 - 000000003ffff000 (ACPI data)
BIOS-e820: 000000003ffff000 - 0000000040000000 (ACPI NVS)
BIOS-e820: 00000000ff7c0000 - 0000000100000000 (reserved)
kernel direct mapping tables upto ffff810100000000 @ 8000-c000 Scanning NUMA topology in Northbridge 24
Number of nodes 2 (10010)
Node 0 already present. Skipping
Node 1 already present. Skipping
No NUMA configuration found
Faking a node at 0000000000000000-000000003fff0000
Bootmem setup node 0 0000000000000000-000000003fff0000
No mptable found.
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:5 APIC version 16
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
Processor #1 15:5 APIC version 16
ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
ACPI: IOAPIC (id[0x03] address[0xfc9fe000] gsi_base[24]) IOAPIC[1]: apic_id 3, version 17, address 0xfc9fe000, GSI 24-27
ACPI: IOAPIC (id[0x04] address[0xfc9ff000] gsi_base[28]) IOAPIC[2]: apic_id 4, version 17, address 0xfc9ff000, GSI 28-31
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) Setting APIC routing to flat
Using ACPI (MADT) for SMP configuration information
Checking aperture...
CPU 0: aperture @ f0000000 size 128 MB
CPU 1: aperture @ f0000000 size 128 MB

and then it goes into an infinite loop that writes some garbage to the framebuffer (yellow lines on top of the screen).

Quoted 6 lines

On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE startup the box hangs for a while and I get the message like "The process for the file protocol has terminated unexpectedly" and desktop icons are not displayed, and I get a "cpu overload" message from arts etc.).

Please let me know if you need more information.

Try wli's patch, subject "[bootfix] pass used_node_mask by reference in 2.6.10-mm1".

Jesse

#35 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

In reply to Rafael J. Wysocki
Quoted 4 lines · Rafael J. Wysocki

On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE startup the box hangs for a while and I get the message like "The process for the file protocol has terminated unexpectedly" and desktop icons are not displayed, and I get a "cpu overload" message from arts etc.).

I also tried it on an AMD64 system (3500+ on A8V Deluxe) and did not observe any anomalies, but I am using Gnome, not KDE.

I saw a message that latency tests were wanted, but I don't normally have a workload in which this can be observed. Perhaps someone could provide a suggestion? I did try some dvd-burning sessions. Subjectively speaking, there didn't seem to be any improvement over 2.6.10, and it may have been a bit worse.

#36 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

Quoted 3 lines · Thomas Molina
Quoted 1 line · Rafael J. Wysocki

On a UP AMD64 it boots, but then it does not work appropriately (eg. at

KDE

Quoted 1 line
Quoted 1 line

startup the box hangs for a while and I get the message like "The process

for

Quoted 5 lines
Quoted 2 lines

the file protocol has terminated unexpectedly" and desktop icons are not displayed, and I get a "cpu overload" message from arts etc.).

I also tried it on an AMD64 system (3500+ on A8V Deluxe) and did not observe any anomalies, but I am using Gnome, not KDE.

Now I'm not seeing anything wrong either, so it must have been accidental. I suspect that the problem was with artsd.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#37 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

In reply to Rafael J. Wysocki
Quoted 10 lines · Rafael J. Wysocki
Quoted 9 lines · Jesse Barnes
Quoted 7 lines · Christoph Hellwig
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

Quoted 6 lines
Quoted 3 lines

And apparently it's broken on NUMA. I couldn't find generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA enabled.

On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the kernel, but it does not boot. It only prints this to the serial console:

I suspect it is fixed by Bill Irwin's patch from the "[bootfix] pass used_node_mask by reference .." thread. Can you test that?

-Andi

#38 lore raw

Re: 2.6.10-mm1 [failure on AMD64]

Quoted 9 lines · Andi Kleen
Quoted 7 lines · Rafael J. Wysocki
Quoted 6 lines · Jesse Barnes
Quoted 5 lines · Christoph Hellwig
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations

scheme,

Quoted 7 lines
Quoted 7 lines
Quoted 6 lines
Quoted 2 lines

so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

And apparently it's broken on NUMA. I couldn't find generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA enabled.

Quoted 5 lines
Quoted 2 lines

On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the kernel, but it does not boot. It only prints this to the serial console:

I suspect it is fixed by Bill Irwin's patch from the "[bootfix] pass used_node_mask by reference .." thread. Can you test that?

Sure. It fixes the problem.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#39 lore raw

Re: 2.6.10-mm1

In reply to Christoph Hellwig
Quoted 7 lines · Christoph Hellwig
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

Here's the fix:

fs/afs/file.c +17 -3
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/fs/afs/file.c linux-2.6.10-mm2/fs/afs/file.c
@@ -33,8 +33,10 @@ static int afs_file_releasepage(struct p
 
 static ssize_t afs_file_write(struct file *file, const char __user *buf,
 			      size_t size, loff_t *off);
+static int afs_file_mmap(struct file * file, struct vm_area_struct * vma);
+
 #ifdef CONFIG_AFS_FSCACHE
-static int afs_file_page_mkwrite(struct page *page);
+static int afs_file_page_mkwrite(struct vm_area_struct *vma, struct page *page);
 #endif
 
 struct inode_operations afs_file_inode_operations = {
@@ -44,7 +46,7 @@ struct inode_operations afs_file_inode_o
 struct file_operations afs_file_file_operations = {
 	.read		= generic_file_read,
 	.write		= afs_file_write,
-	.mmap		= generic_file_mmap,
+	.mmap		= afs_file_mmap,
 #if 0
 	.open		= afs_file_open,
 	.release	= afs_file_release,
@@ -58,6 +60,11 @@ struct address_space_operations afs_fs_a
 	.set_page_dirty	= __set_page_dirty_nobuffers,
 	.releasepage	= afs_file_releasepage,
 	.invalidatepage	= afs_file_invalidatepage,
+};
+
+struct vm_operations_struct afs_fs_vm_operations = {
+	.nopage		= filemap_nopage,
+	.populate	= filemap_populate,
 #ifdef CONFIG_AFS_FSCACHE
 	.page_mkwrite	= afs_file_page_mkwrite,
 #endif
@@ -79,6 +86,13 @@ static ssize_t afs_file_write(struct fil
 	return -EIO;
 } /* end afs_file_write() */
 
+static int afs_file_mmap(struct file * file, struct vm_area_struct * vma)
+{
+	file_accessed(file);
+	vma->vm_ops = &afs_fs_vm_operations;
+	return 0;
+}
+
 /*****************************************************************************/
 /*
  * deal with notification that a page was read from the cache
@@ -321,7 +335,7 @@ static int afs_file_releasepage(struct p
  * wait for the disc cache to finish writing before permitting
  */
 #ifdef CONFIG_AFS_FSCACHE
-static int afs_file_page_mkwrite(struct page *page)
+static int afs_file_page_mkwrite(struct vm_area_struct *vma, struct page *page)
 {
 	wait_on_page_fs_misc(page);
 	return 0;
include/linux/fs.h +0 -3
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/include/linux/fs.h linux-2.6.10-mm2/include/linux/fs.h
@@ -330,9 +330,6 @@ struct address_space_operations {
 	int (*releasepage) (struct page *, int);
 	ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
 			loff_t offset, unsigned long nr_segs);
-
-	/* notification that a page is about to become writable */
-	int (*page_mkwrite)(struct page *page);
 };
 
 struct backing_dev_info;
include/linux/mm.h +4 -1
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/include/linux/mm.h linux-2.6.10-mm2/include/linux/mm.h
@@ -762,7 +762,10 @@ extern void truncate_inode_pages_range(s
 				       loff_t lstart, loff_t lend);
 
 /* generic vm_area_ops exported for stackable file systems */
-struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
+extern struct page *filemap_nopage(struct vm_area_struct *,
+		unsigned long, int *);
+extern int filemap_populate(struct vm_area_struct *, unsigned long,
+		unsigned long, pgprot_t, unsigned long, int);
 
 /* mm/page-writeback.c */
 int write_one_page(struct page *page, int wait);
mm/filemap.c +3 -19
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/mm/filemap.c linux-2.6.10-mm2/mm/filemap.c
@@ -1477,7 +1477,7 @@ err:
 	return NULL;
 }
 
-static int filemap_populate(struct vm_area_struct *vma,
+int filemap_populate(struct vm_area_struct *vma,
 			unsigned long addr,
 			unsigned long len,
 			pgprot_t prot,
@@ -1524,26 +1524,13 @@ repeat:
 
 	return 0;
 }
-
-/*
- * pass notification that a page is becoming writable up to the filesystem
- */
-static int filemap_page_mkwrite(struct vm_area_struct *vma, struct page *page)
-{
-	return page->mapping->a_ops->page_mkwrite(page);
-}
+EXPORT_SYMBOL(filemap_populate);
 
 struct vm_operations_struct generic_file_vm_ops = {
 	.nopage		= filemap_nopage,
 	.populate	= filemap_populate,
 };
 
-struct vm_operations_struct generic_file_vm_mkwr_ops = {
-	.nopage		= filemap_nopage,
-	.populate	= filemap_populate,
-	.page_mkwrite	= filemap_page_mkwrite,
-};
-
 /* This is used for a general mmap of a disk file */
 
 int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
@@ -1553,10 +1540,7 @@ int generic_file_mmap(struct file * file
 	if (!mapping->a_ops->readpage)
 		return -ENOEXEC;
 	file_accessed(file);
-	if (!mapping->a_ops->page_mkwrite)
-		vma->vm_ops = &generic_file_vm_ops;
-	else
-		vma->vm_ops = &generic_file_vm_mkwr_ops;
+	vma->vm_ops = &generic_file_vm_ops;
 	return 0;
 }
 
maintainer
#40 lore raw

Re: 2.6.10-mm1

Quoted 9 lines · Christoph Hellwig
Quoted 7 lines
Quoted 2 lines

add-page-becoming-writable-notification.patch
Add page becoming writable notification

David, this still has the bogus address_space operation in addition to the vm_operation. page_mkwrite only fits into the vm_operations scheme, so please remove the address_space op. Also the code will be smaller and faster witout that indirection..

Here's the fix:

That's not right either. Filesystems really shouldn't be overloading the vm_ops on memory mappings (as has been made clear to me) and the VM low-level paging routines shouldn't be touching a_ops (as has also been made clear to me). I also have other reasons I don't want to have ordinary files with specialised vm_ops.

I suppose I could try and build a little knowledge about fscache into the VM... that might be reasonable.

Remember also that your change is going to affect NFS too eventually, assuming NFS caching support ends up being done this way. It may also affect other filesystems, such as SMB/CIFS and Coda eventually should they partake of fscache services too.

David

#41 lore raw

Re: 2.6.10-mm1

Quoted 2 lines · David Howells

That's not right either. Filesystems really shouldn't be overloading the vm_ops on memory mappings (as has been made clear to me)

yes, they should. And various filesystems do.

#42 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton

Review

Quoted 5 lines
(quoted diff) +1 -2
-ioctl-cleanup.patch
-unlocked_ioctl.patch
+ioctl-rework.patch
 
 New version of the dont-hold-BKL-across-ioctl patch.

For the native case the new naming is stupid. The old ioctl_unlocked made perfect sense while ioctl_native doesn't - after all ->ioctl is native aswell. Also this still has the useless inode * paramater in the method signature.

#43 lore raw

Re: 2.6.10-mm1

Quoted 10 lines · Christoph Hellwig

Review

Quoted 5 lines
(quoted diff) +1 -2
-ioctl-cleanup.patch
-unlocked_ioctl.patch
+ioctl-rework.patch
 
 New version of the dont-hold-BKL-across-ioctl patch.

For the native case the new naming is stupid. The old ioctl_unlocked made perfect sense while ioctl_native doesn't - after all ->ioctl is native aswell. Also this still has the useless inode * paramater in the method signature.

Here's a better and much simpler patch:

- add ->unlocked_ioctl method and a do_ioctl wrapper in ioctl.c so all places calling ->ioctl get it.
- add ->compat_ioctl method and call it in compat_sys_ioctl before doing the hash lookup for registered handlers.
- streamline compat_sys_ioctl and move the complex error reporting into a function of it's own

Documentation/filesystems/Locking +7 -0
@@ -350,6 +350,8 @@
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int,
 			unsigned long);
+	long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
@@ -383,6 +385,8 @@
 readdir: 		no
 poll:			no
 ioctl:			yes	(see below)
+unlocked_ioctl:		no	(see below)
+compat_ioctl:		no
 mmap:			no
 open:			maybe	(see below)
 flush:			no
@@ -427,6 +431,9 @@
 ->ioctl() or kill the latter completely. One of the problems is that for
 anything that resembles union-mount we won't have a struct file for all
 components. And there are other reasons why the current interface is a mess...
+
+->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
+doesn't take the BKL.
 
 ->read on directories probably must go away - we should just enforce -EISDIR
 in sys_read() and friends.
fs/compat.c +65 -55

142 lines not on this page · raw message

fs/ioctl.c +39 -17

103 lines not on this page · raw message

include/linux/fs.h +4 -2
@@ -902,8 +902,8 @@
 
 /*
  * NOTE:
- * read, write, poll, fsync, readv, writev can be called
- *   without the big kernel lock held in all filesystems.
+ * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl
+ * can be called without the big kernel lock held in all filesystems.
  */
 struct file_operations {
 	struct module *owner;
@@ -915,6 +915,8 @@
 	int (*readdir) (struct file *, void *, filldir_t);
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+	long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
#44 lore raw

Re: 2.6.10-mm1

In reply to Christoph Hellwig

Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: 2.6.10-mm1":

Quoted 10 lines

Review

Quoted 5 lines
(quoted diff) +1 -2
-ioctl-cleanup.patch
-unlocked_ioctl.patch
+ioctl-rework.patch
 
 New version of the dont-hold-BKL-across-ioctl patch.

For the native case the new naming is stupid. The old ioctl_unlocked made perfect sense while ioctl_native doesn't - after all ->ioctl is native aswell. Also this still has the useless inode * paramater in the method signature.

Regarding the inode* parameter, the change to remove it would be trivial, though I personally dont care and I didnt see anyone else comment on that. Anyone?

MST

#45 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton
Quoted 1 line

reiser4-export-inode_lock.patch

Han,s how'as the work progressing on removing these and other fishy core changes?

Quoted 1 line

reiser4-unstatic-kswapd.patch

Andrew, could you please finally drop this one? It's not needed for reiser4 operation at all just for some of their stranger debugging features.

Quoted 2 lines

reiser4-include-reiser4.patch

What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is the logical place for it and makes dropping in a new version of the fs easier.

Quoted 1 line

reiser4-only.patch

Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.

#46 lore raw

Re: 2.6.10-mm1

Quoted 8 lines · Christoph Hellwig
Quoted 3 lines

reiser4-export-inode_lock.patch

Han,s how'as the work progressing on removing these and other fishy core changes?

Vladimir is writing code to reduce the number of patches needed. This code is causing bugs that have not yet been fixed. His email is not working today, hopefully it will work tomorrow. This is the russian holiday season....

Quoted 11 lines
Quoted 5 lines

reiser4-unstatic-kswapd.patch

Andrew, could you please finally drop this one? It's not needed for reiser4 operation at all just for some of their stranger debugging features.

I'll let vs comment.

Quoted 12 lines
Quoted 6 lines

reiser4-include-reiser4.patch

What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is the logical place for it and makes dropping in a new version of the fs easier.

Ok.

Quoted 9 lines
Quoted 5 lines

reiser4-only.patch

Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.

Ok.

Quoted 9 lines

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

What are the other ones you object to?

#47 lore raw

Re: 2.6.10-mm1

Hello

Quoted 9 lines · Hans Reiser
Quoted 7 lines · Christoph Hellwig
Quoted 3 lines

reiser4-export-inode_lock.patch

Han,s how'as the work progressing on removing these and other fishy core changes?

The work is in progress. Here is list of patches.

reiser4-sb_sync_inodes.patch reiser4-allow-drop_inode-implementation.patch - will either try to do what Christoph suggested or find something else reiser4-truncate_inode_pages_range.patch reiser4-export-remove_from_page_cache.patch reiser4-export-page_cache_readahead.patch reiser4-reget-page-mapping.patch
reiser4-rcu-barrier.patch
reiser4-export-inode_lock.patch - trying to change to go
without this
reiser4-export-pagevec-funcs.patch reiser4-export-radix_tree_preload.patch reiser4-export-find_get_pages.patch
reiser4-radix-tree-tag.patch - not needed anymore
reiser4-radix_tree_lookup_slot.patch reiser4-perthread-pages.patch
reiser4-unstatic-kswapd.patch - not needed anymore
reiser4-include-reiser4.patch
reiser4-doc.patch

Christoph, what else do you especially object against?

Quoted 60 lines
Quoted 1 line

Vladimir is writing code to reduce the number of patches needed. This code is causing bugs that have not yet been fixed. His email is not working today, hopefully it will work tomorrow. This is the russian holiday season....

Quoted 11 lines
Quoted 5 lines

reiser4-unstatic-kswapd.patch

Andrew, could you please finally drop this one? It's not needed for reiser4 operation at all just for some of their stranger debugging features.

I'll let vs comment.

Quoted 12 lines
Quoted 6 lines

reiser4-include-reiser4.patch

What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is the logical place for it and makes dropping in a new version of the fs easier.

Ok.

Quoted 9 lines
Quoted 5 lines

reiser4-only.patch

Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.

Ok.

Quoted 9 lines

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

What are the other ones you object to?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

#48 lore raw

Re: 2.6.10-mm1

Quoted 3 lines · Vladimir Saveliev

The work is in progress. Here is list of patches.

reiser4-perthread-pages.patch

this one I don't particularly object, but I'm not sure it's really the right thing to do. Can you post it with a detailed description to linux-mm so we can kick off discussion?

The other thing I'm totally oposed to was the per-sb kobject patch, but I can't find that in current -mm anymore.

#49 lore raw

RFC 1/1 per thread page reservation patch

Hello

Quoted 7 lines · Christoph Hellwig
Quoted 2 lines

reiser4-perthread-pages.patch

this one I don't particularly object, but I'm not sure it's really the right thing to do. Can you post it with a detailed description to linux-mm so we can kick off discussion?

This patch adds an API to reserve some number of pages for exclusive use of calling thread. This is necessary to support operations that cannot tolerate memory allocation failures in the middle (reiser4 uses this API to not have to undo complex uncompleted (due to ENOMEM) filesystem tree modifications).

Implementation is simple: reserved pages are stored in a list hanging off calling task_struct. Caller is to manually release unused pages.

This API is supposed to be used for small reservation (no more than few dozens of pages).

Looking forward for advices on how to do that better/properly Thanks

This patch adds an API to reserve some number of pages for exclusive use of calling thread. This is necessary to support operations that cannot tolerate memory allocation failures in the middle. Implementation is very simplistic and would only work efficiently for small reservations (no more than few dozens of pages).

Reserved pages are stored in a list hanging off calling task_struct. This list is only accessed by the current thread, hence, no locking is required. Note that this makes use of reservation from interrupt handlers impossible without some external synchronization. Caller is responsible for manually releasing unused pages by calling perthread_pages_release(int nrpages) with proper argument.

---

diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h

 include/linux/gfp.h       |    4 +
 include/linux/init_task.h |    4 -
 include/linux/sched.h     |    3 +
 kernel/fork.c             |    4 +
 mm/page_alloc.c           |   97 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 110 insertions(+), 2 deletions(-)
include/linux/gfp.h renamed from include/linux/gfp.h~reiser4-perthread-pages +4 -0
diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h
@@ -134,4 +134,8 @@ extern void FASTCALL(free_cold_page(stru
 
 void page_alloc_init(void);
 
+int  perthread_pages_reserve(int nrpages, int gfp);
+void perthread_pages_release(int nrpages);
+int  perthread_pages_count(void);
+
 #endif /* __LINUX_GFP_H */
include/linux/init_task.h renamed from include/linux/init_task.h~reiser4-perthread-pages +2 -2
diff -puN include/linux/init_task.h~reiser4-perthread-pages include/linux/init_task.h
@@ -112,8 +112,8 @@ extern struct group_info init_groups;
 	.proc_lock	= SPIN_LOCK_UNLOCKED,				\
 	.switch_lock	= SPIN_LOCK_UNLOCKED,				\
 	.journal_info	= NULL,						\
+	.private_pages	= LIST_HEAD_INIT(tsk.private_pages),		\
+	.private_pages_count = 0,					\
 }
 
-
-
 #endif
include/linux/sched.h renamed from include/linux/sched.h~reiser4-perthread-pages +3 -0
diff -puN include/linux/sched.h~reiser4-perthread-pages include/linux/sched.h
@@ -691,6 +691,9 @@ struct task_struct {
 	nodemask_t mems_allowed;
 	int cpuset_mems_generation;
 #endif
+
+	struct list_head private_pages;	/* per-process private pages */
+	int private_pages_count;
 };
 
 static inline pid_t process_group(struct task_struct *tsk)
kernel/fork.c renamed from kernel/fork.c~reiser4-perthread-pages +4 -0
diff -puN kernel/fork.c~reiser4-perthread-pages kernel/fork.c
@@ -154,6 +154,10 @@ static struct task_struct *dup_task_stru
 	tsk->thread_info = ti;
 	ti->task = tsk;
 
+	/* initialize list of pages privately reserved by process */
+	INIT_LIST_HEAD(&tsk->private_pages);
+	tsk->private_pages_count = 0;
+
 	/* One for us, one for whoever does the "release_task()" (usually parent) */
 	atomic_set(&tsk->usage,2);
 	return tsk;
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +97 -0

109 lines not on this page · raw message

_

#50 lore raw

Re: [RFC] per thread page reservation patch

Quoted 11 lines · Vladimir Saveliev

+int perthread_pages_reserve(int nrpages, int gfp)
+{
+ int i;
+ struct list_head accumulator;
+ struct list_head *per_thread;
+
+ per_thread = get_per_thread_pages();
+ INIT_LIST_HEAD(&accumulator);
+ list_splice_init(per_thread, &accumulator);
+ for (i = 0; i < nrpages; ++i) {

This will end up reserving more pages than were asked for, if current->private_pages_count is non-zero. Deliberate? --
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#51 lore raw

Re: [RFC] per thread page reservation patch

Quoted 13 lines · Andrew Morton
Quoted 11 lines · Vladimir Saveliev

+int perthread_pages_reserve(int nrpages, int gfp)
+{
+ int i;
+ struct list_head accumulator;
+ struct list_head *per_thread;
+
+ per_thread = get_per_thread_pages();
+ INIT_LIST_HEAD(&accumulator);
+ list_splice_init(per_thread, &accumulator);
+ for (i = 0; i < nrpages; ++i) {

Quoted 2 lines

This will end up reserving more pages than were asked for, if current->private_pages_count is non-zero. Deliberate?

Yes. This is to make modular usage possible, so that

        perthread_pages_reserve(nrpages, gfp_mask);

        /* call some other code... */

        perthread_pages_release(unused_pages);

works correctly if "some other code" does per-thread reservations too.

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#52 lore raw

Re: [RFC] per thread page reservation patch

In reply to Vladimir Saveliev
Quoted 57 lines

diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h

include/linux/gfp.h renamed from include/linux/gfp.h~reiser4-perthread-pages +4 -0
@@ -134,4 +134,8 @@ extern void FASTCALL(free_cold_page(stru
 
 void page_alloc_init(void);
 
+int  perthread_pages_reserve(int nrpages, int gfp);
+void perthread_pages_release(int nrpages);
+int  perthread_pages_count(void);
+
 #endif /* __LINUX_GFP_H */

diff -puN include/linux/init_task.h~reiser4-perthread-pages include/linux/init_task.h

include/linux/init_task.h renamed from include/linux/init_task.h~reiser4-perthread-pages +2 -2
@@ -112,8 +112,8 @@ extern struct group_info init_groups;
 	.proc_lock	= SPIN_LOCK_UNLOCKED,				\
 	.switch_lock	= SPIN_LOCK_UNLOCKED,				\
 	.journal_info	= NULL,						\
+	.private_pages	= LIST_HEAD_INIT(tsk.private_pages),		\
+	.private_pages_count = 0,					\
 }
 
-
-
 #endif

diff -puN include/linux/sched.h~reiser4-perthread-pages include/linux/sched.h

include/linux/sched.h renamed from include/linux/sched.h~reiser4-perthread-pages +3 -0
@@ -691,6 +691,9 @@ struct task_struct {
 	nodemask_t mems_allowed;
 	int cpuset_mems_generation;
 #endif
+
+	struct list_head private_pages;	/* per-process private pages */
+	int private_pages_count;
 };
 
 static inline pid_t process_group(struct task_struct *tsk)

diff -puN kernel/fork.c~reiser4-perthread-pages kernel/fork.c

kernel/fork.c renamed from kernel/fork.c~reiser4-perthread-pages +4 -0
@@ -154,6 +154,10 @@ static struct task_struct *dup_task_stru
 	tsk->thread_info = ti;
 	ti->task = tsk;
 
+	/* initialize list of pages privately reserved by process */
+	INIT_LIST_HEAD(&tsk->private_pages);
+	tsk->private_pages_count = 0;
+
 	/* One for us, one for whoever does the "release_task()" (usually parent) */
 	atomic_set(&tsk->usage,2);
 	return tsk;

diff -puN mm/page_alloc.c~reiser4-perthread-pages mm/page_alloc.c

mm/page_alloc.c void fastcall free_cold_page(struct page · line 557

Quoted 7 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +4 -0
@@ -551,6 +551,97 @@ void fastcall free_cold_page(struct page
 	free_hot_cold_page(page, 1);
 }
 
+static inline struct list_head *get_per_thread_pages(void)
+{
+	return &current->private_pages;
+}

this is a completely useless wrapper that doesn't buy anything.

mm/page_alloc.c void fastcall free_cold_page(struct page · line 567

Quoted 9 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +9 -0
+int perthread_pages_reserve(int nrpages, int gfp)
+{
+	int i;
+	struct list_head  accumulator;
+	struct list_head *per_thread;
+
+	per_thread = get_per_thread_pages();
+	INIT_LIST_HEAD(&accumulator);
+	list_splice_init(per_thread, &accumulator);

Can probably be written much simpler as:

int perthread_pages_reserve(int nrpages, int gfp)

{
	LIST_HEAD(accumulator);
	int i;

	list_splice_init(&current->private_pages, &accumulator);

Now the big question is, what's synchronizing access to current->private_pages?

Quoted 5 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +5 -0
+	for (i = 0; i < nrpages; ++i) {
+		struct page *page;
+
+		page = alloc_page(gfp);
+		if (page != NULL)

mm/page_alloc.c void fastcall free_cold_page(struct page · line 582

Quoted 10 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +10 -0
+			list_add(&page->lru, &accumulator);
+		else {
+			for (; i > 0; --i) {
+				page = list_entry(accumulator.next, struct page, lru);
+				list_del(&page->lru);
+				page_cache_release(page);
+			}
+			return -ENOMEM;
+		}
+	}

Would be much more readable with the error condition handling at the end of the function and a goto.

mm/page_alloc.c void fastcall free_cold_page(struct page · line 618

Quoted 5 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +5 -0
+int perthread_pages_count(void)
+{
+	return current->private_pages_count;
+}
+EXPORT_SYMBOL(perthread_pages_count);

Again a completely useless wrapper.

Quoted 14 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +14 -0
+static inline struct page *
+perthread_pages_alloc(void)
+{
+	struct list_head *perthread_pages;
+
+	/*
+	 * try to allocate pages from the per-thread private_pages pool. No
+	 * locking is needed: this list can only be modified by the thread
+	 * itself, and not by interrupts or other threads.
+	 */
+	perthread_pages = get_per_thread_pages();
+	if (!in_interrupt() && !list_empty(perthread_pages)) {
+		struct page *page;
+

mm/page_alloc.c void fastcall free_cold_page(struct page · line 643

Quoted 10 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +10 -0
+		page = list_entry(perthread_pages->next, struct page, lru);
+		list_del(&page->lru);
+		current->private_pages_count--;
+		/*
+		 * per-thread page is already initialized, just return it.
+		 */
+		return page;
+	} else
+		return NULL;
+}

Would be written much cleaner with a single return statement and the comment above the function, ala:

/*
* try to allocate pages from the per-thread private_pages pool. No
* locking is needed: this list can only be modified by the thread
* itself, and not by interrupts or other threads.
*/
static inline struct page *perthread_pages_alloc(void)

{
	struct list_head *perthread_pages = &current->private_pages;
	struct page *page = NULL;

	if (!in_interrupt() && !list_empty(perthread_pages)) {
		page = list_entry(perthread_pages->next, struct page, lru);
		list_del(&page->lru);
		current->private_pages_count--;
	}

	return page;
}

mm/page_alloc.c __alloc_pages(unsigned int gfp_mask, uns · line 766

Quoted 6 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +6 -0
+	if (order == 0) {
+		page = perthread_pages_alloc();
+		if (page != NULL)
+			return page;
+	}
+

You should at least move the !in_interrupt() condition out here.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#54 lore raw

Re: [RFC] per thread page reservation patch

In reply to Christoph Hellwig
Quoted 9 lines · Christoph Hellwig

int perthread_pages_reserve(int nrpages, int gfp)

{
	LIST_HEAD(accumulator);
	int i;

	list_splice_init(&current->private_pages, &accumulator);

Now the big question is, what's synchronizing access to current->private_pages?

Safe without locks so long as there is no other way to get at another process's private_pages. ;)

Best,

Robert Love

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#55 lore raw

Re: [RFC] per thread page reservation patch

In reply to Christoph Hellwig
Quoted 2 lines · Christoph Hellwig
Quoted 2 lines

diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h
--- linux-2.6.10-rc3/include/linux/gfp.h~reiser4-perthread-pages 2004-12-22 20:09:44.153164276 +0300

[...]

Quoted 8 lines

mm/page_alloc.c void fastcall free_cold_page(struct page · line 618

Quoted 6 lines
mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +5 -0
+int perthread_pages_count(void)
+{
+	return current->private_pages_count;
+}
+EXPORT_SYMBOL(perthread_pages_count);

Again a completely useless wrapper.

I disagree. Patch introduces explicit API

int perthread_pages_reserve(int nrpages, int gfp); void perthread_pages_release(int nrpages); int perthread_pages_count(void);

sufficient to create and use per-thread reservations. Using current->private_pages_count directly

- makes API less uniform, not contained within single namespace (perthread_pages_*), and worse,

- exhibits internal implementation detail to the user.

Quoted 1 line

[...]

Nikita.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#56 lore raw

Re: [RFC] per thread page reservation patch

Quoted 7 lines · Nikita Danilov

sufficient to create and use per-thread reservations. Using current->private_pages_count directly

- makes API less uniform, not contained within single namespace (perthread_pages_*), and worse,

- exhibits internal implementation detail to the user.

Completely disagreed, hiding all the details doesn't help for such trivial access, it's just obsfucating things.

But looking at it the API doesn't make sense at all. Number of pages in the thread-pool is an internal implementation detail and no caller must look at it - think about two callers, e.g. filesystem and iscsi initiator using it in the same thread.

Here's an updated patch with my suggestions implemented and other goodies such a kerneldoc comments (but completely untested so far):

include/linux/gfp.h +3 -0
@@ -130,6 +130,9 @@
 #define __free_page(page) __free_pages((page), 0)
 #define free_page(addr) free_pages((addr),0)
 
+extern int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask);
+extern void perthread_pages_release(unsigned int nrpages);
+
 void page_alloc_init(void);
 
 #endif /* __LINUX_GFP_H */
include/linux/init_task.h +1 -0
@@ -112,6 +112,7 @@
 	.proc_lock	= SPIN_LOCK_UNLOCKED,				\
 	.switch_lock	= SPIN_LOCK_UNLOCKED,				\
 	.journal_info	= NULL,						\
+	.private_pages  = LIST_HEAD_INIT(tsk.private_pages),		\
 }
 
 
include/linux/sched.h +1 -0
@@ -658,6 +658,7 @@
 
 /* VM state */
 	struct reclaim_state *reclaim_state;
+	struct list_head private_pages; /* per-process private pages */
 
 	struct dentry *proc_dentry;
 	struct backing_dev_info *backing_dev_info;
kernel/fork.c +3 -0
@@ -153,6 +153,9 @@
 	tsk->thread_info = ti;
 	ti->task = tsk;
 
+	/* initialize list of pages privately reserved by process */
+	INIT_LIST_HEAD(&tsk->private_pages);
+
 	/* One for us, one for whoever does the "release_task()" (usually parent) */
 	atomic_set(&tsk->usage,2);
 	return tsk;
mm/page_alloc.c +86 -0

98 lines not on this page · raw message

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#57 lore raw

Re: [RFC] per thread page reservation patch

Quoted 24 lines · Christoph Hellwig
Quoted 7 lines · Nikita Danilov

sufficient to create and use per-thread reservations. Using current->private_pages_count directly

- makes API less uniform, not contained within single namespace (perthread_pages_*), and worse,

- exhibits internal implementation detail to the user.

Completely disagreed, hiding all the details doesn't help for such trivial access, it's just obsfucating things.

But looking at it the API doesn't make sense at all. Number of pages in the thread-pool is an internal implementation detail and no caller must look at it - think about two callers, e.g. filesystem and iscsi initiator using it in the same thread.

Here's an updated patch with my suggestions implemented and other goodies such a kerneldoc comments (but completely untested so far):

include/linux/gfp.h line 134

Quoted 5 lines
include/linux/gfp.h +2 -0
@@ -130,6 +130,9 @@
 #define __free_page(page) __free_pages((page), 0)
 #define free_page(addr) free_pages((addr),0)
 
+extern int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask);
+extern void perthread_pages_release(unsigned int nrpages);

I don't see how this can work.

        /* make conservative estimation... */
        perthread_pages_reserve(100, GFP_KERNEL);

        /* actually, use only 10 pages during atomic operation */

        /* want to release remaining 90 pages... */
        perthread_pages_release(???);

Can you elaborate how to calculate number of pages that has to be released?

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#58 lore raw

Re: [RFC] per thread page reservation patch

Quoted 10 lines · Nikita Danilov

I don't see how this can work.

        /* make conservative estimation... */
        perthread_pages_reserve(100, GFP_KERNEL);

        /* actually, use only 10 pages during atomic operation */

        /* want to release remaining 90 pages... */
        perthread_pages_release(???);
Quoted 2 lines

Can you elaborate how to calculate number of pages that has to be released?

That's a good question actually, and it's true for the original version aswell if we want (and to make the API useful we must) make it useable for multiple callers in the same thread.

Assuming the callers strictly nest we can indeed just go back to the orininal count, maybe with an API like:

int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask); void perthread_pages_release(unsigned int nrpages_goal);

	unsigned int old_nr_pages;

	...

	old_nr_pages = perthread_pages_reserve(100, GFP_KERNEL);

	...

	perthread_pages_release(old_nr_pages);

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#59 lore raw

Re: [RFC] per thread page reservation patch

In reply to Vladimir Saveliev

mm/page_alloc.c __alloc_pages(unsigned int gfp_mask, uns · line 765

Quoted 6 lines · Vladimir Saveliev

[...]

mm/page_alloc.c renamed from mm/page_alloc.c~reiser4-perthread-pages +5 -0
+	if (order == 0) {
+		page = perthread_pages_alloc();
+		if (page != NULL)
+			return page;
+	}

I hope this has not been extensively discussed yet, and I missed the thread but, does everybody think this is a good thing?

This seems like a very asymmetrical behavior. If the code explicitly reserves pages, it should explicitly use them, or it will become impossible to track down who is using what (not to mention that this will slow down every regular user of __alloc_pages, even if it is just for a quick test).

Why are there specialized functions to reserve the pages, but then they are used through the standard __alloc_pages interface?

At the very least this test should be moved to the very beginning of the function. It is of no use to calculate "can_try_harder" before running this code if it will use a reserved page.

Having a specialized function to get the reserved pages, would also make the logic in "perthread_pages_reserve" more clear (i.e., that comment would become unnecessary), and lose the test to "in_interrupt()" in "perthread_pages_alloc", if I'm reading this correctly.

Signature · 9 lines
Paulo Marques - www.grupopie.com

"A journey of a thousand miles begins with a single step."
Lao-tzu, The Way of Lao-tzu
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#60 lore raw

Re: [RFC] per thread page reservation patch

Quoted 8 lines · Paulo Marques

This seems like a very asymmetrical behavior. If the code explicitly reserves pages, it should explicitly use them, or it will become impossible to track down who is using what (not to mention that this will slow down every regular user of __alloc_pages, even if it is just for a quick test).

Why are there specialized functions to reserve the pages, but then they are used through the standard __alloc_pages interface?

That seems to be the whole point of the patch, as that way it'll serve all sub-allocators or kernel function called by the user. Without this behaviour the caller could have simply used a mempool.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

author
#61 lore raw

Re: [RFC] per thread page reservation patch

Quoted 7 lines · Christoph Hellwig
Quoted 6 lines · Paulo Marques

This seems like a very asymmetrical behavior. If the code explicitly reserves pages, it should explicitly use them, or it will become impossible to track down who is using what (not to mention that this will slow down every regular user of __alloc_pages, even if it is just for a quick test).

Quoted 6 lines
Quoted 2 lines

Why are there specialized functions to reserve the pages, but then they are used through the standard __alloc_pages interface?

That seems to be the whole point of the patch, as that way it'll serve all sub-allocators or kernel function called by the user. Without this behaviour the caller could have simply used a mempool.

I still don't get it why reiserfs can't put the preallocated pool somewhere private like all other users who do similar things do too (and yes there are quite a lot of subsystems who do preallocation)

Why pollute task_struct for this?

-Andi
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#62 lore raw

Re: [RFC] per thread page reservation patch

In reply to Paulo Marques

Paulo Marques <[email protected]> writes:

[...]

Quoted 9 lines

This seems like a very asymmetrical behavior. If the code explicitly reserves pages, it should explicitly use them, or it will become impossible to track down who is using what (not to mention that this will slow down every regular user of __alloc_pages, even if it is just for a quick test).

Why are there specialized functions to reserve the pages, but then they are used through the standard __alloc_pages interface?

That's the whole idea behind this patch: at the beginning of "atomic" operation, some number of pages is reserved. As these pages are available through page allocator, _all_ allocations done by atomic operation will use reserved pages transparently. For example:

        perthread_pages_reserve(nr, GFP_KERNEL);

        foo()->

            bar()->

                page = find_or_create_page(some_mapping, ...);

        perthread_pages_release(unused_pages);

find_or_create() pages will use pages reserved for this thread and, hence, is guaranteed to succeed (given correct reservation).

Alternative is to pass some sort of handle all the way down to actual calls to allocator, and to modify all generic code to use reservations.

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#63 lore raw

Re: [RFC] per thread page reservation patch

Quoted 16 lines · Nikita Danilov

That's the whole idea behind this patch: at the beginning of "atomic" operation, some number of pages is reserved. As these pages are available through page allocator, _all_ allocations done by atomic operation will use reserved pages transparently. For example:

        perthread_pages_reserve(nr, GFP_KERNEL);

        foo()->

            bar()->

                page = find_or_create_page(some_mapping, ...);

        perthread_pages_release(unused_pages);
Quoted 5 lines

find_or_create() pages will use pages reserved for this thread and, hence, is guaranteed to succeed (given correct reservation).

Alternative is to pass some sort of handle all the way down to actual calls to allocator, and to modify all generic code to use reservations.

Maybe I'm being thick, but I don't see how you can protect the reservation of an outer reserver in the above way:

	perthread_pages_reserve(10);
	...				/* current->private_pages_count = 10 */
		perthread_pages_reserve(10)	/* private_pages_count = 20 */
		use 5 pages			/* private_pages_count = 15 */
		perthread_pages_release(5);

But how does the caller come up with the final "5"?

Seems better to me if prethread_pages_reserve() were to return the initial value of private_pages_count, so the caller can do:

	old = perthread_pages_reserve(10);
		use 5 pages
	perthread_pages_release(old);

or whatever.

That kinda stinks too in a way, because both the outer and the inner callers need to overallocate pages on behalf of the worst case user in some deep call stack.

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1. --
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

author
#64 lore raw

Re: [RFC] per thread page reservation patch

Quoted 4 lines

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1.

Or just preallocate into a private array.

-Andi
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#65 lore raw

Re: [RFC] per thread page reservation patch

In reply to Andrew Morton

Andrew Morton <[email protected]> writes:

[...]

Quoted 11 lines

Maybe I'm being thick, but I don't see how you can protect the reservation of an outer reserver in the above way:

	perthread_pages_reserve(10);
	...				/* current->private_pages_count = 10 */
		perthread_pages_reserve(10)	/* private_pages_count = 20 */
		use 5 pages			/* private_pages_count = 15 */
		perthread_pages_release(5);

But how does the caller come up with the final "5"?

	wasreserved = perthread_pages_count();
	result = perthread_pages_reserve(estimate_reserve(), GFP_KERNEL);
	if (result != 0)
		return result;

    /* do something that consumes reservation */

	perthread_pages_release(perthread_pages_count() - wasreserved);
Quoted 10 lines

Seems better to me if prethread_pages_reserve() were to return the initial value of private_pages_count, so the caller can do:

	old = perthread_pages_reserve(10);
		use 5 pages
	perthread_pages_release(old);

or whatever.

Quoted 8 lines

That kinda stinks too in a way, because both the outer and the inner callers need to overallocate pages on behalf of the worst case user in some deep call stack.

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1.

Reiser4 doesn't use this for ->writepage(), by the way. This is used by tree balancing code to assure that balancing cannot get -ENOMEM in the middle of tree modification, because undo is _so_ very complicated.

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#66 lore raw

Re: [RFC] per thread page reservation patch

Quoted 9 lines · Nikita Danilov
Quoted 5 lines

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1.

Reiser4 doesn't use this for ->writepage(), by the way. This is used by tree balancing code to assure that balancing cannot get -ENOMEM in the middle of tree modification, because undo is _so_ very complicated.

Oh. And that involves performing I/O, yes?

Why does the filesystem risk going oom during the rebalance anyway? Is it doing atomic allocations?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#67 lore raw

Re: [RFC] per thread page reservation patch

Quoted 7 lines · Andrew Morton
Quoted 6 lines · Nikita Danilov
Quoted 5 lines

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1.

Quoted 5 lines
Quoted 3 lines

Reiser4 doesn't use this for ->writepage(), by the way. This is used by tree balancing code to assure that balancing cannot get -ENOMEM in the middle of tree modification, because undo is _so_ very complicated.

Oh. And that involves performing I/O, yes?

Yes, balancing may read tree or bitmap nodes from the disk.

Quoted 3 lines

Why does the filesystem risk going oom during the rebalance anyway? Is it doing atomic allocations?

No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this happens, the only thing balancing can do is to panic.

Nikita.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#68 lore raw

Re: [RFC] per thread page reservation patch

Quoted 7 lines · Nikita Danilov
Quoted 4 lines

Why does the filesystem risk going oom during the rebalance anyway? Is it doing atomic allocations?

No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this happens, the only thing balancing can do is to panic.

__alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed or never return ;) That behaviour may change at any time of course, but it does make me wonder why we're bothering with this at all. Maybe it's because of the possibility of a GFP_IO failure under your feet or something?

What happens if reiser4 simply doesn't use this code?

If we introduce this mechanism, people will end up using it all over the place. Probably we could remove radix_tree_preload(), which is the only similar code I can I can immediately think of.

Page reservation is not a bad thing per-se, but it does need serious thought.

How does reiser4 end up deciding how many pages to reserve? Gross overkill?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#69 lore raw

Re: [RFC] per thread page reservation patch

Quoted 11 lines · Andrew Morton
Quoted 7 lines · Nikita Danilov
Quoted 4 lines

Why does the filesystem risk going oom during the rebalance anyway? Is it doing atomic allocations?

No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this happens, the only thing balancing can do is to panic.

__alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed or never return ;) That behaviour may change at any time of course, but it

Hmm... it used to, when I wrote that code.

Quoted 3 lines

does make me wonder why we're bothering with this at all. Maybe it's because of the possibility of a GFP_IO failure under your feet or something?

This is what happens:

- we start inserting new item into balanced tree,

- lock nodes on the leaf level and modify them

- go to the parent level

- lock nodes on the parent level and modify them. This may require allocating new nodes. If allocation fails---we have to panic, because tree is in inconsistent state and there is no roll-back; if allocation hangs forever---deadlock is on its way, because we are still keeping locks on nodes on the leaf level.

Quoted 2 lines

What happens if reiser4 simply doesn't use this code?

At the time I tested it, it panicked after getting NULL from __alloc_pages(). With current `do_retry' logic in __alloc_pages() it will deadlock, I guess.

Quoted 11 lines

If we introduce this mechanism, people will end up using it all over the place. Probably we could remove radix_tree_preload(), which is the only similar code I can I can immediately think of.

Page reservation is not a bad thing per-se, but it does need serious thought.

How does reiser4 end up deciding how many pages to reserve? Gross overkill?

Worst-case behavior of tree algorithms is well-known. Yes it's overkill.

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#70 lore raw

Re: [RFC] per thread page reservation patch

Quoted 6 lines · Nikita Danilov
Quoted 3 lines · Andrew Morton

__alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed or never return ;) That behaviour may change at any time of course, but it

Hmm... it used to, when I wrote that code.

And still does, if OOM decides to kill _your_ task: OOM sets PF_MEMDIE, and then you don't get to go the retry route at all:

	/* This allocation should allow future memory freeing. */
	if ((p->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) {
		/* go through the zonelist yet again, ignoring mins */
		for (i = 0; (z = zones[i]) != NULL; i++) {
			page = buffered_rmqueue(z, order, gfp_mask);
			if (page)
				goto got_pg;
		}
		goto nopage;
	}
....
nopage:
	....
	return NULL;

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#71 lore raw

Re: [RFC] per thread page reservation patch

In reply to Andrew Morton
Quoted 18 lines · Andrew Morton
Quoted 7 lines · Nikita Danilov
Quoted 4 lines

Why does the filesystem risk going oom during the rebalance anyway? Is it doing atomic allocations?

No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this happens, the only thing balancing can do is to panic.

__alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed or never return ;) That behaviour may change at any time of course, but it does make me wonder why we're bothering with this at all. Maybe it's because of the possibility of a GFP_IO failure under your feet or something?

What happens if reiser4 simply doesn't use this code?

Quoted 6 lines

If we introduce this mechanism, people will end up using it all over the place. Probably we could remove radix_tree_preload(), which is the only similar code I can I can immediately think of.

Page reservation is not a bad thing per-se, but it does need serious thought.

Whenever scheme comes up I dont think the current check in __alloc_pages() is any good:

        if (order == 0) {
                page = perthread_pages_alloc();
                if (page != NULL)
                        return page;
        }

Two things:

- all instances of an allocator from the current thread will eat from the perthread reserves, you probably want only a few special allocations to eat from the reserves? Thing is its not really a reservation intended for emergency situations, rather a "generic per-thread pool" the way things are now.

- its a real fast path, we're adding quite some instructions there which are only used by reiserfs now.

I think in a "final" implementation emergency allocations should be explicitly stated as such by the callers ?

Quoted 7 lines

How does reiser4 end up deciding how many pages to reserve? Gross overkill?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#72 lore raw

Re: [RFC] per thread page reservation patch

Marcelo Tosatti <[email protected]> writes:

[...]

Quoted 5 lines

- all instances of an allocator from the current thread will eat from the perthread reserves, you probably want only a few special allocations to eat from the reserves? Thing is its not really a reservation intended for emergency situations, rather a "generic per-thread pool" the way things are now.

Per-thread reservations are only useful when they are transparent. If users have to call special function, or to pass special flag to __alloc_pages() they might just use mempool as well. Idea is to reserve some number of pages before starting complex operation so that generic function (like find_get_page()) called as part of this operation are guaranteed to succeed.

Quoted 3 lines

- its a real fast path, we're adding quite some instructions there which are only used by reiserfs now.

Yes, this worries me too. Possibly we should move this check below in __alloc_pages(), so that per-thread reservation is only checked if fast-path allocation failed.

Nikita.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#73 lore raw

reiser4 core patches: [Was: [RFC] per thread page reservation patch]

In reply to Andrew Morton

Hello

[per thread page reservation discussion is snipped]

Quoted 4 lines

And the whole idea is pretty flaky really - how can one precalculate how much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to use? It really would be better if we could drop the whole patch and make reiser4 behave more sanely when its writepage is called with for_reclaim=1.

ok, we will change reiser4 to keep its pool of preallocated pages privately as Andi suggested. This will require to have reiser4_find_or_create_page which will do what find_or_create_page does plus get a page from the list of preallocated pages if alloc_page returns NULL.

So, currently, reiser4 depends on the core patches listed below. Would you please look over them and let us know which look reasonable and which are to be eliminated.

reiser4-sb_sync_inodes.patch
This patch adds new operation (sync_inodes) to struct super_operations. This operation allows a filesystem to writeout dirty pages not necessarily on per-inode basis. Default implementation of this operation is sync_sb_inodes.

reiser4-allow-drop_inode-implementation.patch
This EXPORT_SYMBOL-s inodes_stat, generic_forget_inode, destroy_inode and wake_up_inode which are needed to implement drop_inode. reiser4 implements function similar to generic_delete_inode to be able to truncate inode pages together with metadata destroying in reiser4_delete_inode whereas generic_delete_inode first truncates pages and then calls foofs_delete_inode.

reiser4-truncate_inode_pages_range.patch
This patch makes truncate_inode_pages_range from truncate_inode_pages. truncate_inode_pages_range can truncate only pages which fall into specified range. truncate_inode_pages which trucates all pages starting from specified offset is made a one liner which calls truncate_inode_pages_range.

reiser4-rcu-barrier.patch
This patch introduces a new interface - rcu_barrier() which waits until all the RCUs queued until this call have been completed. This patch is by Dipankar Sarma <[email protected]>

reiser4-reget-page-mapping.patch
This patch allows to remove page from page cache in foofs_releasepage.

reiser4-radix_tree_lookup_slot.patch
This patch extents radxi tree API with a function which returns pointer to found item within the tree.

reiser4-export-remove_from_page_cache.patch reiser4-export-page_cache_readahead.patch reiser4-export-pagevec-funcs.patch reiser4-export-radix_tree_preload.patch reiser4-export-find_get_pages.patch reiser4-export-generic_sync_sb_inodes.patch
The above patches EXPORT_SYMBOL several functions. Others may find it useful if they were exported.

reiser4-export-inode_lock.patch
Reiser4 used to manipulate with super block inode lists so it needs inode_lock exported.
We are working now to not need this. But quite many things are based on it. Is there any chance to have it included?

Thanks

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#74 lore raw

Re: reiser4 core patches: [Was: [RFC] per thread page reservation patch]

Hi Vladimir,

a general request:

If you add new EXPORT_SYMBOL's, I'd strongly prefer them being EXPORT_SYMBOL_GPL's unless there's a very good reason for an EXPORT_SYMBOL.

cu
Adrian

Signature · 10 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#75 lore raw

Re: reiser4 core patches: [Was: [RFC] per thread page reservation patch]

In reply to Vladimir Saveliev
Quoted 9 lines

So, currently, reiser4 depends on the core patches listed below. Would you please look over them and let us know which look reasonable and which are to be eliminated.

reiser4-sb_sync_inodes.patch
This patch adds new operation (sync_inodes) to struct super_operations. This operation allows a filesystem to writeout dirty pages not necessarily on per-inode basis. Default implementation of this operation is sync_sb_inodes.

ok.

Quoted 7 lines

reiser4-allow-drop_inode-implementation.patch
This EXPORT_SYMBOL-s inodes_stat, generic_forget_inode, destroy_inode and wake_up_inode which are needed to implement drop_inode. reiser4 implements function similar to generic_delete_inode to be able to truncate inode pages together with metadata destroying in reiser4_delete_inode whereas generic_delete_inode first truncates pages and then calls foofs_delete_inode.

Not okay. I though I explained you how to do it instead already?

Quoted 6 lines

reiser4-truncate_inode_pages_range.patch
This patch makes truncate_inode_pages_range from truncate_inode_pages. truncate_inode_pages_range can truncate only pages which fall into specified range. truncate_inode_pages which trucates all pages starting from specified offset is made a one liner which calls truncate_inode_pages_range.

Ok.

Quoted 4 lines

reiser4-rcu-barrier.patch
This patch introduces a new interface - rcu_barrier() which waits until all the RCUs queued until this call have been completed. This patch is by Dipankar Sarma <[email protected]>

No idea, but if Dipankar things it's okay it probably is.

Quoted 2 lines

reiser4-reget-page-mapping.patch
This patch allows to remove page from page cache in foofs_releasepage.

probably ok, Andrew?

Quoted 3 lines

reiser4-radix_tree_lookup_slot.patch
This patch extents radxi tree API with a function which returns pointer to found item within the tree.

Idea is okay, implementation needs work:

__lookup_slot should be called radix_tree_lookup_slot and exported direcly.

radix_tree_lookup should be an inlined wrapper in the header, and kill the != NULL comparims, it's superflous:

static inline void *radix_tree_lookup(struct radix_tree_root *root,
unsigned long index)

{
	void **slot = radix_tree_lookup_slot(root, index);
	return slot ? *slot : NULL;
}
Quoted 1 line

reiser4-export-remove_from_page_cache.patch

Probably okay, but why do you need both remove_from_page_cache and __remove_from_page_cache?

Quoted 1 line

reiser4-export-page_cache_readahead.patch

ok

Quoted 1 line

reiser4-export-pagevec-funcs.patch

ok

Quoted 1 line

reiser4-export-radix_tree_preload.patch

this one is nasty. not your fault though, but why do we even have global radix-tree preloads instead of pools. What do you need it for?

Quoted 1 line

reiser4-export-find_get_pages.patch

Why don't you use pagevecs instead?

Quoted 1 line

reiser4-export-generic_sync_sb_inodes.patch

Can't find this one in current -mm

Quoted 5 lines

reiser4-export-inode_lock.patch
Reiser4 used to manipulate with super block inode lists so it needs inode_lock exported.
We are working now to not need this. But quite many things are based on it. Is there any chance to have it included?

No. Modules must not look at inode_lock, it's far too much of an implementation detail.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#76 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton
Quoted 2 lines

remove-the-bkl-by-turning-it-into-a-semaphore.patch
remove the BKL by turning it into a semaphore

This _smp_processor_id() mess is horribly ugly. Do you really need that debug check?

#77 lore raw

Re: 2.6.10-mm1

Quoted 5 lines · Christoph Hellwig
Quoted 2 lines

remove-the-bkl-by-turning-it-into-a-semaphore.patch
remove the BKL by turning it into a semaphore

This _smp_processor_id() mess is horribly ugly. Do you really need that debug check?

wrt. necessity, it's quite handy: check out the 2.6.10 changelog, almost all preemption bugs wrt. smp_processor_id() were found this way.

what precisely is the 'mess' you are referring to?

is it the way the include file falls back to the original smp_processor_id() definition if an arch doesnt define __smp_processor_id()? I could get rid of that and just require every arch to define __smp_processor_id().

or is it the addition of _smp_processor_id() as a way to signal 'this smp_processor_id() call in a preemptible region is fine, trust me'? We could do smp_processor_id_preempt() or some other name - any better suggestions?

Ingo

#78 lore raw

Re: 2.6.10-mm1

Quoted 2 lines · Ingo Molnar

or is it the addition of _smp_processor_id() as a way to signal 'this smp_processor_id() call in a preemptible region is fine, trust me'?

Yes.

Quoted 3 lines

We
could do smp_processor_id_preempt() or some other name - any better suggestions?

I'd just kill the debug check and rely on the eye of the review to not let new users of smp_processor_id slip in.

#79 lore raw

Re: 2.6.10-mm1

Quoted 4 lines · Christoph Hellwig
Quoted 2 lines · Ingo Molnar

or is it the addition of _smp_processor_id() as a way to signal 'this smp_processor_id() call in a preemptible region is fine, trust me'?

Quoted 8 lines

Yes.

Quoted 3 lines

We
could do smp_processor_id_preempt() or some other name - any better suggestions?

I'd just kill the debug check and rely on the eye of the review to not let new users of smp_processor_id slip in.

relying on that is quite futile. E.g. in the block IO code it needed 3-4 iterations even after the first instance was found to get all the cases right. There are functions that are always called from under a lock then some unlocked call happens and we've got trouble. Often the bug is some very rare and obscure corruption of a statistics value, nobody really notices that.

by today i think we've identified most of the places that can safely do smp_processor_id() in a preemptible section (in x86 and x64) - it's only around 3% of the total smp_processor_id() use. I'd rather allow these exceptions and flag new exceptions as they get added - they are added at least an order of magnitude more rarely than smp_processor_id() gets added.

Ingo

#80 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton
Quoted 1 line · Andrew Morton

+m32r-fix-not-to-execute-noexec-pages-0-3.patch

This patch appears to be empty. Also, quilt barfs on such things. The patch as it appeared in broken-out/ is attached.

-- wli

From: Hirokazu Takata <[email protected]>

Hello,

Here is a patchset to fix a bug of m32r kernel 2.6.9 that a code on a noexec page can be executed incorrectly.

For good security, stack region should be non-executable. This fix is also needed to achieve non-executable stack.

Please apply this to 2.6.10 kernel if possible.

Thank you.

---

[PATCH 2.6.10-rc3-mm1] m32r: Cause SIGSEGV for nonexec page execution (1/3)
- Cause a segmentation fault for an illegal execution of a code on non-executable memory page.

[PATCH 2.6.10-rc3-mm1] m32r: Don't encode ACE_INSTRUCTION in address (2/3)
- To be more comprehensive, keep ACE_INSTRUCTION (access exception on instruction execution) information in thread_info->flags, instead of encoding it into address parameter.

[PATCH 2.6.10-rc3-mm1] m32r: Clean up arch/m32r/mm/fault.c (3/3)
- Fix a typo: ACE_USEMODE --> ACE_USERMODE.
- Update copyright statement, and so on.

--
Hirokazu Takata <[email protected]>
Linux/M32R Project: http://www.linux-m32r.org/

---

_

#81 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton
Quoted 1 line · you

+replace-numnodes-with-node_online_map-ia64.patch

Here are some compile fixes for this patch. Looks like simple typos. Note that the kernel won't boot even with these fixes, I'm debugging that now (suspect nodemask related stuff is causing the hang too).

Jesse

arch/ia64/mm/discontig.c +1 -1
diff -Napur -X /home/jbarnes/dontdiff linux-2.6.10-mm1.orig/arch/ia64/mm/discontig.c linux-2.6.10-mm1/arch/ia64/mm/discontig.c
@@ -379,7 +379,7 @@ static void __init reserve_pernode_space
 	struct bootmem_data *bdp;
 	int node;
 
-	for_each_online(node) {
+	for_each_online_node(node) {
 		pg_data_t *pdp = mem_data[node].pgdat;
 
 		bdp = pdp->bdata;
arch/ia64/sn/kernel/sn2/prominfo_proc.c +1 -1
diff -Napur -X /home/jbarnes/dontdiff linux-2.6.10-mm1.orig/arch/ia64/sn/kernel/sn2/prominfo_proc.c linux-2.6.10-mm1/arch/ia64/sn/kernel/sn2/prominfo_proc.c
@@ -266,7 +266,7 @@ void __exit prominfo_exit(void)
 	char name[NODE_NAME_LEN];
 
 	entp = proc_entries;
-	for (cnodeid) {
+	for_each_online_node(cnodeid) {
 		remove_proc_entry("fit", *entp);
 		remove_proc_entry("version", *entp);
 		sprintf(name, "node%d", cnodeid);
#82 lore raw

Re: 2.6.10-mm1

Quoted 10 lines · Jesse Barnes
Quoted 1 line · you

+replace-numnodes-with-node_online_map-ia64.patch

Here are some compile fixes for this patch. Looks like simple typos. Note that the kernel won't boot even with these fixes, I'm debugging that now (suspect nodemask related stuff is causing the hang too).

Jesse

Those 2 fixes look good. Thanks for the catch, Jesse!

-Matt

#83 lore raw

PATCH 1/1 pktcdvd: make two functions static

In reply to Andrew Morton

Make two needlessly global functions static.

---

 linux-petero/drivers/block/pktcdvd.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/block/pktcdvd.c renamed from drivers/block/pktcdvd.c~pktcdvd-static +2 -2
diff -puN drivers/block/pktcdvd.c~pktcdvd-static drivers/block/pktcdvd.c
@@ -2627,7 +2627,7 @@ static struct miscdevice pkt_misc = {
 	.fops  		= &pkt_ctl_fops
 };
 
-int pkt_init(void)
+static int pkt_init(void)
 {
 	int ret;
 
@@ -2663,7 +2663,7 @@ out2:
 	return ret;
 }
 
-void pkt_exit(void)
+static void pkt_exit(void)
 {
 	remove_proc_entry("pktcdvd", proc_root_driver);
 	misc_deregister(&pkt_misc);

_

Signature · 2 lines
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
#84 lore raw

PATCH 1/1 pktcdvd: grep-friendly function prototypes

Put function prototypes on a single source line to make them more grep-friendly.

---

 linux-petero/drivers/block/pktcdvd.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)
drivers/block/pktcdvd.c renamed from drivers/block/pktcdvd.c~pktcdvd-whitespace +2 -4
diff -puN drivers/block/pktcdvd.c~pktcdvd-whitespace drivers/block/pktcdvd.c
@@ -607,8 +607,7 @@ static int pkt_set_segment_merging(struc
 /*
  * Copy CD_FRAMESIZE bytes from src_bio into a destination page
  */
-static void pkt_copy_bio_data(struct bio *src_bio, int seg, int offs,
-			      struct page *dst_page, int dst_offs)
+static void pkt_copy_bio_data(struct bio *src_bio, int seg, int offs, struct page *dst_page, int dst_offs)
 {
 	unsigned int copy_size = CD_FRAMESIZE;
 
@@ -1301,8 +1300,7 @@ static void pkt_print_settings(struct pk
 	printk("Mode-%c disc\n", pd->settings.block_mode == 8 ? '1' : '2');
 }
 
-static int pkt_mode_sense(struct pktcdvd_device *pd, struct packet_command *cgc,
-			  int page_code, int page_control)
+static int pkt_mode_sense(struct pktcdvd_device *pd, struct packet_command *cgc, int page_code, int page_control)
 {
 	memset(cgc->cmd, 0, sizeof(cgc->cmd));
 

_

Signature · 2 lines
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
#85 lore raw

PATCH 1/1 pktcdvd: Small documentation update

Mention that a new DVD+RW disc has to be formatted before first use.

---

 linux-petero/Documentation/cdrom/packet-writing.txt |    3 +++
 1 files changed, 3 insertions(+)
Documentation/cdrom/packet-writing.txt renamed from Documentation/cdrom/packet-writing.txt~packet-doc-fix +3 -0
diff -puN Documentation/cdrom/packet-writing.txt~packet-doc-fix Documentation/cdrom/packet-writing.txt
@@ -43,6 +43,8 @@ shall implement "true random writes with
 that it should be possible to put any filesystem with a block size >=
 2KB on such a disc. For example, it should be possible to do:
 
+	# dvd+rw-format /dev/hdc   (only needed if the disc has never
+	                            been formatted)
 	# mkudffs /dev/hdc
 	# mount /dev/hdc /cdrom -t udf -o rw,noatime
 
@@ -54,6 +56,7 @@ writes are not 32KB aligned.
 Both problems can be solved by using the pktcdvd driver, which always
 generates aligned writes.
 
+	# dvd+rw-format /dev/hdc
 	# pktsetup dev_name /dev/hdc
 	# mkudffs /dev/pktcdvd/dev_name
 	# mount /dev/pktcdvd/dev_name /cdrom -t udf -o rw,noatime

_

Signature · 2 lines
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
#86 lore raw

PATCH 1/1 isofs: Remove useless include

When I was editing cdrom.h, I noticed that fs/isofs/compress.c was recompiled. This patch removes the useless #include that caused the unnecessary recompilation.

---

 linux-petero/fs/isofs/compress.c |    1 -
 1 files changed, 1 deletion(-)
fs/isofs/compress.c renamed from fs/isofs/compress.c~isofs-useless-include +0 -1
diff -puN fs/isofs/compress.c~isofs-useless-include fs/isofs/compress.c
@@ -28,7 +28,6 @@
 #include <linux/string.h>
 #include <linux/slab.h>
 #include <linux/errno.h>
-#include <linux/cdrom.h>
 #include <linux/init.h>
 #include <linux/nls.h>
 #include <linux/ctype.h>

_

Signature · 2 lines
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
#87 lore raw

PATCH 1/1 synaptics: Remove unused struct member variable

This patch removes an unused variable in the synaptics_data struct and deletes a no longer helpful comment. I don't think this has been used since the very first synaptics kernel patch I submitted that did all processing in kernel space instead of delegating most of it to the X server.

---

 linux-petero/drivers/input/mouse/synaptics.h |    2 --
 1 files changed, 2 deletions(-)
drivers/input/mouse/synaptics.h renamed from drivers/input/mouse/synaptics.h~synaptics-unused-var +0 -2
diff -puN drivers/input/mouse/synaptics.h~synaptics-unused-var drivers/input/mouse/synaptics.h
@@ -101,8 +101,6 @@ struct synaptics_data {
 	unsigned long int ext_cap; 		/* Extended Capabilities */
 	unsigned long int identity;		/* Identification */
 
-	/* Data for normal processing */
-	int old_w;				/* Previous w value */
 	unsigned char pkt_type;			/* packet type - old, new, etc */
 	unsigned char mode;			/* current mode byte */
 };

_

Signature · 2 lines
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
#88 lore raw

Re: [PATCH] pktcdvd: make two functions static

In reply to Peter Osterlund

Hi,

While at it...

Quoted 13 lines · Peter Osterlund

Make two needlessly global functions static.

---

 linux-petero/drivers/block/pktcdvd.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN drivers/block/pktcdvd.c~pktcdvd-static drivers/block/pktcdvd.c

drivers/block/pktcdvd.c 2005-01-03 21:39:56.985007024 +0100 static struct miscdevice pkt_misc = { · line 2633

Quoted 8 lines
drivers/block/pktcdvd.c 2005-01-03 21:39:56.985007024 +0100 renamed from drivers/block/pktcdvd.c~pktcdvd-static 2005-01-02 22:27:26.000000000 +0100 +1 -1
@@ -2627,7 +2627,7 @@ static struct miscdevice pkt_misc = {
        .fops           = &pkt_ctl_fops
 };
 
-int pkt_init(void)
+static int pkt_init(void)
 {
        int ret;
 

__init

Quoted 10 lines
drivers/block/pktcdvd.c 2005-01-03 21:39:56.985007024 +0100 renamed from drivers/block/pktcdvd.c~pktcdvd-static 2005-01-02 22:27:26.000000000 +0100 +1 -1
@@ -2663,7 +2663,7 @@ out2:
        return ret;
 }
 
-void pkt_exit(void)
+static void pkt_exit(void)
 {
        remove_proc_entry("pktcdvd", proc_root_driver);
        misc_deregister(&pkt_misc);

_

__exit

#89 lore raw

Re: 2.6.10-mm1

In reply to Andrew Morton

bogus chunk generating a standalone ip_conntrack_proto_tcp.c.orig:

net/ipv4/netfilter/ip_conntrack_proto_tcp.c.orig 2004-12-24 17:10:34.000000000 -0800 renamed from dev/null 2003-09-15 06:40:47.000000000 -0700 +0 -0
@@ -0,0 +1,1091 @@

Ingo

#90 lore raw

PATCH 1/1 deprecate (un)register_ioctl32_conversion

In reply to Andrew Morton

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

include/linux/ioctl32.h +5 -2
diff -ruI -u linux-2.6.10/include/linux/ioctl32.h linux-2.6.10-ioctls/include/linux/ioctl32.h
@@ -23,9 +23,12 @@
  */ 
 
 #ifdef CONFIG_COMPAT
-extern int register_ioctl32_conversion(unsigned int cmd,
+
+/* The following two calls trigger an unfixable module unload race. */
+/* Deprecated in favor of ioctl_compat in struct file_operations. */
+extern int __deprecated register_ioctl32_conversion(unsigned int cmd,
 				ioctl_trans_handler_t handler);
-extern int unregister_ioctl32_conversion(unsigned int cmd);
+extern int __deprecated unregister_ioctl32_conversion(unsigned int cmd);
 
 #else
 
#91 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 4 lines · Michael S. Tsirkin

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Sorry, but this is a lot too early. Once there's a handfull users left in _mainline_ you can start deprecating it (or better remove it completely).

So far we have a non-final version of the replacement in -mm and no single user converted.

#92 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 8 lines · Michael S. Tsirkin
Quoted 4 lines

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Sorry, but this is a lot too early. Once there's a handfull users left in _mainline_ you can start deprecating it (or better remove it completely).

I dont know. So how will people know they are supposed to convert then?

Quoted 2 lines

So far we have a non-final version of the replacement in -mm and no single user converted.

Christoph, I know you want to remove the inode parameter :)

Otherwise I think -mm1 has the final version of the replacement.

MST

#93 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 1 line · Michael S. Tsirkin

I dont know. So how will people know they are supposed to convert then?

Tell the janitors about it - or do it yourself. Except for taking care of the BKL going away it's a trivial conversion.

#94 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

In reply to Michael S. Tsirkin
Quoted 11 lines · Michael S. Tsirkin

Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 8 lines · Michael S. Tsirkin
Quoted 4 lines

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Sorry, but this is a lot too early. Once there's a handfull users left in _mainline_ you can start deprecating it (or better remove it completely).

Quoted 8 lines

I dont know. So how will people know they are supposed to convert then?

Quoted 2 lines

So far we have a non-final version of the replacement in -mm and no single user converted.

Christoph, I know you want to remove the inode parameter :)

Otherwise I think -mm1 has the final version of the replacement.

I merged Christoph's verion of the patch into -mm.

Documentation/filesystems/Locking renamed from Documentation/filesystems/Locking~ioctl-rework-2 +7 -0
@@ -350,6 +350,8 @@ prototypes:
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int,
 			unsigned long);
+	long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);
@@ -383,6 +385,8 @@ aio_write:		no
 readdir: 		no
 poll:			no
 ioctl:			yes	(see below)
+unlocked_ioctl:		no	(see below)
+compat_ioctl:		no
 mmap:			no
 open:			maybe	(see below)
 flush:			no
@@ -428,6 +432,9 @@ move ->readdir() to inode_operations and
 anything that resembles union-mount we won't have a struct file for all
 components. And there are other reasons why the current interface is a mess...
 
+->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
+doesn't take the BKL.
+
 ->read on directories probably must go away - we should just enforce -EISDIR
 in sys_read() and friends.
 
fs/compat.c renamed from fs/compat.c~ioctl-rework-2 +65 -55

142 lines not on this page · raw message

fs/ioctl.c renamed from fs/ioctl.c~ioctl-rework-2 +39 -17

103 lines not on this page · raw message

include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework-2 +4 -2
diff -puN include/linux/fs.h~ioctl-rework-2 include/linux/fs.h
@@ -907,8 +907,8 @@ typedef int (*read_actor_t)(read_descrip
 
 /*
  * NOTE:
- * read, write, poll, fsync, readv, writev can be called
- *   without the big kernel lock held in all filesystems.
+ * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl
+ * can be called without the big kernel lock held in all filesystems.
  */
 struct file_operations {
 	struct module *owner;
@@ -920,6 +920,8 @@ struct file_operations {
 	int (*readdir) (struct file *, void *, filldir_t);
 	unsigned int (*poll) (struct file *, struct poll_table_struct *);
 	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+	long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct inode *, struct file *);
 	int (*flush) (struct file *);

_

#95 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Hello!
Quoting r. Andrew Morton ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 5 lines
Quoted 3 lines

Christoph, I know you want to remove the inode parameter :)

Otherwise I think -mm1 has the final version of the replacement.

I merged Christoph's verion of the patch into -mm.

I see some more problems with this decision.

Quoted 16 lines

asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,

fs/compat.c renamed from fs/compat.c~ioctl-rework-2 +1 -6
 				unsigned long arg)
 {
-	struct file * filp;
+	struct file *filp;
 	int error = -EBADF;
 	struct ioctl_trans *t;
 
 	filp = fget(fd);
-	if(!filp)
-		goto out2;
-
-	if (!filp->f_op || !filp->f_op->ioctl) {
-		error = sys_ioctl (fd, cmd, arg);

fs/compat.c out: · line 445

Quoted 10 lines
fs/compat.c renamed from fs/compat.c~ioctl-rework-2 +8 -0
+	if (!filp)
 		goto out;
+
+	if (!filp->f_op) {
+		if (!filp->f_op->ioctl)
+			goto do_ioctl;
+	} else if (filp->f_op->compat_ioctl) {
+		error = filp->f_op->compat_ioctl(filp, cmd, arg);
+		goto out_fput;
 	}

Stare at this as I might, I dont understand why does it make sence. So if filp->f_op is NULL, you are then checking filp->f_op->ioctl? Looks like an oops to me.

What should be there:

fs/compat.c out: · line 444

Quoted 5 lines
fs/compat.c renamed from fs/compat.c~ioctl-rework-2 +5 -0
+	if (!filp->f_op) {
+		goto do_ioctl;
+	} else if (filp->f_op->compat_ioctl) {
+		error = filp->f_op->compat_ioctl(filp, cmd, arg);
+		goto out_fput;

Look, was this patch even tested?

MST

#96 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 3 lines

Stare at this as I might, I dont understand why does it make sence. So if filp->f_op is NULL, you are then checking filp->f_op->ioctl? Looks like an oops to me.

I doesn't make sense, but fortunately files with NULL filp->f_op don't happen in practice (need to research whether it can't happen in theory either so we could lose lots of checks)

Quoted 8 lines

What should be there:

Review

Quoted 5 lines
(quoted diff) +5 -0
+	if (!filp->f_op) {
+		goto do_ioctl;
+	} else if (filp->f_op->compat_ioctl) {
+		error = filp->f_op->compat_ioctl(filp, cmd, arg);
+		goto out_fput;

not correct either, see the incremental patch below.

Quoted 1 line

Look, was this patch even tested?

Yes.

fs/compat.c +4 -4
@@ -436,10 +436,10 @@
 	if (!filp)
 		goto out;
 
-	if (!filp->f_op) {
-		if (!filp->f_op->ioctl)
-			goto do_ioctl;
-	} else if (filp->f_op->compat_ioctl) {
+	if (!filp->f_op || !filp->f_op->ioctl)
+		goto do_ioctl;
+
+	if (filp->f_op || filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}
#97 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 7 lines
Quoted 3 lines

Stare at this as I might, I dont understand why does it make sence. So if filp->f_op is NULL, you are then checking filp->f_op->ioctl? Looks like an oops to me.

I doesn't make sense, but fortunately files with NULL filp->f_op don't happen in practice (need to research whether it can't happen in theory either so we could lose lots of checks)

Interesting. At least for character devices coming out of modules I think you dont - you need at least fops->owner.

Quoted 7 lines
fs/compat.c +0 -1
@@ -436,10 +436,10 @@
 	if (!filp)
 		goto out;
 
-	if (!filp->f_op) {

fs/compat.c line 445

Quoted 10 lines
fs/compat.c +4 -3
-		if (!filp->f_op->ioctl)
-			goto do_ioctl;
-	} else if (filp->f_op->compat_ioctl) {
+	if (!filp->f_op || !filp->f_op->ioctl)
+		goto do_ioctl;
+
+	if (filp->f_op || filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}

So now if I dont have ->ioctl the ioctl_compat wont be called. What if I only have unlocked_ioctl?

MST

#98 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 10 lines · Michael S. Tsirkin

Review

Quoted 7 lines
(quoted diff) +4 -0
+	if (!filp->f_op || !filp->f_op->ioctl)
+		goto do_ioctl;
+
+	if (filp->f_op || filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}

So now if I dont have ->ioctl the ioctl_compat wont be called. What if I only have unlocked_ioctl?

Indeed. In my test setup I didn't have a driver using both. So let's think a little more what checks we want.

The original intention (pre-patch) was that without an ioctl entry we'd skip the hash table lookup and skip right to trying the few standard ioctls.

So with ->compat_ioctl we should try that one first, then checking for either ->ioctl or ->unlocked_ioctl beeing there. Like the patch below (this time it's actually untested because all my 64bit machines are in use):

fs/compat.c +5 -4
@@ -436,14 +436,15 @@
 	if (!filp)
 		goto out;
 
-	if (!filp->f_op) {
-		if (!filp->f_op->ioctl)
-			goto do_ioctl;
-	} else if (filp->f_op->compat_ioctl) {
+	if (filp->f_op && filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}
 
+	if (!filp->f_op ||
+	    (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
+		goto do_ioctl;
+
 	down_read(&ioctl32_sem);
 	for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
 		if (t->cmd == cmd)
Quoted 3 lines

MST

---end quoted text---

#99 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 50 lines · Michael S. Tsirkin
Quoted 10 lines

Review

Quoted 7 lines
(quoted diff) +4 -0
+	if (!filp->f_op || !filp->f_op->ioctl)
+		goto do_ioctl;
+
+	if (filp->f_op || filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}

So now if I dont have ->ioctl the ioctl_compat wont be called. What if I only have unlocked_ioctl?

Indeed. In my test setup I didn't have a driver using both. So let's think a little more what checks we want.

The original intention (pre-patch) was that without an ioctl entry we'd skip the hash table lookup and skip right to trying the few standard ioctls.

So with ->compat_ioctl we should try that one first, then checking for either ->ioctl or ->unlocked_ioctl beeing there. Like the patch below (this time it's actually untested because all my 64bit machines are in use):

fs/compat.c +5 -4
@@ -436,14 +436,15 @@
 	if (!filp)
 		goto out;
 
-	if (!filp->f_op) {
-		if (!filp->f_op->ioctl)
-			goto do_ioctl;
-	} else if (filp->f_op->compat_ioctl) {
+	if (filp->f_op && filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
 		goto out_fput;
 	}
 
+	if (!filp->f_op ||
+	    (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
+		goto do_ioctl;
+
 	down_read(&ioctl32_sem);
 	for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
 		if (t->cmd == cmd)
Quoted 3 lines
Quoted 2 lines
Quoted 1 line

MST

---end quoted text---

Amen to that. Since it conflicts with this change, here again is my patch to make it possible for the compat_ioctl to drop back on the standard conversions.
Applied on top of Christoph's last patch (above).

fs/compat.c +2 -1
diff -rup linux-2.6.10-mm2/fs/compat.c linux-2.6.10-ioctls/fs/compat.c
@@ -431,9 +431,10 @@ asmlinkage long compat_sys_ioctl(unsigne
 	if (!filp)
 		goto out;
 
 	if (filp->f_op && filp->f_op->compat_ioctl) {
 		error = filp->f_op->compat_ioctl(filp, cmd, arg);
-		goto out_fput;
+		if (error != -ENOIOCTLCMD)
+			goto out_fput;
 	}
 
 	if (!filp->f_op ||
fs/ioctl.c +3 -0
diff -rup linux-2.6.10-mm2/fs/ioctl.c linux-2.6.10-ioctls/fs/ioctl.c
@@ -26,6 +26,9 @@ static long do_ioctl(struct file *filp, 
 
 	if (filp->f_op->unlocked_ioctl) {
 		error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
+		if (error == -ENOIOCTLCMD)
+			error = -EINVAL;
+		goto out;
 	} else if (filp->f_op->ioctl) {
 		lock_kernel();
 		error = filp->f_op->ioctl(filp->f_dentry->d_inode,
#100 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

In reply to Christoph Hellwig
Quoted 8 lines · Christoph Hellwig
Quoted 4 lines · Michael S. Tsirkin

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Sorry, but this is a lot too early. Once there's a handfull users left in _mainline_ you can start deprecating it (or better remove it completely).

There were never more than a handful users of it anyways. So I think Michael's suggestion to deprecate it early is very reasonable.

Quoted 2 lines

So far we have a non-final version of the replacement in -mm and no single user converted.

For me it looks quite final.

-Andi

#101 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 5 lines · Andi Kleen
Quoted 3 lines · Christoph Hellwig
Quoted 2 lines · Michael S. Tsirkin

Hello, Andrew, all!

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Sorry, but this is a lot too early. Once there's a handfull users left in _mainline_ you can start deprecating it (or better remove it completely).

There were never more than a handful users of it anyways. So I think Michael's suggestion to deprecate it early is very reasonable.

It's 72 callers in mainline. Aka 72 new warnings for an allmodconfig build. This isn't reasonable just because the interface got out of fashion.

#102 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

In reply to Michael S. Tsirkin

At Wed, 5 Jan 2005 16:40:43 +0200,

Quoted 5 lines · Michael S. Tsirkin

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Good to see that ioctl_native and ioctl_compat ops are already there!

Will it be merged to 2.6.11? If so, I'll prepare the patch to convert the ALSA compat32 stuff, too...

Takashi

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

#103 lore raw

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Quoted 4 lines · Takashi Iwai

At Wed, 5 Jan 2005 16:40:43 +0200,

Quoted 1 line · Michael S. Tsirkin
Quoted 8 lines
Quoted 4 lines

Hello, Andrew, all!

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Good to see that ioctl_native and ioctl_compat ops are already there!

Will it be merged to 2.6.11?

It should be, unless there's some problem. In maybe a week or so.

#104 lore raw

PATCH 1/1 macros to detect existance of unlocked_ioctl and ioctl_compat

Hello!
Quoting r. Andrew Morton ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":

Quoted 7 lines
Quoted 6 lines · Takashi Iwai

At Wed, 5 Jan 2005 16:40:43 +0200,

Quoted 3 lines · Michael S. Tsirkin

Hello, Andrew, all!

Quoted 8 lines
Quoted 6 lines
Quoted 2 lines

Since in -mm1 we now have a race-free replacement (that being ioctl_compat), here is a patch to deprecate (un)register_ioctl32_conversion.

Good to see that ioctl_native and ioctl_compat ops are already there!

Will it be merged to 2.6.11?

It should be, unless there's some problem. In maybe a week or so.

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and ioctl_compat can be easily detected.

include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +6 -0
diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and ioctl_compat
+ * fields in struct file_operations. */
+#define HAVE_IOCTL_COMPAT 1
+#define HAVE_UNLOCKED_IOCTL 1
+
 /*
  * NOTE:
  * read, write, poll, fsync, readv, writev can be called
#105 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 5 lines · Michael S. Tsirkin
Quoted 1 line

It should be, unless there's some problem. In maybe a week or so.

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and ioctl_compat can be easily detected.

That's not the way we're making additions. Get your code merged and there won't be any need to detect the feature.

author
#106 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 9 lines · Christoph Hellwig
Quoted 5 lines · Michael S. Tsirkin
Quoted 1 line

It should be, unless there's some problem. In maybe a week or so.

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and ioctl_compat can be easily detected.

That's not the way we're making additions. Get your code merged and there won't be any need to detect the feature.

I would agree that it shouldn't be used for in tree code, but for out of tree code it is rather useful. There are other such feature macros for major driver interface changes too (e.g. in the network stack).

-Andi

#107 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 3 lines · Andi Kleen

I would agree that it shouldn't be used for in tree code, but for out of tree code it is rather useful. There are other such feature macros for major driver interface changes too (e.g. in the network stack).

Which is the only place doing it. We had this discussion in the past (lastone I revolve Greg vetoed it). We simply shouldn't clutter our headers for the sake of out of tree drivers - with LINUX_VERSION_CODE we've already implemented a mechanism for out of tree drivers.

p.s. droppe alsa-devel from Cc because of the braindead moderation policy.

#108 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 5 lines · Christoph Hellwig
Quoted 3 lines · Andi Kleen

I would agree that it shouldn't be used for in tree code, but for out of tree code it is rather useful. There are other such feature macros for major driver interface changes too (e.g. in the network stack).

Quoted 7 lines

Which is the only place doing it. We had this discussion in the past (lastone I revolve Greg vetoed it). We simply shouldn't clutter our headers for the sake of out of tree drivers - with LINUX_VERSION_CODE we've already implemented a mechanism for out of tree drivers.

p.s. droppe alsa-devel from Cc because of the braindead moderation policy.

Um, alsa-devel is not moderated, we accept posts from non subscribers. Where do you think all the spam in our archive comes from?

Lee

#109 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 5 lines · Lee Revell
Quoted 2 lines

p.s. droppe alsa-devel from Cc because of the braindead moderation policy.

Um, alsa-devel is not moderated, we accept posts from non subscribers. Where do you think all the spam in our archive comes from?

See the attached mail I got. Btw, where are the current alsa-devel archives? I tried to look things up a few times lately, but all archives linked off the websiste are either dead or totally outdated.

Quoted 1 line

From [email protected] Thu Jan 06 14:56:18 2005

Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Thu, 06 Jan 2005 14:56:18 +0000
Received: from mx-outbound.sourceforge.net ([66.35.250.223])

	by pentafluge.infradead.org with esmtp (Exim 4.42 #1 (Red Hat Linux))
	id 1CmZ3h-0004tZ-A6
	for [email protected]; Thu, 06 Jan 2005 14:56:18 +0000
Received: from projects.sourceforge.net (sc8-sf-list2-b.sourceforge.net [10.3.1.8])
	by sc8-sf-spam1.sourceforge.net (Postfix) with ESMTP id 553EB88F8E
	for <[email protected]>; Thu,  6 Jan 2005 06:56:06 -0800 (PST)

Date: Thu, 06 Jan 2005 06:56:06 -0800
Subject: Your message to Alsa-devel awaits moderator approval
From: [email protected]
To: [email protected]
X-Ack: no
Sender: [email protected]
Errors-To: [email protected]
X-BeenThere: [email protected]
X-Mailman-Version: 2.0.9-sf.net
Precedence: bulk
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/alsa-devel>,
<mailto:[email protected]?subject=unsubscribe>
List-Id: Advanced Linux Sound Architecture - Devel <alsa-devel.lists.sourceforge.net>
List-Post: <mailto:[email protected]>
List-Help: <mailto:[email protected]?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/alsa-devel>,
<mailto:[email protected]?subject=subscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum=alsa-devel>
Message-Id: <[email protected]>
X-Spam-Score: 0.3 (/)
X-Spam-Report: SpamAssassin version 2.63 on pentafluge.infradead.org summary:
Content analysis details: (0.3 points, 5.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
0.3 NO_REAL_NAME From: does not include a real name
Status: RO
Content-Length: 351
Lines: 12

Your mail to 'Alsa-devel' with the subject

Re: [PATCH] deprecate (un)register_ioctl32_conversion

Is being held until the list moderator can review it for approval.

The reason it is being held:

Too many recipients to the message

Either the message will get posted to the list, or you will receive notification of the moderator's decision.

#110 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 11 lines · Christoph Hellwig
Quoted 5 lines · Lee Revell
Quoted 2 lines

p.s. droppe alsa-devel from Cc because of the braindead moderation policy.

Um, alsa-devel is not moderated, we accept posts from non subscribers. Where do you think all the spam in our archive comes from?

See the attached mail I got. Btw, where are the current alsa-devel archives? I tried to look things up a few times lately, but all archives linked off the websiste are either dead or totally outdated.

OK, right, that's a problem. There's no reason for that policy. Perex, can you fix it?

The only working up to date archive I know of is the sourceforge one, not my favorite interface:

http://sourceforge.net/mailarchive/forum.php?forum_id=1752

Lee

A message that is not in the archive (sent off-list or not yet received): [email protected]

#112 lore raw

new home for alsa-devel archive? (was Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat)

[re-added alsa-devel to cc:]

Quoted 10 lines · Christoph Hellwig
Quoted 4 lines · Lee Revell

The only working up to date archive I know of is the sourceforge one, not my favorite interface:

http://sourceforge.net/mailarchive/forum.php?forum_id=1752

Indeed, I'd even say it's horrible. Maybe Alsa folks could ask whether
http://marc.theaimsgroup.com/ could host the new alsa lists? They only have the dead really old list currently.

This would be great. I guess the first step is to find someone with a local copy of the archive, in mbox format, preferably despammed. I only have back to June. Anyone?

Lee

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

#113 lore raw

Re: new home for alsa-devel archive?

Quoted 9 lines · Lee Revell

[re-added alsa-devel to cc:]

Quoted 6 lines · Christoph Hellwig
Quoted 4 lines · Lee Revell

The only working up to date archive I know of is the sourceforge one, not my favorite interface:

http://sourceforge.net/mailarchive/forum.php?forum_id=1752

Quoted 8 lines
Quoted 4 lines

Indeed, I'd even say it's horrible. Maybe Alsa folks could ask whether
http://marc.theaimsgroup.com/ could host the new alsa lists? They only have the dead really old list currently.

This would be great. I guess the first step is to find someone with a local copy of the archive, in mbox format, preferably despammed. I only have back to June. Anyone?

There are archives at gmane, too. Not perfect but infinitely better than sf.net.

Signature · 9 lines
Måns Rullgård
[email protected]



-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
#114 lore raw

Re: Re: new home for alsa-devel archive?

Quoted 7 lines · Måns Rullgård
Quoted 6 lines · Lee Revell

[re-added alsa-devel to cc:]

Quoted 4 lines · Christoph Hellwig
Quoted 3 lines · Lee Revell

The only working up to date archive I know of is the sourceforge one, not my favorite interface:
http://sourceforge.net/mailarchive/forum.php?forum_id=1752

Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

Indeed, I'd even say it's horrible. Maybe Alsa folks could ask whether
http://marc.theaimsgroup.com/ could host the new alsa lists? They only have the dead really old list currently.

This would be great. I guess the first step is to find someone with a local copy of the archive, in mbox format, preferably despammed. I only have back to June. Anyone?

There are archives at gmane, too. Not perfect but infinitely better than sf.net.

Sorry for jumping in late on this thread. I missed the beginning of it.

I'm not sure if anyone has expressed an opinion about mailman, but if the community is open to it I can offer techweb.rfa.org as a host for the lists and archives. We already host the portaudio list.

http://techweb.rfa.org/mailman/listinfo

Please CC me on any reply. I rarely have time to read alsa lists lately and might miss it otherwise.

-Eric Rz.

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

author
#116 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Christoph Hellwig
Quoted 7 lines · Christoph Hellwig
Quoted 3 lines · Andi Kleen

I would agree that it shouldn't be used for in tree code, but for out of tree code it is rather useful. There are other such feature macros for major driver interface changes too (e.g. in the network stack).

Which is the only place doing it. We had this discussion in the past (lastone I revolve Greg vetoed it). We simply shouldn't clutter our

I don't know who had this discussion and did this "decision", but for record I disagree.

Quoted 2 lines

headers for the sake of out of tree drivers - with LINUX_VERSION_CODE we've already implemented a mechanism for out of tree drivers.

That's incredibly ugly. I always hate these checks in source code because it's never clear what exactly they are testing for. And requires unreasonable work to find out when exactly the feature was added. And it doesn't really work when there are backports in older trees. In short there are many drawbacks. HAVE_* is much nicer.

-Andi

#117 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Christoph Hellwig
Quoted 9 lines · Christoph Hellwig
Quoted 3 lines · Andi Kleen

I would agree that it shouldn't be used for in tree code, but for out of tree code it is rather useful. There are other such feature macros for major driver interface changes too (e.g. in the network stack).

Which is the only place doing it. We had this discussion in the past (lastone I revolve Greg vetoed it). We simply shouldn't clutter our headers for the sake of out of tree drivers - with LINUX_VERSION_CODE we've already implemented a mechanism for out of tree drivers.

LINUX_VERSION_CODE never worked in last ~4 years as definite key to make decision about supported API. Vendors are porting stuff across releases, there exists additional trees like -mm, -wolk, -ac, and even if you look at the current example with deprecating register_ioctl32_conversion you'll find that it does not work:

2.6.10 kernel which presents itself as 0x02060A does have this, but does not have {compat,native}_ioctl.

2.6.10-mm2 kernel, which presents itself as 0x02060A too, has {compat,native}_ioctl, and also has register_ioctl32_conversion.

And there is intention to apply patch to 2.6.10-mmX which will present itself as 0x02060A again, will have {compat,native}_ioctl, and will either not have register_ioctl32_conversion at all, or will produce unfortunate unwanted annoying warning when this function is used.

So you'll have two 2.6.10 kernels, one says that register_ioctl32_conversion is only way to do things, and at same time it will say that register_ioctl32_conversion is deprecated. Strange, isn't it? Unfortunate? Maybe. Can this work with LINUX_VERSION_CODE? Definitely not without an additional checks on other things.

Same situation exists with pml4/pgd/pud I described in previous mail. You have 2.6.10 with pgd only, 2.6.10-bkWhatever with pgd/pud, and 2.6.10-mmX with pml4/pgd. This cannot be checked by LINUX_VERSION_CODE too...

Other changes usually add some #define which can be checked (like PUD_MASK or pml4_offset), but sometime it happens that no useful macro is created and test-compile is only way how to discover things (from past let's name epoll change backported from 2.5.x to 2.4.x-wolk, SKAS's change to do_mmap_pgoff prototype living in SUSE tree for a bit, or nopage's change in prototype around 2.6.1).
Best regards,
Petr Vandrovec [email protected]

#118 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Christoph Hellwig
Quoted 9 lines · Christoph Hellwig
Quoted 5 lines · Michael S. Tsirkin
Quoted 1 line

It should be, unless there's some problem. In maybe a week or so.

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and ioctl_compat can be easily detected.

That's not the way we're making additions. Get your code merged and there won't be any need to detect the feature.

When Greg made sysfs GPL only, I've asked whether it is possible to merge vmmon/vmnet in (and changing its license, of course). Answer on LKML was quite clear: no, you are not interested in having vmmon/vmnet in Linux kernel as you do not believe that they are usable for anything else than VMware.

So please tell me what I can do to satisfy you? You do not want our modules in kernel tree, and you do not want to allow us to detect kernel interface easily. Of course we can use autoconf-like scripts we are using for example to detect pml4/pgd vs. pgd/pud vs. pgd/pmd/pte vs. pmd/pte only, but each time you can detect feature by looking at flags and not by trying to build one source after another detection is simpler and more reliable.

BTW, vmmon will still require register_ioctl32_conversion as we are using (abusing) it to be able to issue 64bit ioctls from 32bit application. I assume that there is no supported way how to issue 64bit ioctls from 32bit aplication anymore after you disallow system-wide translations to be registered by modules.

Best regards,
Petr Vandrovec

#119 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 4 lines · Petr Vandrovec

When Greg made sysfs GPL only, I've asked whether it is possible to merge vmmon/vmnet in (and changing its license, of course). Answer on LKML was quite clear: no, you are not interested in having vmmon/vmnet in Linux kernel as you do not believe that they are usable for anything else than VMware.

While I think there could be users, these users would probably come only after the code was GPLed, so this is kinda chicken & egg.

Quoted 6 lines

So please tell me what I can do to satisfy you? You do not want our modules in kernel tree, and you do not want to allow us to detect kernel interface easily. Of course we can use autoconf-like scripts we are using for example to detect pml4/pgd vs. pgd/pud vs. pgd/pmd/pte vs. pmd/pte only, but each time you can detect feature by looking at flags and not by trying to build one source after another detection is simpler and more reliable.

I don't care at all for non-opensource users, or small opensource glue for a big propritary user.

Quoted 5 lines

BTW, vmmon will still require register_ioctl32_conversion as we are using (abusing) it to be able to issue 64bit ioctls from 32bit application. I assume that there is no supported way how to issue 64bit ioctls from 32bit aplication anymore after you disallow system-wide translations to be registered by modules.

Well, bad luck. You'll have to stop using undocumented hacks.

author
#120 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Petr Vandrovec
Quoted 5 lines · Petr Vandrovec

BTW, vmmon will still require register_ioctl32_conversion as we are using (abusing) it to be able to issue 64bit ioctls from 32bit application. I assume that there is no supported way how to issue 64bit ioctls from 32bit aplication anymore after you disallow system-wide translations to be registered by modules.

Why are you issuing 64bit ioctls from 32bit applications?

-Andi

#121 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 8 lines · Andi Kleen
Quoted 5 lines · Petr Vandrovec

BTW, vmmon will still require register_ioctl32_conversion as we are using (abusing) it to be able to issue 64bit ioctls from 32bit application. I assume that there is no supported way how to issue 64bit ioctls from 32bit aplication anymore after you disallow system-wide translations to be registered by modules.

Why are you issuing 64bit ioctls from 32bit applications?

There are three reasons (main reason is that vmware is 32bit app, but it is how things are currently laid out; even if there will be 64bit app, 32bit versions are already in use and people wants to use them on 64bit kernels):

* USB. usbfs API is written in a way which does not allow you to safely wrap it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs code itself did not look feasible year ago. Even on current 64bit kernels it is not possible to issue raw USB operations from 32bit apps, and I do not believe that it is going to change - after all, just issuing ioctl through 64bit path from application which is aware of 64bit kernel is quite simple, much simpler than any attempt to make kernel dual-interface.

* parport interface, serial port: not all APIs were implemented in kernel. Current kernels do wrap all APIs vmware needs, but older kernels do not, and so we had to find some solution for older kernels too. Not so surprisingly, solution we had in place for USB works for them too...

* floppy: it is actually different from examples above, as FDRAWCMD command is supported by 32->64 layer, but it is supported incorrectly. Due to this all above started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now which one you'll get until you call this ioctl... And once we had code in place, it was reused for USB and later for ppdev & serial.

So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument} and passes it down to 64bit sys_ioctl:

/* Use weak: not all kernels export sys_ioctl for use by modules */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 66) asmlinkage __attribute__((weak)) long
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); #else
asmlinkage __attribute__((weak)) int
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); #endif

...

static int
LinuxDriver_Ioctl3264Passthrough(unsigned int fd, unsigned int iocmd,
unsigned long ioarg, struct file * filp)
{
VMIoctl64 cmd;

   if (copy_from_user(&cmd, (VMIoctl64*)ioarg, sizeof(cmd))) {
      return -EFAULT;
   }
   if (sys_ioctl) {
      int err;

#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 26) || \
(LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 3))

      err = sys_ioctl(fd, cmd.iocmd, cmd.ioarg);
#else
      unlock_kernel();
      err = sys_ioctl(fd, cmd.iocmd, cmd.ioarg);
      lock_kernel();
#endif
      return err;

}
return -ENOTTY;
}

We were thinking about creating 64bit thread, and issuing 64bit syscalls from it, but it looked more fragile than code above.
Best regards,
Petr Vandrovec

author
#122 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

[cc list trimmed]

Quoted 6 lines · Petr Vandrovec
Quoted 1 line

Why are you issuing 64bit ioctls from 32bit applications?

There are three reasons (main reason is that vmware is 32bit app, but it is how things are currently laid out; even if there will be 64bit app, 32bit versions are already in use and people wants to use them on 64bit kernels):

Quoted 7 lines

* USB. usbfs API is written in a way which does not allow you to safely wrap it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs code itself did not look feasible year ago. Even on current 64bit kernels it is not possible to issue raw USB operations from 32bit apps, and I do not believe that it is going to change - after all, just issuing ioctl through 64bit path from application which is aware of 64bit kernel is quite simple, much simpler than any attempt to make kernel dual-interface.

Agree that's a problem. We just need an alternative interface here or I try to come up with an x86-64 specific hack (I think it's possible to do the compatibility x86-64 specific, just not in compat code for all architectures who have truly separated user/kernel address spaces)

I hope the USB people will eventually add a better interface here. Greg?

Quoted 6 lines

* parport interface, serial port: not all APIs were implemented in kernel. Current kernels do wrap all APIs vmware needs, but older kernels do not, and so we had to find some solution for older kernels too. Not so surprisingly, solution we had in place for USB works for them too...

But that's a non issue for the new kernels affected by the new ioctl interface.

Quoted 7 lines

* floppy: it is actually different from examples above, as FDRAWCMD command is supported by 32->64 layer, but it is supported incorrectly. Due to this all above started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now which one you'll get until you call this ioctl... And once we had code in place, it was reused for USB and later for ppdev & serial.

Did you submit a patch for that? If not you should.

Quoted 2 lines

So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument} and passes it down to 64bit sys_ioctl:

The magic 64bit interface isn't a very good interface, don't expect that to be supported in the future.

-Andi

#123 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 10 lines · Andi Kleen

[cc list trimmed]

Quoted 7 lines

* floppy: it is actually different from examples above, as FDRAWCMD command is supported by 32->64 layer, but it is supported incorrectly. Due to this all above started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now which one you'll get until you call this ioctl... And once we had code in place, it was reused for USB and later for ppdev & serial.

Did you submit a patch for that? If not you should.

I hoped that floppies will die before... FDRAWCMD receives array of floppy_raw_cmd structures, and to find how many of these structures you have to peek into every of them to find whether there is next one or not, and structures itself contain pointers to other memory... I'll code up something during weekend.

Quoted 5 lines
Quoted 2 lines

So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument} and passes it down to 64bit sys_ioctl:

The magic 64bit interface isn't a very good interface, don't expect that to be supported in the future.

With per-file compat_ioctl ipx ioctls (using SIOCPRIVATE+X range) could be made to work too, so only thing left for me is USB.
Petr Vandrovec

#124 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Andi Kleen
Quoted 17 lines · Andi Kleen

[cc list trimmed]

Quoted 6 lines · Petr Vandrovec
Quoted 1 line

Why are you issuing 64bit ioctls from 32bit applications?

There are three reasons (main reason is that vmware is 32bit app, but it is how things are currently laid out; even if there will be 64bit app, 32bit versions are already in use and people wants to use them on 64bit kernels):

Quoted 7 lines

* USB. usbfs API is written in a way which does not allow you to safely wrap it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs code itself did not look feasible year ago. Even on current 64bit kernels it is not possible to issue raw USB operations from 32bit apps, and I do not believe that it is going to change - after all, just issuing ioctl through 64bit path from application which is aware of 64bit kernel is quite simple, much simpler than any attempt to make kernel dual-interface.

Quoted 7 lines

Agree that's a problem. We just need an alternative interface here or I try to come up with an x86-64 specific hack (I think it's possible to do the compatibility x86-64 specific, just not in compat code for all architectures who have truly separated user/kernel address spaces)

I hope the USB people will eventually add a better interface here. Greg?

Yes, we've been talking about a usbfs2 for a long time now, but no one has stepped up and done the work. It would look a lot like gadgetfs, which only has a limited number of ioctls needed for its operation.

But I don't see where the problem is unique to usbfs here, don't we properly use the 32->64bit ioctl conversion code to solve this kind of issue? Are we using it incorrectly?

thanks,

greg k-h

author
#125 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 8 lines
Quoted 7 lines

Agree that's a problem. We just need an alternative interface here or I try to come up with an x86-64 specific hack (I think it's possible to do the compatibility x86-64 specific, just not in compat code for all architectures who have truly separated user/kernel address spaces)

I hope the USB people will eventually add a better interface here. Greg?

Quoted 7 lines

Yes, we've been talking about a usbfs2 for a long time now, but no one has stepped up and done the work. It would look a lot like gadgetfs, which only has a limited number of ioctls needed for its operation.

But I don't see where the problem is unique to usbfs here, don't we properly use the 32->64bit ioctl conversion code to solve this kind of issue? Are we using it incorrectly?

DaveM can probably give you more details since he tried unsucessfully to make it work. I think the problem is that there is no enough information for the compat layer to convert everything.

Here's his comment from fs/compat_ioctl.c.

On x86-64 it can be a bit easier because you can get away with only partially converting a data structure because the 32bit space is still visible from the kernel. But that doesn't work on some other archs.

-Andi

/* This needs more work before we can enable it. Unfortunately
* because of the fancy asynchronous way URB status/error is written
* back to userspace, we'll need to fiddle with USB devio internals
* and/or reimplement entirely the frontend of it ourselves. -DaveM *
* The issue is:
*

 *      When an URB is submitted via usbdevicefs it is put onto an
 *      asynchronous queue.  When the URB completes, it may be reaped
 *      via another ioctl.  During this reaping the status is written
 *      back to userspace along with the length of the transfer.
 *
 *      We must translate into 64-bit kernel types so we pass in a kernel
 *      space copy of the usbdevfs_urb structure.  This would mean that we
 *      must do something to deal with the async entry reaping.  First we
 *      have to deal somehow with this transitory memory we've allocated.
 *      This is problematic since there are many call sites from which the
 *      async entries can be destroyed (and thus when we'd need to free up
 *      this kernel memory).  One of which is the close() op of usbdevicefs.
 *      To handle that we'd need to make our own file_operations struct which
 *      overrides usbdevicefs's release op with our own which runs usbdevicefs's
 *      real release op then frees up the kernel memory.
 *
 *      But how to keep track of these kernel buffers?  We'd need to either
 *      keep track of them in some table _or_ know about usbdevicefs internals
 *      (ie. the exact layout of its file private, which is actually defined
 *      in linux/usbdevice_fs.h, the layout of the async queues are private to
 *      devio.c)
 *
 * There is one possible other solution I considered, also involving knowledge
 * of usbdevicefs internals:
 *
 *      After an URB is submitted, we "fix up" the address back to the user
 *      space one.  This would work if the status/length fields written back
 *      by the async URB completion lines up perfectly in the 32-bit type with
 *      the 64-bit kernel type.  Unfortunately, it does not because the iso
 *      frame descriptors, at the end of the struct, can be written back.

*
* I think we'll just need to simply duplicate the devio URB engine here. */

maintainer
#126 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 3 lines · On Thu, 6 Jan 2005 20:51:44 +0100 Andi Kleen <[email protected]> wrote:

DaveM can probably give you more details since he tried unsucessfully to make it work. I think the problem is that there is no enough information for the compat layer to convert everything.

When the usbfs async stuff writes back the status, we are no longer within the original syscall/ioctl execution any more, therefore we don't know if we're doing this for a compat task or not.

Technically we could create a "is_compat_task()" type thing to check but Andi has always been against that and he's given good reasons. I tend to agree with him, especially in that there are valid cases where a compat task might want to make 64-bit system calls (f.e. to support 64-bit process debugging from a 32-bit binary, and this is not fantasy as sparc64 could support this right now)

As mentioned in the code comment, there are also memory management issues. We can cons up a temporary kernel buffer in order to convert the 32-bit structs into 64-bit ones the usbfs code expects, but then we have the issue of whether we can keep that buffer around during the entirety of the async operation and if so who in the world will free it up and how will they know to do so?

Finally there are complications wrt. using a kernel buffer in that we have to thus use set_fs(KERNEL_DS) in order for kernel buffers to be passed into the usbfs routine translated. This means that user space accesses of the actual user buffers wouldn't work, and we thus need to use temporary kernel buffers for that as well. This is also incompatible with the async nature of how usbfs wants to work.

I would suggest something that had a fixed sized and fixed layout status block. Something that doesn't change layout or size on any platform.

It's the pointers all over the place in the usbfs ioctl commands that causes all of the problems. If you split things up into, say, user buffer pointer/len struct and status block struct, it might be a lot easier to support this stuff. But I'm even skeptical about this working.

author
#127 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 11 lines · David S. Miller
Quoted 3 lines · On Thu, 6 Jan 2005 20:51:44 +0100 Andi Kleen <[email protected]> wrote:

DaveM can probably give you more details since he tried unsucessfully to make it work. I think the problem is that there is no enough information for the compat layer to convert everything.

When the usbfs async stuff writes back the status, we are no longer within the original syscall/ioctl execution any more, therefore we don't know if we're doing this for a compat task or not.

[...]

Thanks Dave for the update. I misremembered and I don't think I can fix this up for x86-64. We'll need a new interface of some sort.

-Andi

#128 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 13 lines · Andi Kleen
Quoted 11 lines · David S. Miller
Quoted 3 lines · On Thu, 6 Jan 2005 20:51:44 +0100 Andi Kleen <[email protected]> wrote:

DaveM can probably give you more details since he tried unsucessfully to make it work. I think the problem is that there is no enough information for the compat layer to convert everything.

When the usbfs async stuff writes back the status, we are no longer within the original syscall/ioctl execution any more, therefore we don't know if we're doing this for a compat task or not.

Quoted 4 lines

[...]

Thanks Dave for the update. I misremembered and I don't think I can fix this up for x86-64. We'll need a new interface of some sort.

Poor man way of doing this is just ripping ioctl-related code from usb's devio.c to separate file, and build this file twice, once for native_ioctl and 64bit urb structure, and once for compat_ioctl and 32bit urb structure.

I see no reason why it should not work for apps which submit & reap URBs through 32bit or 64bit API exclusively, without mixing them (and when you mix them, you'll get reasonable error that you did not submit specified URB).

Only problem is that after that USB code "knows" about 32bit API. But it is intention of compat_ioctl, no?
Petr

P.S.: When designing new API, please do not make it unnecessary complicated. USB video needs rather large bandwidth and low latency, so please no ASCII strings, and scatter-gather aware API helps a bit...

#129 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 5 lines · Petr Vandrovec
Quoted 4 lines · Andi Kleen
Quoted 3 lines · David S. Miller

On Thu, 6 Jan 2005 20:51:44 +0100
Andi Kleen <[email protected]> wrote:

Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 3 lines

DaveM can probably give you more details since he tried unsucessfully to make it work. I think the problem is that there is no enough information for the compat layer to convert everything.

When the usbfs async stuff writes back the status, we are no longer within the original syscall/ioctl execution any more, therefore we don't know if we're doing this for a compat task or not.

Ick, yeah, now I remember...

Quoted 3 lines

P.S.: When designing new API, please do not make it unnecessary complicated. USB video needs rather large bandwidth and low latency, so please no ASCII strings, and scatter-gather aware API helps a bit...

In measurements published on linux-usb-devel, pure userspace calls using the current usbfs code generated almost full bandwidth usage (within the hardware limits). So adding the scatter-gather api interface to usbfs wouldn't really provide that much benefit.

And, we can always use help in designing such an API, if you could find someone at your company to help us out in doing so... :)

thanks,

greg k-h

#130 lore raw

Re: [linux-usb-devel] Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 8 lines · Greg KH
Quoted 3 lines

P.S.:  When designing new API, please do not make it unnecessary complicated. USB video needs rather large bandwidth and low latency, so please no ASCII strings, and scatter-gather aware API helps a bit...

In measurements published on linux-usb-devel, pure userspace calls using the current usbfs code generated almost full bandwidth usage (within the hardware limits).  So adding the scatter-gather api interface to usbfs wouldn't really provide that much benefit.

Actually, the measurements I recall were using that nasty usbfs-specific async API ... or using huge buffers with the synchronous/blocking calls, so the hiccups added by scheduling latencies didn't kick in very often.

Quoted 2 lines

And, we can always use help in designing such an API, if you could find someone at your company to help us out in doing so... :)

Or just doing something like gadgetfs, where the standard Linux "libaio" calls work just fine. I was certainly able to stream 24 Mbyte/sec isochronous transfers (that's the top speed possible with one high speed ISO endpoint).

The key point is that one userspace IOCB should map directly to one URB in the kernel; and one userspace file (descriptor) should map to one USB endpoint. For a host side API, it turns out that isochronous URBs already have limited scatter/gather style support -- each one maps to several packets.

I think it'd be best to use the existing AIO support rather than have usbfs2 create yet another USB-specific thing.

- Dave

#131 lore raw

Re: [linux-usb-devel] Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 10 lines · David Brownell
Quoted 8 lines · Greg KH
Quoted 3 lines

P.S.: ?When designing new API, please do not make it unnecessary complicated. USB video needs rather large bandwidth and low latency, so please no ASCII strings, and scatter-gather aware API helps a bit...

In measurements published on linux-usb-devel, pure userspace calls using the current usbfs code generated almost full bandwidth usage (within the hardware limits). ?So adding the scatter-gather api interface to usbfs wouldn't really provide that much benefit.

Quoted 5 lines

Actually, the measurements I recall were using that nasty usbfs-specific async API ... or using huge buffers with the synchronous/blocking calls, so the hiccups added by scheduling latencies didn't kick in very often.

Ah, yeah, that's true.

Quoted 8 lines
Quoted 2 lines

And, we can always use help in designing such an API, if you could find someone at your company to help us out in doing so... :)

Or just doing something like gadgetfs, where the standard Linux "libaio" calls work just fine. I was certainly able to stream 24 Mbyte/sec isochronous transfers (that's the top speed possible with one high speed ISO endpoint).

Quoted 8 lines

The key point is that one userspace IOCB should map directly to one URB in the kernel; and one userspace file (descriptor) should map to one USB endpoint. For a host side API, it turns out that isochronous URBs already have limited scatter/gather style support -- each one maps to several packets.

I think it'd be best to use the existing AIO support rather than have usbfs2 create yet another USB-specific thing.

I completely agree.

greg k-h

#132 lore raw

Re: [discuss] Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Andi Kleen
Quoted 8 lines · Andi Kleen
Quoted 7 lines

* USB. usbfs API is written in a way which does not allow you to safely wrap it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs code itself did not look feasible year ago. Even on current 64bit kernels it is not possible to issue raw USB operations from 32bit apps, and I do not believe that it is going to change - after all, just issuing ioctl through 64bit path from application which is aware of 64bit kernel is quite simple, much simpler than any attempt to make kernel dual-interface.

Quoted 7 lines

Agree that's a problem. We just need an alternative interface here or I try to come up with an x86-64 specific hack (I think it's possible to do the compatibility x86-64 specific, just not in compat code for all architectures who have truly separated user/kernel address spaces)

I hope the USB people will eventually add a better interface here. Greg?

As a quick fix, wouldn't it be easy enough to just mark USBDEVFS_IOCTL as COMPATIBLE_IOCTL()? The number is actually different for 32 and 64 bit kernels, so a 32 bit application that knows about this could use 64 bit data structures and then just call ioctl(fd, USBDEVFS_IOCTL64, data) instead of using a weird hack to achieve exactly the same.
Applications trying to call the 32 bit USBDEVFS_IOCTL would still see -EINVAL because there is no wrapper for this.
Maybe the same can be done for some of the other ioctl calls. It effectively means moving part of the compat layer to user space from fs/compat_ioctl.c, but it appears that applications are already doing this.

	Arnd <><
author
#133 lore raw

Re: [discuss] Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

Quoted 10 lines

As a quick fix, wouldn't it be easy enough to just mark USBDEVFS_IOCTL as COMPATIBLE_IOCTL()? The number is actually different for 32 and 64 bit kernels, so a 32 bit application that knows about this could use 64 bit data structures and then just call ioctl(fd, USBDEVFS_IOCTL64, data) instead of using a weird hack to achieve exactly the same.
Applications trying to call the 32 bit USBDEVFS_IOCTL would still see -EINVAL because there is no wrapper for this.
Maybe the same can be done for some of the other ioctl calls. It effectively means moving part of the compat layer to user space from fs/compat_ioctl.c, but it appears that applications are already doing this.

That's too ugly. We would end up with different ABIs. I don't really want to do that, no.

-Andi

#134 lore raw

Re: [PATCH] macros to detect existance of unlocked_ioctl and ioctl_compat

In reply to Petr Vandrovec

Hi!

Quoted 6 lines
Quoted 6 lines
Quoted 5 lines
Quoted 1 line

It should be, unless there's some problem. In maybe a week or so.

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and ioctl_compat can be easily detected.

Quoted 8 lines
Quoted 2 lines

That's not the way we're making additions. Get your code merged and there won't be any need to detect the feature.

When Greg made sysfs GPL only, I've asked whether it is possible to merge vmmon/vmnet in (and changing its license, of course). Answer on LKML was quite clear: no, you are not interested in having vmmon/vmnet in Linux kernel as you do not believe that they are usable for anything else than VMware.

What about

1) Put vmmon/vmnet under GPL

2) Find some GPL user of vmmon/vmnet

3) Merge should be doable now

Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#135 lore raw

PATCH 1/1 fix: macros to detect existance of unlocked_ioctl and compat_ioctl

In reply to Michael S. Tsirkin

Hi!
I just noticed that my original patch says "ioctl_compat" all over the place while the actual field name in -mm2 is "compat_ioctl". Doh. Here's a replacement patch.
PS. Please dont flame me, I do not maintain out of kernel modules, myself :)

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and compat_ioctl can be easily detected.

include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +6 -0
diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1
+
 /*
  * NOTE:
  * read, write, poll, fsync, readv, writev can be called
#136 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 10 lines · Michael S. Tsirkin

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and compat_ioctl can be easily detected.

diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h

include/linux/fs.h typedef struct { · line 914

Quoted 8 lines
include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +5 -0
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1

No, we do not do that in the kernel today, and I'm pretty sure we don't want to start doing it (it would get _huge_ very quickly...)

Please don't apply this. Remember, out-of-the-tree modules are on their own.

thanks,

greg k-h

author
#137 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 1 line

No, we do not do that in the kernel today, and I'm pretty sure we don't

Actually we do. e.g. take a look at skbuff.h HAVE_* There are other examples too.

Quoted 1 line

want to start doing it (it would get _huge_ very quickly...)

I disagree since the alternative is so ugly.

Quoted 2 lines

Please don't apply this. Remember, out-of-the-tree modules are on their own.

I don't know who made this "policy", but actively sabotating or denying useful facilities to free out of tree modules doesn't seem to be a very wise policy to me.

-Andi

#138 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 8 lines · Andi Kleen
Quoted 1 line

No, we do not do that in the kernel today, and I'm pretty sure we don't

Actually we do. e.g. take a look at skbuff.h HAVE_* There are other examples too.

Quoted 1 line

want to start doing it (it would get _huge_ very quickly...)

I disagree since the alternative is so ugly.

But the main problem with this is, when do we start deleting the HAVE_ symbols? After a relativly short period of time, they become useless, as all kernels of the past year or two have that feature, and why even test for it?

I agree, that for short term, vendor-patched kernels, it's nice to have something like that to try to build your out-of-the-tree module. But move to get that module into the tree, or provide your favorite vendor with the properly patched driver (hey, I can dream...)

And is the alternative (using autoconf to build tiny modules testing for different features) that ugly? Yeah, I hate autoconf too, but I thought that work (kernel feature testing in autoconf) has already been done, right?

Quoted 6 lines
Quoted 2 lines

Please don't apply this. Remember, out-of-the-tree modules are on their own.

I don't know who made this "policy", but actively sabotating or denying useful facilities to free out of tree modules doesn't seem to be a very wise policy to me.

I'm not trying to sabotage anything, I just don't want the maintaince of a zillion HAVE_ macros to slowly overrun us until we drown under the weight. All to support some looney, ill-informed vendor that can never get around to submitting their driver to mainline.

And as for that "policy", it's been stated in public by Andrew and Linus and me (if I count for anything, doubtful...) a number of documented times.

thanks,

greg k-h

#139 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 7 lines · Greg KH
Quoted 5 lines · Andi Kleen
Quoted 1 line

No, we do not do that in the kernel today, and I'm pretty sure we don't

Actually we do. e.g. take a look at skbuff.h HAVE_* There are other examples too.

Quoted 6 lines
Quoted 3 lines
Quoted 1 line

want to start doing it (it would get _huge_ very quickly...)

I disagree since the alternative is so ugly.

But the main problem with this is, when do we start deleting the HAVE_ symbols?

This is a self-correcting system. If the symbols are so offensive, someone will get offended and will submit a patch to delete them at the appropriate time. If they're not so offensive then we've nothing to care about.

Quoted 4 lines

...
And as for that "policy", it's been stated in public by Andrew and Linus and me (if I count for anything, doubtful...) a number of documented times.

not me ;) It's two lines of code and makes things much simpler for the users of our work. Seems a no-brainer.

And practically speaking, we don't make such fundamental driver-visible changes _that_ often - if we end up getting buried under a proliferation of HAVE_FOO macros, then the presence of the macros is the least of our problems, yes?

#140 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 8 lines · Andrew Morton
Quoted 4 lines · Greg KH

...
And as for that "policy", it's been stated in public by Andrew and Linus and me (if I count for anything, doubtful...) a number of documented times.

not me ;) It's two lines of code and makes things much simpler for the users of our work. Seems a no-brainer.

Sorry, the "policy" I was referring to was the "out-of-the-tree drivers are on their own" statement. Not the use of the HAVE macros.

Quoted 4 lines

And practically speaking, we don't make such fundamental driver-visible changes _that_ often - if we end up getting buried under a proliferation of HAVE_FOO macros, then the presence of the macros is the least of our problems, yes?

Ok, but can someone add a section in the feature-removal-schedule.txt file about when these specific macros will be removed? They must be created with some specific use in mind, right?

thanks,

greg k-h

#141 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

[ Cc:s trimmed a little ]

Quoted 2 lines · Greg KH

Sorry, the "policy" I was referring to was the "out-of-the-tree drivers are on their own" statement. Not the use of the HAVE macros.

Not all users of kernel code are in- or out-of-tree drivers and the like. E.g. tcsim (from tcng.sf.net) grabs substantial portions of the traffic control and netlink code and merges them with user space. It also tries to be compatible with most 2.4 kernels.

For feature tests, I use basically anything that doesn't run away quickly enough. And I'm sure you want none of *that* kind of code anywhere near mainline ;-)

Not that I currently have more troubles with it than usually. I just want to point out that there are other, strange but legitimate (at least in the "all shall eventually be GPL" sense) users of the kernel, who don't mind a friendly environment.

- Werner

Signature · 3 lines
  _________________________________________________________________________
 / Werner Almesberger, Buenos Aires, Argentina         [email protected] /
/_http://www.almesberger.net/____________________________________________/
#142 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

In reply to Greg KH
Quoted 23 lines · Greg KH
Quoted 10 lines · Michael S. Tsirkin

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and compat_ioctl can be easily detected.

diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h

include/linux/fs.h typedef struct { · line 914

Quoted 8 lines
include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +5 -0
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1

No, we do not do that in the kernel today, and I'm pretty sure we don't want to start doing it (it would get _huge_ very quickly...)

Quoted 2 lines

Please don't apply this. Remember, out-of-the-tree modules are on their own.

Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go into the core kernel, but usually the time between some code being developed and when it is included is lengthy (i.e. "this feature won't be accepted until lots of people use it").

You can't claim that this has never been done (e.g. KERNEL_HAS_O_DIRECT, KERNEL_HAS_DIRECT_FILEIO in 2.4 kernels). For code that needs to handle multiple kernel versions this makes life far easier and doesn't actually hurt anything. It used to be that you could use LINUX_VERSION_CODE for this kind of check, but that breaks down quickly with vendor kernels and the long development cycle.

Cheers, Andreas
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://members.shaw.ca/adilger/ http://members.shaw.ca/golinux/

#143 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

Quoted 24 lines · Andreas Dilger
Quoted 23 lines · Greg KH
Quoted 10 lines · Michael S. Tsirkin

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and compat_ioctl can be easily detected.

diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h

include/linux/fs.h typedef struct { · line 914

Quoted 8 lines
include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +5 -0
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1

No, we do not do that in the kernel today, and I'm pretty sure we don't want to start doing it (it would get _huge_ very quickly...)

Quoted 7 lines
Quoted 2 lines

Please don't apply this. Remember, out-of-the-tree modules are on their own.

Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go into the core kernel, but usually the time between some code being developed and when it is included is lengthy (i.e. "this feature won't be accepted until lots of people use it").

I understand that, but for stuff like that, isn't it easier to just test for VERSION? Or use autoconf?

Quoted 2 lines

You can't claim that this has never been done (e.g. KERNEL_HAS_O_DIRECT, KERNEL_HAS_DIRECT_FILEIO in 2.4 kernels).

That was because of the backport mess that 2.4 went through and vendor kernels, right?

Quoted 5 lines

For code that needs to handle
multiple kernel versions this makes life far easier and doesn't actually hurt anything. It used to be that you could use LINUX_VERSION_CODE for this kind of check, but that breaks down quickly with vendor kernels and the long development cycle.

What long development cycle? The out-of-the-tree stuff? Or the kernel development stuff?

My main issue is when would we ever be able to remove such HAS macros?

And who specifically will be testing for these HAVE_COMPAT_IOCTL and HAVE_UNLOCKED_IOCTL macros? Will that code make it into the main tree ever? If not, why not?

thanks,

greg k-h

#144 lore raw

Re: [PATCH] fix: macros to detect existance of unlocked_ioctl and compat_ioctl

At Wed, 12 Jan 2005 14:58:19 -0800,

Quoted 37 lines · Greg KH
Quoted 24 lines · Andreas Dilger
Quoted 23 lines · Greg KH
Quoted 10 lines · Michael S. Tsirkin

To make life bearable for out-of kernel modules, the following patch adds 2 macros so that existance of unlocked_ioctl and compat_ioctl can be easily detected.

diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h

include/linux/fs.h typedef struct { · line 914

Quoted 8 lines
include/linux/fs.h renamed from include/linux/fs.h~ioctl-rework +5 -0
@@ -907,6 +907,12 @@ typedef struct {
 
 typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
 
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1

No, we do not do that in the kernel today, and I'm pretty sure we don't want to start doing it (it would get _huge_ very quickly...)

Quoted 7 lines
Quoted 2 lines

Please don't apply this. Remember, out-of-the-tree modules are on their own.

Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go into the core kernel, but usually the time between some code being developed and when it is included is lengthy (i.e. "this feature won't be accepted until lots of people use it").

I understand that, but for stuff like that, isn't it easier to just test for VERSION? Or use autoconf?

Quoted 8 lines
Quoted 5 lines

For code that needs to handle
multiple kernel versions this makes life far easier and doesn't actually hurt anything. It used to be that you could use LINUX_VERSION_CODE for this kind of check, but that breaks down quickly with vendor kernels and the long development cycle.

What long development cycle? The out-of-the-tree stuff? Or the kernel development stuff?

I guess the latter. Imagine that the stuff already exists in mm tree but the merge to the maintree is delayed. In this case, KERNEL_VERSION check doesn't work reliably. But, it's a rare case, AFAIK.

Quoted 1 line

My main issue is when would we ever be able to remove such HAS macros?

Here I agree with Greg. It'll be difficult to remove it once after added. Nobody knows whether the external stuff still refers to it or not...

Quoted 3 lines

And who specifically will be testing for these HAVE_COMPAT_IOCTL and HAVE_UNLOCKED_IOCTL macros? Will that code make it into the main tree ever? If not, why not?

ALSA, for example, still offers for 2.2, 2.4 and older 2.6 kernels. So it requires checks for such kernel API changes. I would do this via autoconf without problem if HAS_* isn't introduced, though.

Takashi

#145 lore raw

2.6.10-mm2

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

Changes since 2.6.10-mm1:

linus.patch
bk-acpi.patch
bk-alsa.patch
bk-arm.patch
bk-cifs.patch
bk-cpufreq.patch
bk-drm-via.patch
bk-i2c.patch
bk-ia64.patch
bk-ide-dev.patch
bk-dtor-input.patch
bk-kconfig.patch
bk-netdev.patch
bk-ntfs.patch
bk-pci.patch
bk-scsi.patch

Latext versions of various bk trees.

-expose-reiserfs_sync_fs.patch
-fix-reiserfs-quota-debug-messages.patch
-fix-of-quota-deadlock-on-pagelock-quota-core.patch
-vfs_quota_off-oops-fix.patch
-quota-umount-race-fix.patch
-fix-of-quota-deadlock-on-pagelock-ext2.patch
-fix-of-quota-deadlock-on-pagelock-ext2-tweaks.patch
-fix-of-quota-deadlock-on-pagelock-ext3.patch
-fix-of-quota-deadlock-on-pagelock-ext3-tweaks.patch
-fix-of-quota-deadlock-on-pagelock-reiserfs.patch
-fix-of-quota-deadlock-on-pagelock-reiserfs-fix.patch -reiserfs-bug-fix-do-not-clear-ms_active-mount-flag.patch
-allow-disabling-quota-messages-to-console.patch
-vmscan-total_scanned-fix.patch
-cs461x-gameport-code-isnt-being-included-in-build.patch
-mm-keep-count-of-free-areas.patch
-mm-higher-order-watermarks.patch
-mm-higher-order-watermarks-fix.patch
-mm-teach-kswapd-about-higher-order-areas.patch
-simplified-readahead.patch
-simplified-readahead-fix.patch
-simplified-readahead-cleanups.patch
-readahead-congestion-control.patch
-mempolicy-optimization.patch
-mm-overcommit-updates.patch
-kill-off-highmem_start_page.patch
-make-sure-ioremap-only-tests-valid-addresses.patch
-mark_page_accessed-for-reads-on-non-page-boundaries.patch
-do_anonymous_page-use-setpagereferenced.patch
-slab-add-more-arch-overrides-to-control-object-alignment.patch -collect-page_states-only-from-online-cpus.patch
-collect-page_states-only-from-online-cpus-tidy.patch
-alloc_large_system_hash-numa-interleaving.patch
-filesystem-hashes-numa-interleaving.patch
-tcp-hashes-numa-interleaving.patch
-netfilter-fix-return-values-of-ipt_recent-checkentry.patch -netfilter-fix-ip_conntrack_proto_sctp-exit-on-sysctl.patch -netfilter-fix-ip_ct_selective_cleanup-and-rename.patch -netfilter-add-comment-above-remove_expectations-in.patch -netfilter-remove-ipchains-and-ipfwadm-compatibility.patch -netfilter-remove-copy_to_user-warnings-in-netfilter.patch -netfilter-fix-cleanup-in-ipt_recent-should-ipt_registrater_match-error.patch -fix-broken-rst-handling-in-ip_conntrack.patch
-ppc32-freescale-book-e-mmu-cleanup.patch
-ppc32-refactor-common-book-e-exception-code.patch
-ppc32-switch-to-kbuild_defconfig.patch
-ppc32-marvell-host-bridge-support-mv64x60.patch
-ppc32-marvell-host-bridge-support-mv64x60-review-fixes.patch -ppc32-support-for-marvell-ev-64260-bp-eval-platform.patch
-ppc32-support-for-force-cpci-690-board.patch
-ppc32-support-for-artesyn-katana-cpci-boards.patch -ppc32-add-support-for-ibm-750fx-and-750gx-eval-boards.patch
-ppc32-ppc4xx-pic-rewrite-cleanup.patch
-ppc32-performance-monitor-oprofile-support-for-e500.patch -ppc32-performance-monitor-oprofile-support-for-e500-review-fixes.patch
-ppc32-fix-ebonyc-warnings.patch
-ppc32-remove-bogus-sprn_cpc0_gpio-define.patch
-ppc32-debug-setcontext-syscall-implementation.patch
-ppc32-add-uimage-to-default-targets.patch
-ppc32-fix-io_remap_page_range-for-36-bit-phys-platforms.patch -ppc32-resurrect-documentation-powerpc-cpu_featurestxt.patch
-ppc64-kprobes-implementation.patch
-ppc64-tweaks-to-cpu-sysfs-information.patch
-kprobes-wrapper-to-define-jprobeentry.patch
-termio-userspace-access-error-handling.patch
-ide_arch_obsolete_init-fix.patch
-out-of-line-implementation-of-find_next_bit.patch
-gp-rel-data-support.patch
-gp-rel-data-support-vs-bk-kbuild-fix.patch
-vm-routine-fixes.patch
-vm-routine-fixes-CONFIG_SHMEM-fix.patch
-frv-fujitsu-fr-v-cpu-arch-maintainer-record.patch
-frv-fujitsu-fr-v-arch-documentation.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-1.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-2.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-3.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-4.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-5.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-6.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-7.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-8.patch
-frv-fujitsu-fr-v-cpu-arch-implementation-part-9.patch -put-memory-in-dma-zone-not-normal-zone-in-frv-arch.patch
-frv-kill-off-highmem_start_page.patch
-frv-first-batch-of-fujitsu-fr-v-arch-include-files.patch -frv-remove-obsolete-hardirq-stuff-from-includes.patch
-frv-pci-dma-fixes.patch
-fix-frv-pci-config-space-write.patch
-frv-more-fujitsu-fr-v-arch-include-files.patch
-convert-frv-to-use-remap_pfn_range.patch
-frv-yet-more-fujitsu-fr-v-arch-include-files.patch
-frv-remaining-fujitsu-fr-v-arch-include-files.patch
-frv-make-calibrate_delay-optional.patch
-frv-better-mmap-support-in-uclinux.patch
-frv-procfs-changes-for-nommu-changes.patch
-frv-change-setup_arg_pages-to-take-stack-pointer.patch -frv-change-setup_arg_pages-to-take-stack-pointer-fixes.patch
-frv-add-fdpic-elf-binary-format-driver.patch
-fix-some-elf-fdpic-binfmt-problems.patch
-further-nommu-changes.patch
-further-nommu-proc-changes.patch
-frv-arch-nommu-changes.patch
-make-more-syscalls-available-for-the-fr-v-arch.patch
-frv-debugging-fixes.patch
-frv-minix-ext2-bitops-fixes.patch
-frv-perfctr_info-syscall.patch
-frv-update-the-trap-tables-comment.patch
-frv-accidental-tlb-entry-write-protect-fix.patch
-frv-pagetable-handling-fixes.patch
-frv-fr55x-cpu-support-fixes.patch
-implement-nommu-find_vma.patch
-fix-nommu-map_shared-handling.patch
-permit-nommu-map_shared-of-memory-backed-files.patch
-cross-reference-nommu-vmas-with-mappings.patch
-assign-pkmap_base-dynamically.patch
-x86-remove-data-header-and-code-overlap-in-boot-setups.patch
-cyrix-mii-cpuid-returns-stale-%ecx.patch
-nx-fix-noexec-kernel-parameter.patch
-nx-triple-fault-with-4k-kernel-mappings-and-pae.patch
-trivial-cleanup-in-arch-i386-kernel-heads.patch
-remove-pfn_to_pgdat-on-x86.patch
-boot_ap_for_nondefault_kernel.patch
-i386-boot-loader-ids.patch
-proc-sys-kernel-bootloader_type.patch
-intel-thermal-monitor-for-x86_64.patch
-x86_64-do_general_protection-retval-check.patch
-x86_64-add-a-real-pfn_valid.patch
-x86_64-fix-bugs-in-the-amd-k8-cmp-support-code.patch -x86_64-fix-bugs-in-the-amd-k8-cmp-support-code-fix.patch
-x86_64-reenable-mga-dri-on-x86-64.patch
-x86_64-remove-duplicated-fake_stack_frame-macro.patch
-x86_64-remove-bios-reboot-code.patch
-x86_64-add-reboot=force.patch
-x86_64-collected-ioremap-fixes.patch
-x86_64-handle-nx-correctly-in-pageattr.patch
-x86_64-split-acpi-boot-table-parsing.patch
-x86_64-split-acpi-boot-table-parsing-fix.patch
-x86_64-add-srat-numa-discovery-to-x86-64.patch
-x86_64-update-uptime-after-suspend.patch
-x86_64-allow-a-kernel-debugger-to-hide-single-steps-in.patch -x86_64-remove-debug-information-for-vsyscalls.patch
-x86_64-rename-htvalid-to-cmp_legacy.patch
-x86_64-scheduler-support-for-amd-cmp.patch
-x86_64-add-a-missing-__iomem-pointed-out-by-linus.patch
-x86_64-add-a-missing-newline-in-proc-cpuinfo.patch
-x86_64-always-print-segfaults-for-init.patch
-x86_64-export-phys_proc_id.patch
-x86_64-allow-to-configure-more-cpus-and-nodes.patch
-x86_64-allow-to-configure-more-cpus-and-nodes-fix.patch -x86_64-fix-a-warning-in-the-cmp-support-code-for.patch -x86_64-fix-some-outdated-assumptions-that-cpu-numbers.patch
-x86_64-fix-em64t-config-description.patch
-x86_64-remove-unneeded-ifdef-in-hardirqh.patch
-x86_64-add-slit-inter-node-distance-information-to.patch -x86_64-add-x86_64-support-for-jack-steiners-slit-sysfs.patch -x86_64-eliminate-some-useless-printks-in-acpi-numac.patch
-h8-300-new-systemcall-support.patch
-arm26-remove-arm32-cruft.patch
-arm26-update-the-atomic-ops.patch
-arm26-build-system-updates.patch
-arm26-update-comments-headers-notes.patch
-arm26-necessary-compilation-fixes-for-2610.patch
-arm26cleanup-trap-handling-assembly.patch
-arm26-new-execve-code.patch
-arm26-move-some-files-to-better-locations.patch
-arm26-remove-shark-arm32-from-arm26.patch
-arm26-softirq-update.patch
-arm26-update-systemh-to-some-semblance-of-recentness.patch -arm26-replace-arm32-time-handling-code-with-smaller-version.patch
-arm26-tlb-update.patch
-arm26-better-put_user-macros.patch
-arm26-better-unistdh-reimplemented-based-on-arm32.patch
-ia64-remove-hcdp-support-for-early-printk.patch
-typeofdev-powersaved_state.patch
-fix-naming-in-swsusp.patch
-swsusp-kill-unused-variable.patch
-swsusp-kill-one-line-helpers-handle-read-errors.patch
-swsusp-small-cleanups.patch
-swsusp-kill-on2-algorithm-in-swsusp.patch
-swsusp-try_to_freeze-to-make-freezing-hooks-nicer.patch -swsusp-try_to_freeze-to-make-freezing-hooks-nicer-fix.patch
-m32r-add-new-relocation-types-to-elfh.patch
-m32r-support-pgprot_noncached.patch
-m32r-update-ptracec-for-multithread.patch
-m32r-fix-not-to-execute-noexec-pages-0-3.patch
-m32r-cause-sigsegv-for-nonexec-page.patch
-m32r-dont-encode-ace_instruction-in.patch
-m32r-clean-up-arch-m32r-mm-faultc-3-3.patch
-m32r-clean-up-include-asm-m32r-pgtableh.patch
-m32r-support-page_none-1-3.patch
-m32r-remove-page_user-2-3.patch
-m32r-clean-up.patch
-m32r-include-asm-m32r-thread_infoh-minor.patch
-m32r-use-kmalloc-for-m32r-stacks-2-2.patch
-m32r-make-kernel-headers-for-mutual.patch
-m32r-use-generic-hardirq-framework.patch
-m32r-update-include-asm-m32r-systemh.patch
-m32r-update-include-asm-m32r-mmu_contexth.patch
-uml-remove-most-devfs_mk_symlink-calls.patch
-uml-fix-__wrap_free-comment.patch
-uml-fix-some-ptrace-functions-returns-values.patch
-uml-redo-the-signal-delivery-mechanism.patch
-uml-make-restorer-match-i386.patch
-uml-unistdh-cleanup.patch
-uml-remove-a-quilt-induced-duplicity.patch
-uml-fix-sigreturn-to-not-copy_user-under-a-spinlock.patch
-uml-close-host-file-descriptors-properly.patch
-uml-free-host-resources-associated-with-freed-irqs.patch
-uml-unregister-signal-handlers-at-reboot.patch
-hostfs-uml-set-sendfile-to-generic_file_sendfile.patch
-hostfs-uml-add-some-other-pagecache-methods.patch
-uml-terminal-cleanup.patch
-uml-first-part-rework-of-run_helper-and-users.patch
-uml-finish-fixing-run_helper-failure-path.patch
-uml-add-elf-vsyscall-support.patch
-uml-make-vsyscall-page-into-process-page-tables.patch
-uml-include-vsyscall-page-in-core-dumps.patch
-uml-add-tracesysgood-support.patch
-uml-kill-host-processes-properly.patch
-uml-defconfig-update.patch
-uml-small-vsyscall-fixes.patch
-uml-export-end_iomem.patch
-uml-system-call-restart-fixes.patch
-uml-fix-setting-of-tif_sigpending.patch
-uml-allow-vsyscall-code-to-build-on-24.patch
-uml-sysemu-fixes.patch
-uml-correctly-restore-extramask-in-sigreturn.patch
-uml-fix-update_process_times-call.patch
-uml-detect-sysemu_singlestep.patch
-uml-use-sysemu_singlestep.patch
-uml-declare-ptrace_setfpregs.patch
-uml-remove-bogus-__nr_sigreturn-check.patch
-uml-fix-highmem-compilation.patch
-uml-symbol-export.patch
-uml-fix-umldir-init-order.patch
-uml-raise-tty-limit.patch
-uml-sysfs-support-for-uml-network-driver.patch
-uml-sysfs-support-for-the-uml-block-devices.patch
-s390-remove-compat-setup_arg_pages32.patch
-s390-core-patches.patch
-s390-common-i-o-layer.patch
-s390-network-device-driver-patches.patch
-s390-dasd-driver.patch
-s390-character-device-drivers.patch
-s390-dcss-driver-cleanup-fix.patch
-s390-sclp-device-driver-cleanup.patch
-enhanced-i-o-accounting-data-patch.patch
-enhanced-memory-accounting-data-collection.patch
-enhanced-memory-accounting-data-collection-tidy.patch
-4-4gb-incorrect-bound-check-in-do_getname.patch
-handle-quoted-module-parameters.patch
-move-irq_enter-and-irq_exit-to-common-code.patch
-remove-unused-irq_cpustat-fields.patch
-hold-bkl-for-shorter-period-in-generic_shutdown_super.patch
-cleanups-for-the-ipmi-driver.patch
-kill-blkh.patch
-ext3-cleanup-handling-of-aborted-transactions.patch
-ext3-handle-attempted-delete-of-bitmap-blocks.patch
-ext3-handle-attempted-double-delete-of-metadata.patch
-cpumask_t-initializers.patch
-time-run-too-fast-after-s3.patch
-fork-total_forks-not-counted-under-tasklist_lock.patch
-suppress-might_sleep-if-oopsing.patch
-file-sync-no-i_sem.patch
-ext3-support-for-ea-in-inode.patch
-ext3-support-for-ea-in-inode-warning-fix.patch
-off-by-one-in-drivers-parport-probec.patch
-compile-with-ffreestanding.patch
-sys_stime-needs-a-compat-function.patch
-sys_stime-needs-a-compat-function-update.patch
-sync-in-core-time-granuality-with-filesystems.patch -sync-in-core-time-granuality-with-filesystems-sonypi-fix.patch
-remove-ip2-programs.patch
-rcu-eliminate-rcu_ctrlblklock.patch
-rcu-make-two-internal-structs-static.patch
-rcu-simplify-quiescent-state-detection.patch
-smb_file_open-retval-fix.patch
-sys_sched_setaffinity-on-up-should-fail-for-non-zero.patch
-make-gconfig-work-with-gtk-24.patch
-edd-add-edd=off-and-edd=skipmbr-options.patch
-panic_timeout-move-to-kernelh.patch
-add-pr_get_name.patch
-fix-alt-sysrq-deadlock.patch
-cpumask-range-check-before-using-value.patch
-noop-iosched-make-code-static.patch
-noop-iosched-remove-unused-includes.patch
-loop-device-recursion-avoidance.patch
-noone-uses-have_arch_si_codes-or-have_arch_sigevent_t.patch
-get_blkdev_list-cleanup.patch
-ext-apply-umask-to-symlinks-with-acls-configured-out.patch
-fix-missing-wakeup-in-ipc-sem.patch
-irq-resource-deallocation-acpi.patch
-irq-resource-deallocation-ia64.patch
-__getblk_slow-can-loop-forever-when-pages-are-partially.patch
-remove-rcu-abuse-in-cpu_idle.patch
-remove-rcu-abuse-in-cpu_idle-warning-fix.patch
-udf-simplify-udf_iget-fix-race.patch
-udf-fix-reservation-discarding.patch
-remove-dead-ext3_put_inode-prototype.patch
-compat-sigtimedwait.patch
-compat-sigtimedwait-sparc64-fix.patch
-compat-sigtimedwait-ppc64-fix.patch
-msync-set-PF_SYNCWRITE.patch
-prio_tree-roll-call-to-prio_tree_first-into-prio_tree_next.patch
-prio_tree-generalization.patch
-prio_tree-move-general-code-from-mm-to-lib.patch
-lcd-fix-memory-leak-code-cleanup.patch
-fix-conflicting-cpu_idle-declarations.patch
-removes-redundant-sys_delete_module.patch
-fix-stop-signal-race.patch
-move-group_exit-flag-into-signal_structflags-word.patch
-fix-ptracer-death-race-yielding-bogus-bug_on.patch -move-waitchld_exit-from-task_struct-to-signal_struct.patch
-task_structexit_state-usage.patch
-trivial-uninline-kill-__exit_mm.patch
-#optimize-__make_request-a-little.patch
-selinux-scalability-add-spin_trylock_irq-and.patch
-selinux-scalability-convert-avc-to-rcu.patch
-selinux-scalability-convert-avc-to-rcu-fix.patch
-selinux-atomic_dec_and_test-bug.patch
-selinux-scalability-avc-statistics-and-tuning.patch
-selinux-regenerate-selinux-module-headers.patch
-selinux-update-selinux_task_setscheduler.patch
-selinux-audit-task-comm-if-exe-cannot-be-determined.patch -selinux-add-dynamic-context-transition-support-to-selinux.patch -selinux-enhance-selinux-control-of-executable-mappings.patch
-selinux-add-member-node-to-selinuxfs.patch
-selinux-eliminate-unaligned-accesses-by-policy-loading-code.patch -oprofile-add-check_user_page_readable.patch
-oprofile-arch-independent-code-for-stack-trace.patch -oprofile-arch-independent-code-for-stack-trace-rename-timer_init.patch
-oprofile-timer-backtrace-fix-2.patch
-oprofile-i386-support-for-stack-trace-sampling.patch -oprofile-i386-support-for-stack-trace-sampling-cleanup.patch -oprofile-i386-support-for-stack-trace-sampling-fix.patch -oprofile-ia64-support-for-oprofile-stack-trace.patch
-oprofile-update-alpha-for-api-changes.patch
-oprofile-update-arm-for-api-changes.patch
-oprofile-update-ppc-for-api-changes.patch
-oprofile-update-parisc-for-api-changes.patch
-oprofile-update-s390-for-api-changes.patch
-oprofile-update-sh-for-api-changes.patch
-oprofile-update-sparc64-for-api-changes.patch
-oprofile-minor-cleanups.patch
-knfsd-nfsd_translate_wouldblocks.patch
-knfsd-svcrpc-auth_null-fixes.patch
-knfsd-svcrpc-share-code-duplicated-between-auth_unix-and-auth_null.patch -knfsd-nfsd4-fix-open_downgrade-decode-error.patch -knfsd-rpcsec_gss-comparing-pointer-to-0-instead-of-null.patch -knfsd-nfsd4-fix-fileid-in-readdir-responses.patch -knfsd-nfsd4-use-the-fsid-export-option-when-returning-the-fsid-attribute.patch -knfsd-nfsd4-encode_dirent-cleanup.patch
-knfsd-nfsd4-encode_dirent-superfluous-assignment.patch -knfsd-nfsd4-encode_dirent-superfluous-local-variables.patch -knfsd-nfsd4-encode_dirent-more-readdir-attribute-encoding-to-new-function.patch -knfsd-nfsd4-encode_dirent-simplify-nfs4_encode_dirent_fattr.patch -knfsd-nfsd4-encode_dirent-move-rdattr_error-code-to-new-function.patch -knfsd-nfsd4-encode_dirent-simplify-error-handling.patch -knfsd-nfsd4-encode_dirent-simplify-control-flow.patch
-knfsd-nfsd4-encode_dirent-fix-dropit-return.patch
-knfsd-nfsd4-encode_dirent-trivial-cleanup.patch -knfsd-move-nfserr_openmode-checking-from-nfsd_read-write-into-nfs4_preprocess_stateid_op-in-preperation-for-delegation-state.patch -knfsd-check-the-callback-netid-in-gen_callback.patch
-knfsd-count-the-nfs4_client-structure-usage.patch -knfsd-preparation-for-delegation-client-callback-probe.patch -knfsd-preparation-for-delegation-client-callback-probe-warning-fixes.patch -knfsd-probe-the-callback-path-upon-a-successful-setclientid_confirm.patch -knfsd-check-for-existence-of-file_lock-parameter-inside-of-the-kernel-lock.patch -knfsd-get-rid-of-the-special-delegation_stateid_t-use-the-existing-stateid_t.patch -knfsd-add-structures-for-delegation-support.patch -knfsd-allocate-and-initialize-the-delegation-structure.patch -knfsd-find-a-delegation-for-a-file-given-a-stateid.patch -knfsd-add-the-delegation-release-and-free-functions.patch
-knfsd-changes-to-expire_client.patch
-knfsd-delay-nfsd_colse-for-delegations-until-reaping.patch
-knfsd-delegation-recall-callback-rpc.patch
-knfsd-kernel-thread-for-delegation-callback.patch -knfsd-helper-functions-for-deciding-to-grant-a-delegation.patch
-knfsd-attempt-to-hand-out-a-delegation.patch
-knfsd-remove-unnecessary-stateowner-existence-check.patch -knfsd-check-for-openmode-violations-given-a-delegation-stateid.patch -knfsd-add-checking-of-delegation-stateids-to-nfs4_preprocess_stateid_op.patch -knfsd-add-the-delegreturn-operation.patch
-knfsd-add-to-the-laundromat-service-for-delegations.patch -knfsd-clear-the-recall_lru-of-delegations-at-shutdown.patch
-invalidate_inodes-speedup.patch
-linux-2.6.8.1-49-rpc_workqueue.patch
-linux-2.6.8.1-50-rpc_queue_lock.patch
-fbdev-sis-framebuffer-driver-update-1717.patch
-fbdev-sysfs-fix.patch
-pm2fb-module-parameters-and-module-conditional-code.patch
-pm2fb-save-restore-memory-config.patch
-pm2fb-use-modedb-in-modules.patch
-pm2fb-fix-big-endian-sparc-support.patch
-pm2fb-fix-fbi-image-display-on-24-bit-depth-big-endian.patch -fix-rom-enable-disable-in-r128-and-radeon-fb-drivers.patch
-fbdev-cleanup-i2c-code-of-rivafb.patch
-fbdev-revive-bios-less-booting-for-rage-xl-cards.patch
-fbdev-revive-global_mode_option.patch
-fbcon-fbdev-add-blanking-notification.patch
-fbcon-fbdev-add-blanking-notification-fix.patch
-fbdev-check-return-value-of-fb_add_videomode.patch -fbdev-do-a-symbol_put-for-each-symbol_get-in-savagefb.patch -fbdev-add-viewsonic-pf775a-to-broken-display-database.patch
-fbdev-fix-default-timings-in-vga16fb.patch
-fbdev-reduce-stack-usage-of-intelfb.patch
-zr36067-driver-correct-jpeg-app-com-markers.patch
-zr36067-driver-ppc-be-port.patch
-zr36067-driver-reduce-stack-size-usage.patch

Merged

+gfp_zero-pktcdvd-fix.patch

Fix the __GFP_ZERO stuff

+s390-add-missing-pte_read-function.patch

s/390 build fix

+mmc-build-fix.patch

drivers/mmc build fix

+bk-acpi-revert-20041210.patch

Remove bad patch from bk-acpi.

+acpi-kfree-fix.patch

Might fix an acpi bug.

+agpgart-allow-multiple-backends-to-be-initialized.patch +drm-add-support-for-new-multiple-agp-bridge-agpgart-api.patch +fb-add-support-for-new-multiple-agp-bridge-agpgart-api.patch +agpgart-add-bridge-parameter-to-driver-functions.patch

Support for multiple AGP bridges.

+x86_64-agp-hack.patch

Hack it (badly) to make x86_64 compile.

+vmscan-count-writeback-pages-in-nr_scanned.patch

page reclaim fix

-xircom_tulip_cb-build-fix-warning-fix.patch

Folded into xircom_tulip_cb-build-fix.patch

+add-omap-support-to-smc91x-ethernet-driver.patch +restore-net-sched-iptc-after-iptables-kmod-cleanup.patch +netfilter-ipt-build-fix.patch

net fixes

+split-bprm_apply_creds-into-two-functions.patch +merge-_vm_enough_memorys-into-a-common-helper.patch

security work

+ppc64-add-performance-monitor-register-information-to-processorh.patch +ppc64-use-newer-rtas-call-when-available.patch +ppc64-clean-up-trap-handling.patch +ppc64-clean-up-trap-handling-in-heads.patch +ppc64-log-machine-check-errors-to-error-log-and-nvram.patch +ppc64-iommu-cleanups-rename-pci_dma_directc.patch +ppc64-iommu-cleanups-main-cleanup-patch.patch

ppc64 updates

+dmi_iterate-fix.patch

dmi oops fix

+arch-i386-kernel-cpu-mtrr-too-many-bits-are-masked-off-from-cr4.patch

x86 mtrr fix

+pm-introduce-pm_message_t.patch +mark-older-power-managment-as-deprecated.patch +swsusp-device-power-management-fix.patch +swsusp-properly-suspend-and-resume-all-devices.patch

swsusp updates

+request_irq-avoid-slash-in-proc-directory-entries.patch

Don't try to create /proc files which contain slashes

+prohibit-slash-in-proc-directory-entry-names.patch

Error out if someone tries to do it again.

+speedup-proc-pid-maps.patch

Optimise /proc/pid/maps

+fix-cdrom-autoclose.patch

cdrom fix

+move-accounting-function-calls-out-of-critical-vm-code-paths.patch

Speed up the new accounting code.

-ioctl-rework.patch
+ioctl-rework-2.patch

New version of the patch which permits bkl-less ioctl implementations.

+fix-__ptrace_unlink-task_traced-recovery-for-real-parent.patch +fix-coredump_wait-deadlock-with-ptracer-tracee-on-shared-mm.patch

More ptrace fixes from Roland.

+oprofile-fix-ia64-callgraph-bug-with-old-gcc.patch

oprofile fix

+nfsd4_setclientid_confirm-locking-fix.patch

Fix the new nfsd code.

+sched-remove-outdated-misleading-comments.patch

Fix CPU scheduler comments

+debug-sched-domains-before-attach.patch

CPU scheduler debugging

+replace-numnodes-with-node_online_map-ia64-fix.patch

Fix replace-numnodes-with-node_online_map-ia64.patch

+replace-numnodes-with-node_online_map-fix.patch

Fix replace-numnodes-with-node_online_map.patch

+block2mtd-avoid-touching-truncate_count.patch

Don't play with ->truncate_count - it is going away.

+cpu_idle-smp_processor_id-warning-fix.patch

Avoid an "smp_processor_id in preemptible code" warning.

+add-page-becoming-writable-notification-build-fix.patch

Fix add-page-becoming-writable-notification-fix.patch

+kexec-kexecx86_64-4level-fix-unfix.patch

Hack to make x86_64 compile. Will break kexec.

-reiser4-unstatic-kswapd.patch

Hopefully not needed.

+generic-serial-cli-conversion.patch
+specialix-io8-cli-conversion.patch
+rio-cli-conversion.patch
+rio_linux-64-bit-workaround.patch
+sx-cli-conversion.patch

De-cli()ify a few char drivers.

+fbdev-rivafb-should-recognize-nf2-igp.patch

New PCI ID.

+bug-on-error-handlings-in-ext3-under-i-o-failure.patch +bug-on-error-handlings-in-ext3-under-i-o-failure-fix.patch

Fix ext3 I/O error handling.

+cputime-introduce-cputime-vs-move-accounting-function-calls-out-of-critical-vm-code-paths.patch

Fix the cputime patches for the I/O accounting speedup patch.

+update-hugetlb-documentation.patch

Documentation update

+ide-cd-is-very-noisy.patch

Kill some printks

+signedness-fix-in-deadline-ioschedc.patch

deadline /sys fix

+cleanup-virtual-console-selectionc-interface.patch

Code cleanup

+warn-about-cli-sti-co-uses-even-on-up.patch

deprecate cli() and sti().

+remove-umsdos-from-tree.patch

Kill umsdos.

+kill-quota_v2c-printk-of-size_t-warning.patch +kill-gen_init_cpioc-printk-of-size_t-warning.patch +silence-numerous-size_t-warnings-in-drivers-acpi-processor_idlec.patch

size_t warning fixes

+make-irda-string-tables-conditional-on-config_irda_debug.patch

Dead code fix

+fix-unresolved-mtd-symbols-in-scx200_docflashc.patch +fix-module_param-type-mismatch-in-drivers-char-n_hdlcc.patch

Build fixes

+drivers-char-misc-cleanups.patch +pktcdvd-make-two-functions-static.patch +pktcdvd-grep-friendly-function-prototypes.patch +pktcdvd-small-documentation-update.patch +isofs-remove-useless-include.patch +synaptics-remove-unused-struct-member-variable.patch +kill-one-if-x-vfreex-usage.patch +smbfs-make-some-functions-static.patch

Various small cleanups and fixes

+periodically-scan-redzone-entries-and-slab-control-structures.patch

Additional slab sanity checking

number of patches in -mm: 560
number of changesets in external trees: 479
number of patches in -mm only: 544
total patches: 1023

All 560 patches:

linus.patch

gfp_zero-pktcdvd-fix.patch
__GFP_ZERO pktcdvd fix

s390-add-missing-pte_read-function.patch
s390: add missing pte_read function

mmc-build-fix.patch
mmc build fix

bk-acpi.patch

bk-acpi-revert-20041210.patch
bk-acpi-revert-20041210

acpi-report-errors-in-fanc.patch
ACPI: report errors in fan.c

acpi-flush-tlb-when-pagetable-changed.patch
acpi: flush TLB when pagetable changed

acpi-kfree-fix.patch
a

bk-alsa.patch

bk-arm.patch

bk-cifs.patch

bk-cpufreq.patch

bk-drm-via.patch

bk-i2c.patch

bk-ia64.patch

bk-ide-dev.patch

ide-dev-build-fix.patch
ide-dev-build-fix

bk-dtor-input.patch

bk-kconfig.patch

bk-netdev.patch

via-rhine-warning-fix.patch
via-rhine warning fix

hostap-fix-kconfig-typos-and-missing-select-crypto.patch
hostap: fix Kconfig typos and missing select CRYPTO

ixgb-lr-card-support.patch
ixgb LR card support

bk-ntfs.patch

bk-pci.patch

bk-scsi.patch

mm.patch
add -mmN to EXTRAVERSION

fix-smm-failures-on-e750x-systems.patch
fix SMM failures on E750x systems

agpgart-allow-multiple-backends-to-be-initialized.patch
agpgart: allow multiple backends to be initialized

drm-add-support-for-new-multiple-agp-bridge-agpgart-api.patch
drm: add support for new multiple agp bridge agpgart api

fb-add-support-for-new-multiple-agp-bridge-agpgart-api.patch
fb: add support for new multiple agp bridge agpgart api

agpgart-add-bridge-parameter-to-driver-functions.patch
agpgart: add bridge parameter to driver functions

x86_64-agp-hack.patch
x86_64 agp hack

vmscan-count-writeback-pages-in-nr_scanned.patch
vmscan: count writeback pages in nr_scanned

vm-pageout-throttling.patch
vm: pageout throttling

make-tree_lock-an-rwlock.patch
make mapping->tree_lock an rwlock

must-fix.patch
must fix lists update
must fix list update
mustfix update
must-fix update
mustfix lists

xircom_tulip_cb-build-fix.patch
xircom_tulip_cb.c build fix

net-netconsole-poll-support-for-3c509.patch
net: Netconsole poll support for 3c509

pcnet32-79c976-with-fiber-optic.patch
pcnet32: 79c976 with fiber optic fix

multicast-filtering-for-tunc.patch
Multicast filtering for tun.c

r8169-missing-netif_poll_enable-and-irq-ack.patch
r8169: missing netif_poll_enable and irq ack

r8169-c-101.patch
r8169: C 101

r8169-large-send-enablement.patch
r8169: Large Send enablement

r8169-reduce-max-mtu-for-large-frames.patch
r8169: reduce max MTU for large frames

r8169-oversized-driver-field-for-ethtool.patch
r8169: oversized driver field for ethtool

fix-ibm_emac-autonegotiation-result-parsing.patch
EMAC: fix ibm_emac autonegotiation result parsing

add-omap-support-to-smc91x-ethernet-driver.patch
Add OMAP support to smc91x Ethernet driver

restore-net-sched-iptc-after-iptables-kmod-cleanup.patch
Restore net/sched/ipt.c After iptables Kmod Cleanup

netfilter-ipt-build-fix.patch
netfilter: ipt build fix

split-bprm_apply_creds-into-two-functions.patch
split bprm_apply_creds into two functions

merge-_vm_enough_memorys-into-a-common-helper.patch
merge *_vm_enough_memory()s into a common helper

ppc64-add-performance-monitor-register-information-to-processorh.patch
ppc64: add performance monitor register information to processor.h

ppc64-use-newer-rtas-call-when-available.patch
ppc64: use newer RTAS call when available

ppc64-clean-up-trap-handling.patch
ppc64: clean up trap handling

ppc64-clean-up-trap-handling-in-heads.patch
ppc64: clean up trap handling in head.S

ppc64-log-machine-check-errors-to-error-log-and-nvram.patch
ppc64: Log machine check errors to error log and NVRAM

ppc64-iommu-cleanups-rename-pci_dma_directc.patch
ppc64: IOMMU cleanups: rename pci_dma_direct.c

ppc64-iommu-cleanups-main-cleanup-patch.patch
ppc64: IOMMU cleanups: Main cleanup patch

ppc64-reloc_hide.patch

superhyway-bus-support.patch
SuperHyway bus support

dmi_iterate-fix.patch
dmi_iterate() fix

arch-i386-kernel-cpu-mtrr-too-many-bits-are-masked-off-from-cr4.patch
arch/i386/kernel/cpu/mtrr: too many bits are masked off from CR4

xen-vmm-4-add-ptep_establish_new-to-make-va-available.patch
Xen VMM #4: add ptep_establish_new to make va available

xen-vmm-4-return-code-for-arch_free_page.patch
Xen VMM #4: return code for arch_free_page

xen-vmm-4-return-code-for-arch_free_page-fix.patch
Get rid of arch_free_page() warning

xen-vmm-4-runtime-disable-of-vt-console.patch
Xen VMM #4: runtime disable of VT console

xen-vmm-4-has_arch_dev_mem.patch
Xen VMM #4: HAS_ARCH_DEV_MEM

xen-vmm-4-split-free_irq-into-teardown_irq.patch
Xen VMM #4: split free_irq into teardown_irq

pm-introduce-pm_message_t.patch
pm: introduce pm_message_t

mark-older-power-managment-as-deprecated.patch
mark older power managment as deprecated

swsusp-device-power-management-fix.patch
swsusp: device power management fix

swsusp-properly-suspend-and-resume-all-devices.patch
swsusp: properly suspend and resume all devices

wacom-tablet-driver.patch
wacom tablet driver

force-feedback-support-for-uinput.patch
Force feedback support for uinput

kmap_atomic-takes-char.patch
kmap_atomic takes char*

kmap_atomic-takes-char-fix.patch
kmap_atomic-takes-char-fix

kmap_atomic-fallout.patch
kmap_atomic fallout

kunmap-fallout-more-fixes.patch
kunmap-fallout-more-fixes

CONFIG_SOUND_VIA82CXXX_PROCFS.patch
Add CONFIG_SOUND_VIA82CXXX_PROCFS

make-sysrq-f-call-oom_kill.patch
make sysrq-F call oom_kill()

allow-admin-to-enable-only-some-of-the-magic-sysrq-functions.patch
Allow admin to enable only some of the Magic-Sysrq functions

request_irq-avoid-slash-in-proc-directory-entries.patch
request_irq: avoid slash in proc directory entries

prohibit-slash-in-proc-directory-entry-names.patch
prohibit slash in proc directory entry names

speedup-proc-pid-maps.patch
Speed up /proc/pid/maps

fix-cdrom-autoclose.patch
fix cdrom autoclose

move-accounting-function-calls-out-of-critical-vm-code-paths.patch
Move accounting function calls out of critical vm code paths

gen_init_cpio-symlink-pipe-socket-support.patch
gen_init_cpio symlink, pipe and socket support

gen_init_cpio-slink_pipe_sock_2.patch
gen_init_cpio-slink_pipe_sock_2

initramfs-allow-no-trailer.patch
INITRAMFS: allow no trailer

htree-telldir-fix.patch
ext3 htree telldir() fix

ioctl-rework-2.patch
ioctl rework #2

initramfs-unprivileged-image-creation.patch
initramfs: unprivileged image creation

fix-__ptrace_unlink-task_traced-recovery-for-real-parent.patch
fix __ptrace_unlink TASK_TRACED recovery for real parent

fix-coredump_wait-deadlock-with-ptracer-tracee-on-shared-mm.patch
fix coredump_wait deadlock with ptracer & tracee on shared mm

oprofile-fix-ia64-callgraph-bug-with-old-gcc.patch
oprofile: fix ia64 callgraph bug with old gcc

pcmcia-new-ds-cs-interface.patch
pcmcia: new ds - cs interface

pcmcia-call-device-drivers-from-ds-not-from-cs.patch
pcmcia: call device drivers from ds, not from cs

pcmcia-unify-bind_mtd-and-pcmcia_bind_mtd.patch
pcmcia: unify bind_mtd and pcmcia_bind_mtd

pcmcia-unfiy-bind_device-and-pcmcia_bind_device.patch
pcmcia: unfiy bind_device and pcmcia_bind_device

pcmcia-device-model-integration-can-only-be-submitted-under-gpl.patch
pcmcia: device model integration can only be submitted under GPL

pcmcia-add-pcmcia_devices.patch
pcmcia: add pcmcia_device(s)

pcmcia-remove-socket_bind_t-use-pcmcia_devices-instead.patch
pcmcia: remove socket_bind_t, use pcmcia_devices instead

pcmcia-remove-internal-module-use-count-use-module_refcount-instead.patch
pcmcia: remove internal module use count, use module_refcount instead

pcmcia-set-drivers-owner-field.patch
pcmcia: set driver's .owner field

pcmcia-move-pcmcia_unregister_client-to-ds.patch
pcmcia: move pcmcia_(un,)register_client to ds

pcmcia-device-model-integration-can-only-be-submitted-under-gpl-part-2.patch
pcmcia: device model integration can only be submitted under GPL, part 2

pcmcia-use-kref-instead-of-native-atomic-counter.patch
pcmcia: use kref instead of native atomic counter

pcmcia-add-pcmcia_putget_socket.patch
pcmcia: add pcmcia_(put,get)_socket

pcmcia-grab-a-reference-to-the-cs-socket-in-ds.patch
pcmcia: grab a reference to the cs-socket in ds

pcmcia-get-a-reference-to-ds-socket-for-each-pcmcia_device.patch
pcmcia: get a reference to ds-socket for each pcmcia_device

pcmcia-add-a-pointer-to-client-in-struct-pcmcia_device.patch
pcmcia: add a pointer to client in struct pcmcia_device

pcmcia-use-pcmcia_device-in-send_event.patch
pcmcia: use pcmcia_device in send_event

pcmcia-use-pcmcia_device-to-mark-clients-as-stale.patch
pcmcia: use pcmcia_device to mark clients as stale

pcmcia-code-moving-in-ds.patch
pcmcia: code moving in ds

pcmcia-use-pcmcia_device-in-register_client.patch
pcmcia: use pcmcia_device in register_client

pcmcia-direct-ordered-unbind-of-devices.patch
pcmcia: direct-ordered unbind of devices

pcmcia-bug-on-dev_list-=-null.patch
pcmcia: BUG on dev_list != NULL

pcmcia-bug-if-clients-are-kept-too-long.patch
pcmcia: BUG() if clients are kept too long

pcmcia-move-struct-client_t-inside-struct-pcmcia_device.patch
pcmcia: move struct client_t inside struct pcmcia_device

pcmcia-use-driver_find-in-ds.patch
pcmcia: use driver_find in ds

pcmcia-set_netdev-for-network-devices.patch
pcmcia: SET_NETDEV for network devices

pcmcia-set_netdev-for-wireless-network-devices.patch
pcmcia: SET_NETDEV for wireless network devices

pcmcia-reduce-stack-usage-in-ds_ioctl-randy-dunlap.patch
pcmcia: reduce stack usage in ds_ioctl (Randy Dunlap)

pcmcia-add-disable_clkrun-option.patch
pcmcia: Add disable_clkrun option

pcmcia-rename-pcmcia-devices.patch
pcmcia: rename PCMCIA devices

pcmcia-pd6729-e-mail-update.patch
pcmcia: pd6729: e-mail update

pcmcia-pd6729-cleanups.patch
pcmcia: pd6729: cleanups

pcmcia-pd6729-isa_irq-handling.patch
pcmcia: pd6729: isa_irq handling

pcmcia-remove-obsolete-code.patch
pcmcia: remove obsolete code

pcmcia-remove-pending_events.patch
pcmcia: remove pending_events

pcmcia-remove-client_attributes.patch
pcmcia: remove client_attributes

pcmcia-remove-unneeded-parameter-from-rsrc_mgr.patch
pcmcia: remove unneeded parameter from rsrc_mgr

pcmcia-remove-dev_info-from-client.patch
pcmcia: remove dev_info from client

pcmcia-remove-mtd-and-bulkmem-replaced-by-pcmciamtd.patch
pcmcia: remove mtd and bulkmem (replaced by pcmciamtd)

pcmcia-per-socket-resource-database.patch
pcmcia: per-socket resource database

pcmcia-validate_mem-only-for-non-statically-mapped-sockets.patch
pcmcia: validate_mem only for non-statically mapped sockets

pcmcia-adjust_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_io_region only for non-statically mapped sockets

pcmcia-find_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_io_region only for non-statically mapped sockets

pcmcia-find_mem_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_mem_region only for non-statically mapped sockets

pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_ and release_resources only for non-statically mapped sockets

pcmcia-move-resource-handling-code-only-for-non-statically-mapped-sockets-to-other-file.patch
pcmcia: move resource handling code only for non-statically mapped sockets to other file

pcmcia-make-rsrc_nonstatic-an-independend-module.patch
pcmcia: make rsrc_nonstatic an independend module

pcmcia-allocate-resource-database-per-socket.patch
pcmcia: allocate resource database per-socket

pcmcia-remove-typedef.patch
pcmcia: remove typedef

pcmcia-grab-lock-in-resource_release.patch
pcmcia: grab lock in resource_release

nfsd4_setclientid_confirm-locking-fix.patch
nfsd4_setclientid_confirm locking fix

kgdb-ga.patch
kgdb stub for ia32 (George Anzinger's one)
kgdbL warning fix
kgdb buffer overflow fix
kgdbL warning fix
kgdb: CONFIG_DEBUG_INFO fix
x86_64 fixes
correct kgdb.txt Documentation link (against 2.6.1-rc1-mm2)
kgdb: fix for recent gcc
kgdb warning fixes
THREAD_SIZE fixes for kgdb
Fix stack overflow test for non-8k stacks kgdb-ga.patch fix for i386 single-step into sysenter fix TRAP_BAD_SYSCALL_EXITS on i386
add TRAP_BAD_SYSCALL_EXITS config for i386 kgdb-is-incompatible-with-kprobes kgdb-ga-build-fix
kgdb-ga-fixes

kgdb-kill-off-highmem_start_page.patch
kgdb: kill off highmem_start_page

kgdboe-netpoll.patch
kgdb-over-ethernet via netpoll
kgdboe: fix configuration of MAC address

kgdb-x86_64-support.patch
kgdb-x86_64-support.patch for 2.6.2-rc1-mm3
kgdb-x86_64-warning-fixes
kgdb-x86_64-fix
kgdb-x86_64-serial-fix
kprobes exception notifier fix

dev-mem-restriction-patch.patch
/dev/mem restriction patch

dev-mem-restriction-patch-allow-reads.patch
dev-mem-restriction-patch: allow reads

jbd-remove-livelock-avoidance.patch
JBD: remove livelock avoidance code in journal_dirty_data()

journal_add_journal_head-debug.patch
journal_add_journal_head-debug

list_del-debug.patch
list_del debug check

unplug-can-sleep.patch
unplug functions can sleep

firestream-warnings.patch
firestream warnings

perfctr-core.patch
perfctr: core

perfctr-i386.patch
perfctr: i386

perfctr-x86-core-updates.patch
perfctr x86 core updates

perfctr-x86-driver-updates.patch
perfctr x86 driver updates

perfctr-x86-driver-cleanup.patch
perfctr: x86 driver cleanup

perfctr-prescott-fix.patch
Prescott fix for perfctr

perfctr-x86-update-2.patch
perfctr x86 update 2

perfctr-x86_64.patch
perfctr: x86_64

perfctr-x86_64-core-updates.patch
perfctr x86_64 core updates

perfctr-ppc.patch
perfctr: PowerPC

perfctr-ppc32-driver-update.patch
perfctr: ppc32 driver update

perfctr-ppc32-mmcr0-handling-fixes.patch
perfctr ppc32 MMCR0 handling fixes

perfctr-ppc32-update.patch
perfctr ppc32 update

perfctr-ppc32-update-2.patch
perfctr ppc32 update

perfctr-virtualised-counters.patch
perfctr: virtualised counters

perfctr-remap_page_range-fix.patch

virtual-perfctr-illegal-sleep.patch
virtual perfctr illegal sleep

make-perfctr_virtual-default-in-kconfig-match-recommendation.patch
Make PERFCTR_VIRTUAL default in Kconfig match recommendation in help text

perfctr-ifdef-cleanup.patch
perfctr ifdef cleanup

perfctr-update-2-6-kconfig-related-updates.patch
perfctr: Kconfig-related updates

perfctr-virtual-updates.patch
perfctr virtual updates

perfctr-virtual-cleanup.patch
perfctr: virtual cleanup

perfctr-ppc32-preliminary-interrupt-support.patch
perfctr ppc32 preliminary interrupt support

perfctr-update-5-6-reduce-stack-usage.patch
perfctr: reduce stack usage

perfctr-interrupt-support-kconfig-fix.patch
perfctr interrupt_support Kconfig fix

perfctr-low-level-documentation.patch
perfctr low-level documentation

perfctr-inheritance-1-3-driver-updates.patch
perfctr inheritance: driver updates

perfctr-inheritance-2-3-kernel-updates.patch
perfctr inheritance: kernel updates

perfctr-inheritance-3-3-documentation-updates.patch
perfctr inheritance: documentation updates

perfctr-inheritance-locking-fix.patch
perfctr inheritance locking fix

perfctr-api-changes-first-step.patch
perfctr API changes: first step

perfctr-virtual-update.patch
perfctr virtual update

perfctr-x86-64-ia32-emulation-fix.patch
perfctr x86-64 ia32 emulation fix

perfctr-sysfs-update-1-4-core.patch
perfctr sysfs update: core

perfctr-sysfs-update.patch
Perfctr sysfs update

perfctr-sysfs-update-2-4-x86.patch
perfctr sysfs update: x86

perfctr-sysfs-update-3-4-x86-64.patch
perfctr sysfs update: x86-64

perfctr-sysfs-update-4-4-ppc32.patch
perfctr sysfs update: ppc32

sched-more-agressive-wake_idle.patch
sched: more agressive wake_idle()

sched-can_migrate-exception-for-idle-cpus.patch
sched: can_migrate exception for idle cpus

sched-newidle-fix.patch
sched: newidle fix

sched-active_load_balance-fixlet.patch
sched: active_load_balance() fixlet

sched-reset-cache_hot_time.patch
sched: reset cache_hot_time

schedc-whitespace-mangler.patch
sched.c whitespace mangler

sched-alter_kthread_prio.patch
sched: alter_kthread_prio

sched-adjust_timeslice_granularity.patch
sched: adjust_timeslice_granularity

sched-add_requeue_task.patch
sched: add_requeue_task

requeue_granularity.patch
sched: requeue_granularity

sched-remove_interactive_credit.patch
sched: remove_interactive_credit

sched-use-cached-current-value.patch
sched: use cached current value

dont-hide-thread_group_leader-from-grep.patch
don't hide thread_group_leader() from grep

sched-no-need-to-recalculate-rq.patch
sched: no need to recalculate rq

export-sched_setscheduler-for-kernel-module-use.patch
export sched_setscheduler() for kernel module use

sched-remove-outdated-misleading-comments.patch
sched: remove outdated/misleading comments

add-do_proc_doulonglongvec_minmax-to-sysctl-functions.patch
Add do_proc_doulonglongvec_minmax to sysctl functions add-do_proc_doulonglongvec_minmax-to-sysctl-functions-fix add-do_proc_doulonglongvec_minmax-to-sysctl-functions fix 2

add-sysctl-interface-to-sched_domain-parameters.patch
Add sysctl interface to sched_domain parameters

preempt-smp.patch
improve preemption on SMP

preempt-smp-_raw_read_trylock-bias-fix.patch
preempt-smp _raw_read_trylock bias fix

preempt-cleanup.patch
preempt cleanup

preempt-cleanup-fix.patch
preempt-cleanup-fix

add-lock_need_resched.patch
add lock_need_resched()

sched-add-cond_resched_softirq.patch
sched: add cond_resched_softirq()

sched-ext3-fix-scheduling-latencies-in-ext3.patch
sched: ext3: fix scheduling latencies in ext3

break-latency-in-invalidate_list.patch
break latency in invalidate_list()

sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent.patch
sched: vfs: fix scheduling latencies in prune_dcache() and select_parent()

sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent-fix.patch
sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent fix

sched-net-fix-scheduling-latencies-in-netstat.patch
sched: net: fix scheduling latencies in netstat

sched-net-fix-scheduling-latencies-in-__release_sock.patch
sched: net: fix scheduling latencies in __release_sock

sched-mm-fix-scheduling-latencies-in-unmap_vmas.patch
sched: mm: fix scheduling latencies in unmap_vmas()

sched-mm-fix-scheduling-latencies-in-get_user_pages.patch
sched: mm: fix scheduling latencies in get_user_pages()

sched-mm-fix-scheduling-latencies-in-filemap_sync.patch
sched: mm: fix scheduling latencies in filemap_sync()

fix-keventd-execution-dependency.patch
fix keventd execution dependency

sched-fix-scheduling-latencies-in-mttrc.patch
sched: fix scheduling latencies in mttr.c

sched-fix-scheduling-latencies-in-mttrc-reenables-interrupts.patch
sched-fix-scheduling-latencies-in-mttrc reenables interrupts

sched-fix-scheduling-latencies-in-vgaconc.patch
sched: fix scheduling latencies in vgacon.c

sched-fix-scheduling-latencies-for-preempt-kernels.patch
sched: fix scheduling latencies for !PREEMPT kernels

idle-thread-preemption-fix.patch
idle thread preemption fix

oprofile-smp_processor_id-fixes.patch
oprofile smp_processor_id() fixes

fix-smp_processor_id-warning-in-numa_node_id.patch
Fix smp_processor_id() warning in numa_node_id()

debug-sched-domains-before-attach.patch
debug sched domains before attach

replace-numnodes-with-node_online_map-alpha.patch
Subject: [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha

replace-numnodes-with-node_online_map-arm.patch
Subject: [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm

replace-numnodes-with-node_online_map-i386.patch
Subject: [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386

replace-numnodes-with-node_online_map-ia64.patch
Subject: [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64

replace-numnodes-with-node_online_map-ia64-fix.patch
replace-numnodes-with-node_online_map-ia64 fix

replace-numnodes-with-node_online_map-m32r.patch
Subject: [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r

replace-numnodes-with-node_online_map-mips.patch
Subject: [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips

replace-numnodes-with-node_online_map-parisc.patch
Subject: [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc

replace-numnodes-with-node_online_map-ppc64.patch
Subject: [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64

replace-numnodes-with-node_online_map-x86_64.patch
Subject: [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64

replace-numnodes-with-node_online_map.patch
Subject: [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent

replace-numnodes-with-node_online_map-fix.patch
replace-numnodes-with-node_online_map fix

block2mtd-avoid-touching-truncate_count.patch
block2mtd: avoid touching truncate_count

vmtrunc-truncate_count-not-atomic.patch
vmtrunc: truncate_count not atomic

vmtrunc-restore-unmap_vmas-zap_bytes.patch
vmtrunc: restore unmap_vmas zap_bytes

vmtrunc-unmap_mapping_range_tree.patch
vmtrunc: unmap_mapping_range_tree

vmtrunc-unmap_mapping-dropping-i_mmap_lock.patch
vmtrunc: unmap_mapping dropping i_mmap_lock

vmtrunc-vm_truncate_count-race-caution.patch
vmtrunc: vm_truncate_count race caution

vmtrunc-bug-if-page_mapped.patch
vmtrunc: bug if page_mapped

vmtrunc-restart_addr-in-truncate_count.patch
vmtrunc: restart_addr in truncate_count

remove-the-bkl-by-turning-it-into-a-semaphore.patch
remove the BKL by turning it into a semaphore

cpu_idle-smp_processor_id-warning-fix.patch
cpu_idle-smp_processor_id-warning-fix

oprofile-preempt-warning-fixes.patch
oprofile preempt warning fixes

smp_processor_id-commentary.patch
smp_processor_id() commentary

cpu_down-warning-fix.patch
cpu_down() warning fix

allow-modular-ide-pnp.patch
allow modular ide-pnp

allow-x86_64-to-reenable-interrupts-on-contention.patch
Allow x86_64 to reenable interrupts on contention

i386-cpu-hotplug-updated-for-mm.patch
i386 CPU hotplug updated for -mm

ppc64-fix-cpu-hotplug.patch
ppc64: fix hotplug cpu

serialize-access-to-ide-devices.patch
serialize access to ide devices

disable-atykb-warning.patch
disable atykb "too many keys pressed" warning

export-file_ra_state_init-again.patch
Export file_ra_state_init() again

cachefs-filesystem.patch
CacheFS filesystem

numa-policies-for-file-mappings-mpol_mf_move-cachefs.patch
numa-policies-for-file-mappings-mpol_mf_move for cachefs

cachefs-release-search-records-lest-they-return-to-haunt-us.patch
CacheFS: release search records lest they return to haunt us

fix-64-bit-problems-in-cachefs.patch
Fix 64-bit problems in cachefs

cachefs-fixed-typos-that-cause-wrong-pointer-to-be-kunmapped.patch
cachefs: fixed typos that cause wrong pointer to be kunmapped

cachefs-return-the-right-error-upon-invalid-mount.patch
CacheFS: return the right error upon invalid mount

fix-cachefs-barrier-handling-and-other-kernel-discrepancies.patch
Fix CacheFS barrier handling and other kernel discrepancies

remove-error-from-linux-cachefsh.patch
Remove #error from linux/cachefs.h

cachefs-warning-fix-2.patch
cachefs warning fix 2

cachefs-linkage-fix-2.patch
cachefs linkage fix

cachefs-build-fix.patch
cachefs build fix

cachefs-documentation.patch
CacheFS documentation

add-page-becoming-writable-notification.patch
Add page becoming writable notification

add-page-becoming-writable-notification-fix.patch
do_wp_page_mk_pte_writable() fix

add-page-becoming-writable-notification-build-fix.patch
add-page-becoming-writable-notification build fix

provide-a-filesystem-specific-syncable-page-bit.patch
Provide a filesystem-specific sync'able page bit

provide-a-filesystem-specific-syncable-page-bit-fix.patch
provide-a-filesystem-specific-syncable-page-bit-fix

provide-a-filesystem-specific-syncable-page-bit-fix-2.patch
provide-a-filesystem-specific-syncable-page-bit-fix-2

make-afs-use-cachefs.patch
Make AFS use CacheFS

afs-cachefs-dependency-fix.patch
afs-cachefs-dependency-fix

split-general-cache-manager-from-cachefs.patch
Split general cache manager from CacheFS

turn-cachefs-into-a-cache-backend.patch
Turn CacheFS into a cache backend

rework-the-cachefs-documentation-to-reflect-fs-cache-split.patch
Rework the CacheFS documentation to reflect FS-Cache split

update-afs-client-to-reflect-cachefs-split.patch
Update AFS client to reflect CacheFS split

assign_irq_vector-section-fix.patch
assign_irq_vector __init section fix

kexec-i8259-shutdowni386.patch
kexec: i8259-shutdown.i386

kexec-i8259-shutdown-x86_64.patch
kexec: x86_64 i8259 shutdown

kexec-apic-virtwire-on-shutdowni386patch.patch
kexec: apic-virtwire-on-shutdown.i386.patch

kexec-apic-virtwire-on-shutdownx86_64.patch
kexec: apic-virtwire-on-shutdown.x86_64

kexec-ioapic-virtwire-on-shutdowni386.patch
kexec: ioapic-virtwire-on-shutdown.i386

kexec-apic-virt-wire-fix.patch
kexec: apic-virt-wire fix

kexec-ioapic-virtwire-on-shutdownx86_64.patch
kexec: ioapic-virtwire-on-shutdown.x86_64

kexec-e820-64bit.patch
kexec: e820-64bit

kexec-kexec-generic.patch
kexec: kexec-generic

kexec-ide-spindown-fix.patch
kexec-ide-spindown-fix

kexec-ifdef-cleanup.patch
kexec ifdef cleanup

kexec-machine_shutdownx86_64.patch
kexec: machine_shutdown.x86_64

kexec-kexecx86_64.patch
kexec: kexec.x86_64

kexec-kexecx86_64-4level-fix.patch
kexec-kexecx86_64-4level-fix

kexec-kexecx86_64-4level-fix-unfix.patch
kexec-kexecx86_64-4level-fix unfix

kexec-machine_shutdowni386.patch
kexec: machine_shutdown.i386

kexec-kexeci386.patch
kexec: kexec.i386

kexec-use_mm.patch
kexec: use_mm

kexec-loading-kernel-from-non-default-offset.patch
kexec: loading kernel from non-default offset

kexec-loading-kernel-from-non-default-offset-fix.patch
kdump: fix bss compile error

kexec-enabling-co-existence-of-normal-kexec-kernel-and-panic-kernel.patch
kexec: nabling co-existence of normal kexec kernel and panic kernel

kexec-ppc-support.patch
kexec: ppc support

crashdump-documentation.patch
crashdump: documentation

crashdump-memory-preserving-reboot-using-kexec.patch
crashdump: memory preserving reboot using kexec

crashdump-memory-preserving-reboot-using-kexec-fix.patch
kdump: Fix for boot problems on SMP

kdump-config_discontigmem-fix.patch
kdump: CONFIG_DISCONTIGMEM fix

crashdump-routines-for-copying-dump-pages.patch
crashdump: routines for copying dump pages

crashdump-routines-for-copying-dump-pages-kmap-fiddle.patch
crashdump-routines-for-copying-dump-pages-kmap-fiddle

crashdump-kmap-build-fix.patch
crashdump kmap build fix

crashdump-register-snapshotting-before-kexec-boot.patch
crashdump: register snapshotting before kexec boot

crashdump-elf-format-dump-file-access.patch
crashdump: ELF format dump file access

crashdump-linear-raw-format-dump-file-access.patch
crashdump: linear/raw format dump file access

crashdump-minor-bug-fixes-to-kexec-crashdump-code.patch
crashdump: minor bug fixes to kexec crashdump code

crashdump-cleanups-to-the-kexec-based-crashdump-code.patch
crashdump: cleanups to the kexec based crashdump code

x86-rename-apic_mode_exint.patch
x86: rename APIC_MODE_EXINT

x86-local-apic-fix.patch
x86: local apic fix

new-bitmap-list-format-for-cpusets.patch
new bitmap list format (for cpusets)

cpusets-big-numa-cpu-and-memory-placement.patch
cpusets - big numa cpu and memory placement

cpusets-fix-cpuset_get_dentry.patch
cpusets : fix cpuset_get_dentry()

cpusets-fix-race-in-cpuset_add_file.patch
cpusets: fix race in cpuset_add_file()

cpusets-remove-more-casts.patch
cpusets: remove more casts

cpusets-make-config_cpusets-the-default-in-sn2_defconfig.patch
cpusets: make CONFIG_CPUSETS the default in sn2_defconfig

cpusets-document-proc-status-allowed-fields.patch
cpusets: document proc status allowed fields

cpusets-dont-export-proc_cpuset_operations.patch
Cpusets - Dont export proc_cpuset_operations

cpusets-display-allowed-masks-in-proc-status.patch
cpusets: display allowed masks in proc status

cpusets-simplify-cpus_allowed-setting-in-attach.patch
cpusets: simplify cpus_allowed setting in attach

cpusets-remove-useless-validation-check.patch
cpusets: remove useless validation check

cpusets-config_cpusets-depends-on-smp.patch
Cpusets: CONFIG_CPUSETS depends on SMP

cpusets-tasks-file-simplify-format-fixes.patch
Cpusets tasks file: simplify format, fixes

cpusets-simplify-memory-generation.patch
Cpusets: simplify memory generation

cpusets-interoperate-with-hotplug-online-maps.patch
cpusets: interoperate with hotplug online maps

cpusets-alternative-fix-for-possible-race-in.patch
cpusets: alternative fix for possible race in cpuset_tasks_read()

cpusets-remove-casts.patch
cpusets: remove void* typecasts

reiser4-sb_sync_inodes.patch
reiser4: vfs: add super_operations.sync_inodes()

reiser4-allow-drop_inode-implementation.patch
reiser4: export vfs inode.c symbols

reiser4-truncate_inode_pages_range.patch
reiser4: vfs: add truncate_inode_pages_range()

reiser4-export-remove_from_page_cache.patch
reiser4: export pagecache add/remove functions to modules

reiser4-export-page_cache_readahead.patch
reiser4: export page_cache_readahead to modules

reiser4-reget-page-mapping.patch
reiser4: vfs: re-check page->mapping after calling try_to_release_page()

reiser4-rcu-barrier.patch
reiser4: add rcu_barrier() synchronization point

reiser4-export-inode_lock.patch
reiser4: export inode_lock to modules

reiser4-export-pagevec-funcs.patch
reiser4: export pagevec functions to modules

reiser4-export-radix_tree_preload.patch
reiser4: export radix_tree_preload() to modules

reiser4-export-find_get_pages.patch

reiser4-radix-tree-tag.patch
reiser4: add new radix tree tag

reiser4-radix_tree_lookup_slot.patch
reiser4: add radix_tree_lookup_slot()

reiser4-perthread-pages.patch
reiser4: per-thread page pools

reiser4-include-reiser4.patch
reiser4: add to build system

reiser4-doc.patch
reiser4: documentation

reiser4-only.patch
reiser4: main fs

reiser4-recover-read-performance.patch
reiser4: recover read performance

reiser4-export-find_get_pages_tag.patch
reiser4-export-find_get_pages_tag

reiser4-add-missing-context.patch

add-acpi-based-floppy-controller-enumeration.patch
Add ACPI-based floppy controller enumeration.

possible-dcache-bug-debugging-patch.patch
Possible dcache BUG: debugging patch

3c59x-reload-eeprom-values-at-rmmod-for-needy-cards.patch
3c59x: reload EEPROM values at rmmod for needy cards

3c59x-remove-eeprom_reset-for-3c905b.patch
3c59x: remove EEPROM_RESET for 3c905B

3c59x-add-eeprom_reset-for-3c900-boomerang.patch
3c59x: Add EEPROM_RESET for 3c900 Boomerang

3c59x-pm-fix.patch
3c59x: enable power management unconditionally

3c59x-missing-pci_disable_device.patch
3c59x: missing pci_disable_device

3c59x-use-netdev_priv.patch
3c59x: use netdev_priv

3c59x-make-use-of-generic_mii_ioctl.patch
3c59x: Make use of generic_mii_ioctl

3c59x-vortex-select-mii.patch
3c59x: VORTEX select MII

3c59x-support-more-ethtool_ops.patch
3c59x: support more ethtool_ops

serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
serial: add support for non-standard XTALs to 16c950 driver

add-support-for-possio-gcc-aka-pcmcia-siemens-mc45.patch
Add support for Possio GCC AKA PCMCIA Siemens MC45

new-serial-flow-control.patch
new serial flow control

mpsc-driver-patch.patch
serial: MPSC driver

generic-serial-cli-conversion.patch
generic-serial cli() conversion

specialix-io8-cli-conversion.patch
Specialix/IO8 cli() conversion

rio-cli-conversion.patch
RIO cli() conversion

rio_linux-64-bit-workaround.patch
rio_linux 64 bit workaround

sx-cli-conversion.patch
SX cli() conversion

revert-allow-oem-written-modules-to-make-calls-to-ia64-oem-sal-functions.patch
revert "allow OEM written modules to make calls to ia64 OEM SAL functions"

md-improve-hash-code-in-linearc.patch
md: improve 'hash' code in linear.c

md-add-interface-for-userspace-monitoring-of-events.patch
md: add interface for userspace monitoring of events.

make-acpi_bus_register_driver-consistent-with-pci_register_driver-again.patch
make acpi_bus_register_driver() consistent with pci_register_driver()

enforce-a-gap-between-heap-and-stack.patch
Enforce a gap between heap and stack

remove-lock_section-from-x86_64-spin_lock-asm.patch
remove LOCK_SECTION from x86_64 spin_lock asm

kfree_skb-dump_stack.patch
kfree_skb-dump_stack

for-mm-only-remove-remap_page_range-completely.patch
vm: for -mm only: remove remap_page_range() completely

cancel_rearming_delayed_work.patch
cancel_rearming_delayed_work()
make cancel_rearming_delayed_workqueue static

ipvs-deadlock-fix.patch
ipvs deadlock fix

minimal-ide-disk-updates.patch
Minimal ide-disk updates

no-buddy-bitmap-patch-revist-intro-and-includes.patch
no buddy bitmap patch revist: intro and includes

no-buddy-bitmap-patch-revisit-for-mm-page_allocc.patch
no buddy bitmap patch revisit: for mm/page_alloc.c

no-buddy-bitmap-patch-revisit-for-mm-page_allocc-fix.patch
no-buddy-bitmap-patch-revisit-for-mm-page_allocc fix

no-buddy-bitmap-patch-revist-for-ia64.patch
no buddy bitmap patch revist: for ia64

no-buddy-bitmap-patch-revist-for-ia64-fix.patch
no-buddy-bitmap-patch-revist-for-ia64 fix

use-find_trylock_page-in-free_swap_and_cache-instead-of-hand-coding.patch
use find_trylock_page in free_swap_and_cache instead of hand coding

fbdev-rivafb-should-recognize-nf2-igp.patch
fbdev: rivafb should recognize NF2/IGP

raid6-altivec-support.patch
raid6: altivec support

remove-export_symbol_novers.patch
Remove EXPORT_SYMBOL_NOVERS

figure-out-who-is-inserting-bogus-modules.patch
Figure out who is inserting bogus modules

use-mmiowb-in-qla1280c.patch
use mmiowb in qla1280.c

readpage-vs-invalidate-fix.patch
readpage-vs-invalidate fix

invalidate_inode_pages-mmap-coherency-fix.patch
invalidate_inode_pages2() mmap coherency fix

bug-on-error-handlings-in-ext3-under-i-o-failure.patch
BUG on error handlings in Ext3 under I/O failure condition

bug-on-error-handlings-in-ext3-under-i-o-failure-fix.patch
bug-on-error-handlings-in-ext3-under-i-o-failure fix

cputime-introduce-cputime.patch
cputime: introduce cputime

cputime-introduce-cputime-vs-move-accounting-function-calls-out-of-critical-vm-code-paths.patch
cputime-introduce-cputime-vs-move-accounting-function-calls-out-of-critical-vm-code-paths

cputime-fix-do_setitimer.patch
cputime: fix do_setitimer.

cputime-missing-pieces.patch
cputime: missing pieces.

mm-check_rlimit-oops-on-p-signal.patch
check_rlimit oops on p->signal

cputime-microsecond-based-cputime-for-s390.patch
cputime: microsecond based cputime for s390

detect-atomic-counter-underflows.patch
detect atomic counter underflows

lock-initializer-unifying-batch-2-alpha.patch
Lock initializer unifying: ALPHA

lock-initializer-unifying-batch-2-ia64.patch
Lock initializer unifying: IA64

lock-initializer-unifying-batch-2-m32r.patch
Lock initializer unifying: M32R

lock-initializer-unifying-batch-2-mips.patch
Lock initializer unifying: MIPS

lock-initializer-unifying-batch-2-misc-drivers.patch
Lock initializer unifying: Misc drivers

lock-initializer-unifying-batch-2-block-devices.patch
Lock initializer unifying: Block devices

lock-initializer-unifying-batch-2-drm.patch
Lock initializer unifying: DRM

lock-initializer-unifying-batch-2-character-devices.patch
Lock initializer unifying: character devices

lock-initializer-unifying-batch-2-rio.patch
Lock initializer unifying: RIO

lock-initializer-unifying-batch-2-firewire.patch
Lock initializer unifying: Firewire

lock-initializer-unifying-batch-2-isdn.patch
Lock initializer unifying: ISDN

lock-initializer-unifying-batch-2-raid.patch
Lock initializer unifying: Raid

lock-initializer-unifying-batch-2-media-drivers.patch
Lock initializer unifying: media drivers

lock-initializer-unifying-batch-2-drivers-serial.patch
Lock initializer unifying: drivers/serial

lock-initializer-unifying-batch-2-filesystems.patch
Lock initializer unifying: Filesystems

lock-initializer-unifying-batch-2-video.patch
Lock initializer unifying: Video

lock-initializer-unifying-batch-2-sound.patch
Lock initializer unifying: sound

lock-initializer-cleanup-common-headers.patch
Lock initializer cleanup (common headers)

lock-initializer-cleanup-character-devices.patch
Lock initializer cleanup (character devices)

lock-initializer-cleanup-core.patch
Lock initializer cleanup (Core)

moxa-update-status-of-moxa-smartio-driver.patch
moxa: Update status of Moxa Smartio driver

moxa-remove-ancient-changelog-readmemoxa.patch
moxa: Remove ancient changelog README.moxa

moxa-remove-readmemoxa-from-documentation-00-index.patch
moxa: Remove README.moxa from Documentation/00-INDEX

specialix-remove-bouncing-e-mail-address.patch
specialix: remove bouncing e-mail address

stallion-update-to-documentation-stalliontxt.patch
stallion: Update to Documentation/stallion.txt

riscom8-update-staus-and-documentation-of-driver.patch
riscom8: Update staus and documentation of driver

pm-remove-outdated-docs.patch
From: Pavel Machek <[email protected]>
Subject: pm: remove outdated docs

docs-add-sparse-howto.patch
From: Pavel Machek <[email protected]>
Subject: docs: add sparse howto

cciss-documentation-update.patch
cciss: Documentation update

cciss-correct-mailing-list-address-in-source-code.patch
cciss: Correct mailing list address in source code

cpqarray-correct-mailing-list-address-in-source-code.patch
cpqarray: Correct mailing list address in source code

sh-remove-x86-specific-help-in-kconfig.patch
sh: Remove x86-specific help in Kconfig

cyclades-put-readmecycladez-in-documentation-serial.patch
cyclades: Put README.cycladeZ in Documentation/serial

tipar-document-driver-options.patch
tipar: Document driver options

tipar-code-cleanup.patch
tipar: Code cleanup

update-hugetlb-documentation.patch
update hugetlb documentation

eth1394-module_parm-conversion.patch
eth1394 MODULE_PARM conversion

isapnp-module_param-conversion.patch
isapnp module_param conversion

sr-module_param-conversion.patch
sr module_param conversion

media-video-module_param-conversion.patch
media/video module_param conversion

btaudio-module_param-conversion.patch
btaudio module_param conversion

small-drivers-char-rio-cleanups-fwd.patch
small drivers/char/rio/ cleanups

small-char-generic_serialc-cleanup-fwd.patch
small char/generic_serial.c cleanup

debug_bugverbose-for-i386-fwd.patch
DEBUG_BUGVERBOSE for i386

telephony-ixjc-cleanup-fwd.patch
telephony/ixj.c cleanup

char-cycladesc-remove-unused-code-fwd.patch
char/cyclades.c: remove unused code

oss-ac97-quirk-facility.patch
oss: AC97 quirk facility

oss-ac97-quirk-facility-fix.patch
oss-ac97-quirk-facility fix

ext3-use-generic_open_file-to-fix-possible-preemption-bugs.patch
ext3: use generic_open_file to fix possible preemption bugs

bttv-i2cc-make-two-functions-static.patch
bttv-i2c.c: make two functions static

bttv-riscc-make-some-functions-static.patch
bttv-risc.c: make some functions static

bttv-help-fix.patch
bttv help fix

zoran_driverc-make-zoran_num_formats-static.patch
zoran_driver.c: make zoran_num_formats static

media-video-msp3400c-remove-unused-struct-d1.patch
media/video/msp3400.c: remove unused struct d1

zoran_devicec-make-zr36057_init_vfe-static.patch
zoran_device.c: make zr36057_init_vfe static

drivers-media-video-the-easy-cleanups.patch
drivers/media/video: the easy cleanups

small-ftape-cleanups-fwd.patch
small ftape cleanups

reiser3-cleanups.patch
reiser3 cleanups

cdromc-make-several-functions-static.patch
cdrom.c: make several functions static (fwd)

fs-coda-psdevc-shouldnt-include-lph.patch
fs/coda/psdev.c shouldn't include lp.h

remove-early_param-tests.patch
remove early_param test code

MODULE_PARM-allmod.patch
MODULE_PARM conversions

MODULE_PARM-allyes.patch
MODULE_PARM conversions

lockd-fix-two-struct-definitions.patch
lockd: fix two struct definitions

small-mca-cleanups-fwd.patch
small MCA cleanups

small-drivers-media-radio-cleanups-fwd.patch
small drivers/media/radio/ cleanups

ifdef-typos-arch_ppc_platforms_prep_setupc.patch
ifdef typos: arch_ppc_platforms_prep_setup.c

ifdef-typos-arch_ppc_platforms_prep_setupc-another-one.patch
ifdef typos: arch_ppc_platforms_prep_setup.c -another one

ifdef-typos-arch_ppc_syslib_ppc4xx_dmac.patch
ifdef typos: arch_ppc_syslib_ppc4xx_dma.c

ifdef-typos-arch_sh_boards_renesas_hs7751rvoip_ioc.patch
ifdef typos: arch_sh_boards_renesas_hs7751rvoip_io.c

ifdef-typos-drivers_char_ipmi_ipmi_si_intfc.patch
ifdef typos: drivers_char_ipmi_ipmi_si_intf.c

ifdef-typos-drivers_net_wireless_wavelan_csc.patch
ifdef typos: drivers_net_wireless_wavelan_cs.c

ifdef-typos-drivers_usb_net_usbnetc.patch
ifdef typos: drivers_usb_net_usbnet.c

ifdef-typos-mips-au100_usb_device.patch
ifdef typos mips: AU1[0X]00_USB_DEVICE

ipmi-use-c99-struct-inits.patch
IPMI: use C99 struct inits.

drm-remove-unused-functions-fwd.patch
DRM: remove unused functions

floppyc-remove-an-unused-function-fwd.patch
floppy.c: remove an unused function

media-video-ir-kbd-i2cc-remove-an-unused-function-fwd.patch
media/video/ir-kbd-i2c.c: remove an unused function

nfs-remove-an-unused-function-fwd.patch
NFS: remove an unused function

watchdog-machzwdc-remove-unused-functions-fwd.patch
watchdog/machzwd.c: remove unused functions

video-drivers-remove-unused-functions-fwd.patch
video drivers: remove unused functions

isdn-b1pcmciac-remove-an-unused-variable-fwd.patch
ISDN b1pcmcia.c: remove an unused variable

binfmt_scriptc-make-struct-script_format-static-fwd.patch
binfmt_script.c: make struct script_format static

bioc-make-bio_destructor-static-fwd.patch
bio.c: make bio_destructor static

devpts-inodec-make-one-struct-static-fwd.patch
devpts/inode.c: make one struct static

small-proc_fs-cleanups-fwd.patch
small proc_fs cleanups

kernel-timerc-comment-typo.patch
Fix kernel/timer.c comment typo

mark-qnx4fs_rw-as-broken-fwd.patch
mark QNX4FS_RW as BROKEN

oss-remove-unused-functions-fwd.patch
OSS: remove unused functions

dvb-av7110_hwc-remove-unused-functions-fwd.patch
DVB av7110_hw.c: remove unused functions

schedc-remove-an-unused-macro-fwd.patch
sched.c: remove an unused macro

scsi-ahcic-remove-an-unused-function-fwd.patch
scsi/ahci.c: remove an unused function

scsi-aic7xxx-aic79xx_osmc-remove-an-unused-function-fwd.patch
scsi/aic7xxx/aic79xx_osm.c: remove an unused function

schedc-remove-an-unused-function-fwd.patch
sched.c: remove an unused function

prism54-small-prismcompat-cleanup-fwd.patch
prism54: small prismcompat cleanup

some-parport_pcc-cleanups-fwd.patch
some parport_pc.c cleanups

fix-typo-and-email-in-saktxt.patch
fix typo and email in SAK.txt

cris-remove-kernel-20-ifdefs-fwd.patch
cris: remove kernel 2.0 #ifdef's

afs-afs_voltypes-isnt-always-required-fwd.patch
AFS: afs_voltypes isn't always required

befs-if-0-two-unused-global-functions-fwd.patch
befs: #if 0 two unused global functions

binfmt_scriptc-make-em86_format-static.patch
binfmt_script.c: make em86_format static

remove-unused-include-asm-m68k-adb_mouseh.patch
remove unused include/asm-m68k/adb_mouse.h

scsi-aic7xxx-remove-two-useless-variables.patch
scsi/aic7xxx/: remove two useless variables

remove-in_string_c.patch
remove IN_STRING_C

remove-ct_to_secs-ct_to_usecs.patch
remove CT_TO_SECS()/CT_TO_USECS()

bttv-driverc-make-some-variables-static.patch
bttv-driver.c: make some variables static

arch-alpha-kconfig-kill-stale-reference-to-documentation-smptex.patch
arch/alpha/Kconfig: Kill stale reference to Documentation/smp.tex

init-initramfsc-make-unpack_to_rootfs-static.patch
init/initramfs.c: make unpack_to_rootfs static

oss-misc-cleanups.patch
OSS: misc cleanups

inux-269-fs-proc-basec-array-size.patch
fs/proc/base.c: array size

linux-269-fs-proc-proc_ttyc-avoid-array.patch
fs/proc/proc_tty.c: avoid array

optimize-prefetch-usage-in-list_for_each_xxx.patch
optimize prefetch() usage in list_for_each_xxx

signalc-convert-assertion-to-bug_on.patch
signal.c: convert assertion to BUG_ON()

right-severity-level-for-fatal-message.patch
Right severity level for fatal message

remove-unused-drivers-char-rio-cdprotoh.patch
remove unused drivers/char/rio/cdproto.h

remove-unused-drivers-char-rsf16fmih.patch
remove unused drivers/char/rsf16fmi.h

mtd-added-nec-upd29f064115-support.patch
mtd: added NEC uPD29F064115 support

waiting-10s-before-mounting-root-filesystem.patch
retry mounting the root filesystem at boot time

ide-cd-is-very-noisy.patch
IDE CD is very noisy

signedness-fix-in-deadline-ioschedc.patch
signedness fix in deadline-iosched.c

cleanup-virtual-console-selectionc-interface.patch
cleanup virtual console <-> selection.c interface

warn-about-cli-sti-co-uses-even-on-up.patch
warn about cli, sti & co uses even on UP

remove-umsdos-from-tree.patch
remove umsdos from tree

kill-quota_v2c-printk-of-size_t-warning.patch
kill quota_v2.c printk() of size_t warning

kill-gen_init_cpioc-printk-of-size_t-warning.patch
kill gen_init_cpio.c printk() of size_t warning

silence-numerous-size_t-warnings-in-drivers-acpi-processor_idlec.patch
silence numerous size_t warnings in drivers/acpi/processor_idle.c

make-irda-string-tables-conditional-on-config_irda_debug.patch
make IRDA string tables conditional on CONFIG_IRDA_DEBUG

fix-unresolved-mtd-symbols-in-scx200_docflashc.patch
fix unresolved MTD symbols in scx200_docflash.c

fix-module_param-type-mismatch-in-drivers-char-n_hdlcc.patch
fix module_param() type mismatch in drivers/char/n_hdlc.c

drivers-char-misc-cleanups.patch
drivers/char/: misc cleanups

pktcdvd-make-two-functions-static.patch
pktcdvd: make two functions static

pktcdvd-grep-friendly-function-prototypes.patch
pktcdvd: grep-friendly function prototypes

pktcdvd-small-documentation-update.patch
pktcdvd: Small documentation update

isofs-remove-useless-include.patch
isofs: Remove useless include

synaptics-remove-unused-struct-member-variable.patch
synaptics: Remove unused struct member variable

periodically-scan-redzone-entries-and-slab-control-structures.patch
periodically scan redzone entries and slab control structures

kill-one-if-x-vfreex-usage.patch
kill one "if (X) vfree(X)" usage

smbfs-make-some-functions-static.patch
smbfs: make some functions static

#146 lore raw

Re: 2.6.10-mm2

Quoted 2 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

...

Quoted 4 lines

+kexec-kexecx86_64-4level-fix-unfix.patch

Hack to make x86_64 compile. Will break kexec.

It should be enough to just change the ->pml4 to ->pgd. Assuming that it worked with the original 4level patches.

#147 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

Surprisingly, this is what I get for 'make distclean':

scripts/Makefile.clean:10: fs/umsdos/Makefile: No such file or directory make[2]: *** No rule to make target `fs/umsdos/Makefile'. Stop. make[1]: *** [fs/umsdos] Error 2
make: *** [_clean_fs] Error 2

fs/umsdos is practically empty.

Signature · 2 lines
Eyal Lebedinsky ([email protected]) <http://samba.org/eyal/>
	If attaching .zip rename to .dat
#148 lore raw

Re: 2.6.10-mm2

Quoted 3 lines · Eyal Lebedinsky

scripts/Makefile.clean:10: fs/umsdos/Makefile: No such file or directory
make[2]: *** No rule to make target `fs/umsdos/Makefile'. Stop.

fs/Makefile renamed from fs/Makefile~remove-umsdos-from-tree-fix +0 -1
@@ -59,7 +59,6 @@ obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
 obj-$(CONFIG_CODA_FS)		+= coda/
 obj-$(CONFIG_MINIX_FS)		+= minix/
 obj-$(CONFIG_FAT_FS)		+= fat/
-obj-$(CONFIG_UMSDOS_FS)		+= umsdos/
 obj-$(CONFIG_MSDOS_FS)		+= msdos/
 obj-$(CONFIG_VFAT_FS)		+= vfat/
 obj-$(CONFIG_BFS_FS)		+= bfs/

_

#149 lore raw

Re: 2.6.10-mm2

In reply to Eyal Lebedinsky
Quoted 8 lines · Eyal Lebedinsky

Surprisingly, this is what I get for 'make distclean':

scripts/Makefile.clean:10: fs/umsdos/Makefile: No such file or directory make[2]: *** No rule to make target `fs/umsdos/Makefile'. Stop. make[1]: *** [fs/umsdos] Error 2
make: *** [_clean_fs] Error 2

fs/umsdos is practically empty.

I forgot to remove umsdos from fs/Makefile. Here's a patch:

fs/Makefile +0 -1
@@ -57,7 +57,6 @@
 obj-$(CONFIG_CODA_FS)		+= coda/
 obj-$(CONFIG_MINIX_FS)		+= minix/
 obj-$(CONFIG_FAT_FS)		+= fat/
-obj-$(CONFIG_UMSDOS_FS)		+= umsdos/
 obj-$(CONFIG_MSDOS_FS)		+= msdos/
 obj-$(CONFIG_VFAT_FS)		+= vfat/
 obj-$(CONFIG_BFS_FS)		+= bfs/
#150 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

On Thu, 6 Jan 2005, Andrew Morton wrote:
..

Quoted 2 lines

drm-add-support-for-new-multiple-agp-bridge-agpgart-api.patch
drm: add support for new multiple agp bridge agpgart api

..
During compilation some missing files were found.

..
gcc -Wp,-MD,drivers/char/drm/.gamma_drv.o.d -nostdinc -isystem
/usr/lib/gcc-lib/i486-linux/3.3.4/include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -march=i686 -Iinclude/asm-i386/mach-default -DMODULE -DKBUILD_BASENAME=gamma_drv -DKBUILD_MODNAME=gamma -c -o drivers/char/drm/.tmp_gamma_drv.o drivers/char/drm/gamma_drv.c
drivers/char/drm/gamma_drv.c:39:22: drm_auth.h: No such file or directory drivers/char/drm/gamma_drv.c:40:28: drm_agpsupport.h: No such file or directory drivers/char/drm/gamma_drv.c:41:22: drm_bufs.h: No such file or directory In file included from drivers/char/drm/gamma_drv.c:42:
drivers/char/drm/gamma_context.h: In function `gamma_context_switch_complete':
...
drivers/char/drm/gamma_drv.c:43:21: drm_dma.h: No such file or directory In file included from drivers/char/drm/gamma_drv.c:44:
drivers/char/drm/gamma_old_dma.h: In function `gamma_clear_next_buffer':
..
drivers/char/drm/gamma_drv.c:45:26: drm_drawable.h: No such file or directory drivers/char/drm/gamma_drv.c:46:21: drm_drv.h: No such file or directory drivers/char/drm/gamma_drv.c:48:22: drm_fops.h: No such file or directory drivers/char/drm/gamma_drv.c:49:22: drm_init.h: No such file or directory drivers/char/drm/gamma_drv.c:50:23: drm_ioctl.h: No such file or directory drivers/char/drm/gamma_drv.c:51:21: drm_irq.h: No such file or directory
...
drivers/char/drm/gamma_drv.c:53:22: drm_lock.h: No such file or directory
...

#151 lore raw

Re: 2.6.10-mm2

Quoted 14 lines

drivers/char/drm/gamma_drv.c:39:22: drm_auth.h: No such file or directory drivers/char/drm/gamma_drv.c:40:28: drm_agpsupport.h: No such file or directory
drivers/char/drm/gamma_drv.c:41:22: drm_bufs.h: No such file or directory In file included from drivers/char/drm/gamma_drv.c:42:
drivers/char/drm/gamma_context.h: In function `gamma_context_switch_complete':
...
drivers/char/drm/gamma_drv.c:43:21: drm_dma.h: No such file or directory
In file included from drivers/char/drm/gamma_drv.c:44:
drivers/char/drm/gamma_old_dma.h: In function `gamma_clear_next_buffer':
..
drivers/char/drm/gamma_drv.c:45:26: drm_drawable.h: No such file or

Quoted 8 lines

directory
drivers/char/drm/gamma_drv.c:46:21: drm_drv.h: No such file or directory drivers/char/drm/gamma_drv.c:48:22: drm_fops.h: No such file or directory drivers/char/drm/gamma_drv.c:49:22: drm_init.h: No such file or directory drivers/char/drm/gamma_drv.c:50:23: drm_ioctl.h: No such file or directory drivers/char/drm/gamma_drv.c:51:21: drm_irq.h: No such file or directory
...
drivers/char/drm/gamma_drv.c:53:22: drm_lock.h: No such file or directory

gamma drm is marked as broken with good reason..

Dave.

#152 lore raw

PATCH 1/1 m32r: build fix

In reply to Andrew Morton

Hi,

This patch is required to fix compile errors of 2.6.10-bk8 and 2.6.10-mm2 for m32r. Please apply.

This was originally given by the following patch:
[PATCH] move irq_enter and irq_exit to common code
http://www.ussg.iu.edu/hypermail/linux/kernel/0411.1/1738.html

I think it was maybe accidentally dropped only for the m32r arch due to a patching conflict with the other patches or something like that...

Thanks,

---

include/asm-m32r/hardirq.h +0 -12
diff -ruNp a/include/asm-m32r/hardirq.h b/include/asm-m32r/hardirq.h
@@ -27,18 +27,6 @@ typedef struct {
 # error HARDIRQ_BITS is too low!
 #endif
 
-#define irq_enter()		(preempt_count() += HARDIRQ_OFFSET)
-#define nmi_enter()		(irq_enter())
-#define nmi_exit()		(preempt_count() -= HARDIRQ_OFFSET)
-
-#define irq_exit()							\
-do {									\
-		preempt_count() -= IRQ_EXIT_OFFSET;			\
-		if (!in_interrupt() && softirq_pending(smp_processor_id())) \
-			do_softirq();					\
-		preempt_enable_no_resched();				\
-} while (0)
-
 static inline void ack_bad_irq(int irq)
 {
 	printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq);

--
Hirokazu Takata <[email protected]>
Linux/M32R Project: http://www.linux-m32r.org/

#153 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

Review

Quoted 2 lines
(quoted diff) +2 -0
+rio-cli-conversion.patch
+rio_linux-64-bit-workaround.patch

RIO is totally broken on all plattforms, and rio-cli-conversion.patch makes it even more broken with things like:

-#define disable(oldspl) save_flags (oldspl) -#define restore(oldspl) restore_flags (oldspl) +#define disable(oldspl) local_irq_save(oldspl); +#define restore(oldspl) local_irq_restore(oldspl) ;

or

+ if (PortP->gs.flags & ASYNC_CLOSING){
+ interruptible_sleep_on(&PortP->gs.close_wait);
+ }

please drop rio-cli-conversion.patch and mark the driver BROKEN to wait a little before finally removing it unless it'll get a major rewrite.

#154 lore raw

Re: 2.6.10-mm2 error: redefinition of `struct cfq_io_context'

In reply to Andrew Morton
Quoted 6 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

CC init/do_mounts_md.o
In file included from include/linux/raid/md.h:21,

                from init/do_mounts_md.c:2:

include/linux/blkdev.h:71: error: redefinition of `struct cfq_io_context' make[1]: *** [init/do_mounts_md.o] Error 1
make: *** [init] Error 2

#155 lore raw

Re: 2.6.10-mm2 error: redefinition of `struct cfq_io_context'

Quoted 9 lines · Helge Hafting
Quoted 7 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

Quoted 6 lines

CC init/do_mounts_md.o
In file included from include/linux/raid/md.h:21,

                from init/do_mounts_md.c:2:

include/linux/blkdev.h:71: error: redefinition of `struct cfq_io_context' make[1]: *** [init/do_mounts_md.o] Error 1
make: *** [init] Error 2

Never mind, it was a patching error.

Helge Hafting

#156 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 3 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

The acpi_power_off issue (acpi_power_off is called but the laptop doesn't shut down) is back (in -mm1 already). I suspect it has never disappear completely:
maybe it only happens in some cenarios (like "only when AC is plugged in" or something like that). The report is done, I'll try to get more info soon (when does this happen and when it doesn't) and will report it by then.

Mind Booster Noori

- -- /* *************************************************************** */
Marcos Daniel Marado Torres AKA Mind Booster Noori
http://student.dei.uc.pt/~marado - [email protected]
() Join the ASCII ribbon campaign against html email, Microsoft
/\ attachments and Software patents. They endanger the World.
Sign a petition against patents: http://petition.eurolinux.org
/* *************************************************************** */ -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: Made with pgp4pine 1.76

iD8DBQFB3SnFmNlq8m+oD34RAk0+AJ97ZQZI0a+JuGT3uXG+w/sSjtcP6ACfVbCJ dP7EcQYa+xXN4OyuQpO4cvU=
=13Cu
-----END PGP SIGNATURE-----

#157 lore raw

acpi_power_off on 2.6.10-mm3 WAS: Re: 2.6.10-mm2

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 11 lines · Marcos D. Marado Torres
Quoted 3 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

The acpi_power_off issue (acpi_power_off is called but the laptop doesn't shut down) is back (in -mm1 already). I suspect it has never disappear completely:
maybe it only happens in some cenarios (like "only when AC is plugged in" or something like that). The report is done, I'll try to get more info soon (when does this happen and when it doesn't) and will report it by then.

This still happens in -mm3.
I'll try to see which patch is breaking it...

Mind Booster Noori

- -- /* *************************************************************** */
Marcos Daniel Marado Torres AKA Mind Booster Noori
http://student.dei.uc.pt/~marado - [email protected]
() Join the ASCII ribbon campaign against html email, Microsoft
/\ attachments and Software patents. They endanger the World.
Sign a petition against patents: http://petition.eurolinux.org
/* *************************************************************** */ -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: Made with pgp4pine 1.76

iD8DBQFB493XmNlq8m+oD34RAjSXAJ0UeQfsEeBCje8GX9MJCJNw4RnUFwCg10yi zFdcErqu1E3CVYgvFZa3Thg=
=stjp
-----END PGP SIGNATURE-----

#158 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton
Quoted 1 line · Andrew Morton

bk-kconfig.patch

Improves the search function in menuconfig - better display of what a symbol depends on / selects.
Also display the same information when getting help on a symbol.

Try it out next time you start up menuconfig.

Kudos to Roman Zippel for implementing the core functionality.

Sam

#159 lore raw

Re: 2.6.10-mm2

Quoted 10 lines · Sam Ravnborg
Quoted 1 line · Andrew Morton

bk-kconfig.patch

Improves the search function in menuconfig - better display of what a symbol depends on / selects.
Also display the same information when getting help on a symbol.

Try it out next time you start up menuconfig.

Kudos to Roman Zippel for implementing the core functionality.

Very nice :-)
Thanks!

#160 lore raw

PATCH 1/1 fget_light/fput_light for ioctls

In reply to Andrew Morton

Hello!
With new unlocked_ioctl and ioctl_compat, ioctls can now be as fast as read/write.
So lets use fget_light/fput_light there, to get some speedup in common case on SMP.

mst

fs/compat.c +3 -2
diff -rup linux-2.6.10/fs/compat.c linux-2.6.10-ioctls/fs/compat.c
@@ -431,8 +431,9 @@ asmlinkage long compat_sys_ioctl(unsigne
 	struct file *filp;
 	int error = -EBADF;
 	struct ioctl_trans *t;
+	int fput_needed;
 
-	filp = fget(fd);
+	filp = fget_light(fd, &fput_needed);
 	if (!filp)
 		goto out;
 
@@ -476,7 +479,7 @@ asmlinkage long compat_sys_ioctl(unsigne
  do_ioctl:
 	error = sys_ioctl(fd, cmd, arg);
  out_fput:
-	fput(filp);
+	fput_light(file, fput_needed);
  out:
 	return error;
 }
fs/ioctl.c +3 -2
diff -rup linux-2.6.10/fs/ioctl.c linux-2.6.10-ioctls/fs/ioctl.c
@@ -80,8 +83,9 @@ asmlinkage long sys_ioctl(unsigned int f
 	struct file * filp;
 	unsigned int flag;
 	int on, error = -EBADF;
+	int fput_needed;
 
-	filp = fget(fd);
+	filp = fget_light(fd, &fput_needed);
 	if (!filp)
 		goto out;
 
@@ -154,7 +158,7 @@ asmlinkage long sys_ioctl(unsigned int f
 			break;
 	}
  out_fput:
-	fput(filp);
+	fput_light(filp, fput_needed);
  out:
 	return error;
 }
#161 lore raw

PATCH 1/1 fget_light/fput_light for ioctls (fixed)

Hello!
Sorry, that patch had a typo. Here's an updated version.

Quoted 1 line
Quoted 1 line
Quoted 1 line

Quoting r. Michael S. Tsirkin ([email protected])

With new unlocked_ioctl and ioctl_compat, ioctls can now be as fast as read/write. So lets use fget_light/fput_light there, to get some speedup in common case on SMP.

mst

fs/compat.c +3 -2
diff -rup linux-2.6.10/fs/compat.c linux-2.6.10-ioctls/fs/compat.c
@@ -431,8 +431,9 @@ asmlinkage long compat_sys_ioctl(unsigne
 	struct file *filp;
 	int error = -EBADF;
 	struct ioctl_trans *t;
+	int fput_needed;
 
-	filp = fget(fd);
+	filp = fget_light(fd, &fput_needed);
 	if (!filp)
 		goto out;
 
@@ -476,7 +479,7 @@ asmlinkage long compat_sys_ioctl(unsigne
  do_ioctl:
 	error = sys_ioctl(fd, cmd, arg);
  out_fput:
-	fput(filp);
+	fput_light(filp, fput_needed);
  out:
 	return error;
 }
fs/ioctl.c +3 -2
diff -rup linux-2.6.10/fs/ioctl.c linux-2.6.10-ioctls/fs/ioctl.c
@@ -80,8 +83,9 @@ asmlinkage long sys_ioctl(unsigned int f
 	struct file * filp;
 	unsigned int flag;
 	int on, error = -EBADF;
+	int fput_needed;
 
-	filp = fget(fd);
+	filp = fget_light(fd, &fput_needed);
 	if (!filp)
 		goto out;
 
@@ -154,7 +158,7 @@ asmlinkage long sys_ioctl(unsigned int f
 			break;
 	}
  out_fput:
-	fput(filp);
+	fput_light(filp, fput_needed);
  out:
 	return error;
 }
#162 lore raw

PATCH 1/1 2.6.10-mm2: remove umsdos MAINTAINERS entry

In reply to Andrew Morton

With umsdos gone, there's no longer a MAINTAINERS entry required.

MAINTAINERS renamed from MAINTAINERS.old +0 -7
@@ -2266,13 +2266,6 @@
 W:	http://linux-udf.sourceforge.net
 S:	Maintained
 
-UMSDOS FILESYSTEM
-P:	Matija Nalis
-M:	Matija Nalis <[email protected]>
-L:	[email protected]
-W:	http://linux.voyager.hr/umsdos/
-S:	Maintained
-
 UNIFORM CDROM DRIVER
 P:	Jens Axboe
 M:	[email protected]
#163 lore raw

PATCH 1/1 2.6.10-mm2: fix MTD_BLOCK2MTD dependency

In reply to Andrew Morton

The patch below fixes an obviously wrong dependency coming from Linus' tree.

drivers/mtd/devices/Kconfig renamed from drivers/mtd/devices/Kconfig.old +1 -1
@@ -127,7 +127,7 @@
 
 config MTD_BLOCK2MTD
 	tristate "MTD using block device (rewrite)"
-	depends on MTD || EXPERIMENTAL
+	depends on MTD && EXPERIMENTAL
 	help
 	  This driver is basically the same at MTD_BLKMTD above, but
 	  experienced some interface changes plus serious speedups.  In
#164 lore raw

Re: [patch] 2.6.10-mm2: fix MTD_BLOCK2MTD dependency

Quoted 3 lines · Adrian Bunk

The patch below fixes an obviously wrong dependency coming from Linus' tree.

Acked.

Thanks!

drivers/mtd/devices/Kconfig line 133

Quoted 13 lines
drivers/mtd/devices/Kconfig renamed from drivers/mtd/devices/Kconfig.old +1 -1
@@ -127,7 +127,7 @@
 
 config MTD_BLOCK2MTD
 	tristate "MTD using block device (rewrite)"
-	depends on MTD || EXPERIMENTAL
+	depends on MTD && EXPERIMENTAL
 	help
 	  This driver is basically the same at MTD_BLKMTD above, but
 	  experienced some interface changes plus serious speedups.  In

Jörn

Signature · 3 lines
Fancy algorithms are buggier than simple ones, and they're much harder
to implement. Use simple algorithms as well as simple data structures.
-- Rob Pike
#165 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

Am Donnerstag, 6. Januar 2005 09:22 schrieben Sie:

Quoted 4 lines

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10 -mm2/

- Various minorish updates and fixes

Booting with 2.6.10-mm2 results in:

Jan  6 18:05:39 t40 kernel: agpgart: Putting AGP V2 device at 0000:01:00.0 
into 4x mode
Jan  6 18:05:39 t40 kernel: Unable to handle kernel NULL pointer dereference 
at virtual address 00000004
Jan  6 18:05:39 t40 kernel:  printing eip:
Jan  6 18:05:39 t40 kernel: c02ae588
Jan  6 18:05:39 t40 kernel: *pde = 1dd40067
Jan  6 18:05:39 t40 kernel: *pte = 00000000
Jan  6 18:05:39 t40 kernel: Oops: 0000 [#1]
Jan  6 18:05:39 t40 kernel: PREEMPT 
Jan  6 18:05:39 t40 kernel: Modules linked in: uhci_hcd irtty_sir sir_dev
Jan  6 18:05:39 t40 kernel: CPU:    0
Jan  6 18:05:39 t40 kernel: EIP:    0060:[<c02ae588>]    Not tainted VLI
Jan  6 18:05:39 t40 kernel: EFLAGS: 00013246   (2.6.10-mm2-orig) 
Jan  6 18:05:39 t40 kernel: EIP is at agp_bind_memory+0x58/0x80
Jan  6 18:05:39 t40 kernel: eax: 00000000   ebx: 00000000   ecx: 00000000   
edx: 00000000
Jan  6 18:05:39 t40 kernel: esi: dd8f5ac0   edi: 00000000   ebp: dd8f5b40   
esp: df2d3f0c
Jan  6 18:05:39 t40 kernel: ds: 007b   es: 007b   ss: 0068
Jan  6 18:05:39 t40 kernel: Process X (pid: 2357, threadinfo=df2d2000 
task=df9ae060)
Jan  6 18:05:39 t40 kernel: Stack: bffffa50 c0246fd4 00000000 c14fb800 
df474ce0 c02ba20f df2d3f24 df2d3f24 
Jan  6 18:05:39 t40 kernel:        00000000 00000004 00000001 00000000 
c14fb800 00000036 c02ba180 c02b5ce5 
Jan  6 18:05:39 t40 kernel:        bffffa50 00000000 df2d3ef0 df2d3f58 
df2d3f58 00000008 00000000 40086436 
Jan  6 18:05:39 t40 kernel: Call Trace:
Jan  6 18:05:39 t40 kernel:  [<c0246fd4>] copy_from_user+0x34/0x70
Jan  6 18:05:39 t40 kernel:  [<c02ba20f>] drm_agp_bind+0x8f/0xe0
Jan  6 18:05:39 t40 kernel:  [<c02ba180>] drm_agp_bind+0x0/0xe0
Jan  6 18:05:39 t40 kernel:  [<c02b5ce5>] drm_ioctl+0xe5/0x1bc
Jan  6 18:05:39 t40 kernel:  [<c0162a9a>] do_ioctl+0x6a/0x80
Jan  6 18:05:39 t40 kernel:  [<c0162cb4>] sys_ioctl+0x74/0x1f0
Jan  6 18:05:39 t40 kernel:  [<c0151c07>] sys_write+0x47/0x80
Jan  6 18:05:39 t40 kernel:  [<c0102f11>] sysenter_past_esp+0x52/0x75
Jan  6 18:05:39 t40 kernel: Code: 8b 4e 20 8b 58 04 89 f0 ff 53 40 85 c0 75 09 

c6 46 28 01 31 c0 89 7e 1c 8b 5c 24 08 8b 74 24 0c 8b 7c 24 10 83 c4 14 c3 8b 46 08 <8b> 40 04 ff 50 34 c6 46 29 01 eb c4 89 74 24 04 c7 04 24 80 6a

Y stays black, I need sysrq to reboot. mm1 works fine. 0000:00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev
03)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [Radeon Mobility 9000 M9] (rev 02)
kernel config at
http://zodiac.dnsalias.org/misc/config-2.6.10-mm2

regards
Alex

Signature · 2 lines
Encrypted Mails welcome.
PGP-Key at http://zodiac.dnsalias.org/misc/pgpkey.asc | Key-ID: 0x6D7DD291
#166 lore raw

Re: 2.6.10-mm2

Quoted 5 lines · El Thu, 6 Jan 2005 18:11:51 +0100 Alexander Gran <[email protected]>…

Y stays black, I need sysrq to reboot. mm1 works fine. 0000:00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev
03)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [Radeon Mobility 9000 M9] (rev 02)

I was going to report that bug, too. Mine is a p3 with:
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev c4) 0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo MVP3/Pro133x AGP] 0000:00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40) 0000:00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06) 0000:00:07.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 16) 0000:00:07.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 16) 0000:00:07.4 Bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
0000:00:07.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 50) 0000:01:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 SE] (rev 01)

and using x.org

#167 lore raw

Re: 2.6.10-mm2

Quoted 21 lines · On Thu, 6 Jan 2005 18:55:29 +0100 Diego Calleja <[email protected]> wrote:
Quoted 5 lines · El Thu, 6 Jan 2005 18:11:51 +0100 Alexander Gran <[email protected]>…

Y stays black, I need sysrq to reboot. mm1 works fine. 0000:00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev
03)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [Radeon Mobility 9000 M9] (rev 02)

I was going to report that bug, too. Mine is a p3 with:
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev c4) 0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo MVP3/Pro133x AGP] 0000:00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40) 0000:00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06) 0000:00:07.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 16) 0000:00:07.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 16) 0000:00:07.4 Bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
0000:00:07.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 50) 0000:01:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 SE] (rev 01)

Quoted 1 line

and using x.org

You use via-agp. That's fine, since I get the same oops on nvidia-agp. So the common piece seems to be radeon drm.

The oops can be avoided by reverting agpgart-add-bridge-parameter-to-driver-functions.patch agpgart-allow-multiple-backends-to-be-initialized.patch drm-add-support-for-new-multiple-agp-bridge-agpgart-api.patch

Regards

(For some reason, ksymoops does't like my /proc/kallsyms)

ksymoops 2.4.9 on i686 2.6.10-mm2. Options used

     -v /home/marc/source/kernel/tmp/linux-2.6.10-mm2/vmlinux (specified)
     -k /home/marc/KALLSYMS (specified)
     -l /home/marc/MODULES (specified)
     -o /lib/modules/2.6.10-mm2 (specified)
     -m /home/marc/source/kernel/tmp/linux-2.6.10-mm2/System.map (specified)

Warning (read_ksyms): no kernel symbols in ksyms, is /home/marc/KALLSYMS a valid ksyms file? No modules in ksyms, skipping objects
No ksyms, skipping lsmod

Unable to handle kernel NULL pointer dereference at virtual address 00000004
f88e68a8
*pde = 34401067
Oops: 0000 [#1]
CPU:    0
EIP:    0060:[<f88e68a8>]    Not tainted VLI

Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00013246 (2.6.10-mm2)
eax: 00000000 ebx: 00000000 ecx: 00000000 edx: 00000000
esi: f5c154a0 edi: 00000000 ebp: f58a2320 esp: f6e43f1c
ds: 007b es: 007b ss: 0068

Stack: bffff2c0 c01c3df4 00000000 f7c16800 f7591ea0 f8948eac f8948d2f 00800000 
       00000001 00000000 00000001 00000000 f7c16800 00000036 f8948e20 f8944c15 
       bffff2c0 00000003 f6e42000 c01549cb 000002d0 f7fea880 c0308ac0 40086436 
Call Trace:
 [<c01c3df4>] copy_from_user+0x34/0x80
 [<f8948eac>] drm_agp_bind+0x8c/0xe0 [drm]
 [<f8948d2f>] drm_agp_alloc+0x10f/0x160 [drm]
 [<f8948e20>] drm_agp_bind+0x0/0xe0 [drm]
 [<f8944c15>] drm_ioctl+0xe5/0x1ab [drm]
 [<c01549cb>] sys_fstat64+0x2b/0x30
 [<f8944b30>] drm_ioctl+0x0/0x1ab [drm]
 [<c015bad0>] do_ioctl+0x50/0x60
 [<c015bc8e>] sys_ioctl+0x6e/0x1e0
 [<c0102d99>] sysenter_past_esp+0x52/0x75
Code: 20 89 fa 8b 58 04 89 f0 ff 53 40 85 c0 75 09 c6 46 28 01 89 7e 1c 31 c0 8b 5c 24 08 8b 74 24 0c 8b 7c 24 10 83 c4 14 c3 8b 46 08 <8b> 40 04 ff 50 34 c6 46 29 01 eb c4 89 74 24 04 c7 04 24 5c 86 
Quoted 5 lines
Quoted 5 lines

EIP; f88e68a8 <pg0+3851b8a8/3fc33400> <=====

esi; f5c154a0 <pg0+3584a4a0/3fc33400>
ebp; f58a2320 <pg0+354d7320/3fc33400>
esp; f6e43f1c <pg0+36a78f1c/3fc33400>

Trace; c01c3df4 <copy_from_user+34/80>
Trace; f8948eac <pg0+3857deac/3fc33400>
Trace; f8948d2f <pg0+3857dd2f/3fc33400>
Trace; f8948e20 <pg0+3857de20/3fc33400>
Trace; f8944c15 <pg0+38579c15/3fc33400>
Trace; c01549cb <sys_fstat64+2b/30>
Trace; f8944b30 <pg0+38579b30/3fc33400>
Trace; c015bad0 <do_ioctl+50/60>
Trace; c015bc8e <sys_ioctl+6e/1e0>
Trace; c0102d99 <sysenter_past_esp+52/75>

This architecture has variable length instructions, decoding before eip is unreliable, take these instructions with a pinch of salt.

Code; f88e687d <pg0+3851b87d/3fc33400>
00000000 <_EIP>:
Code; f88e687d <pg0+3851b87d/3fc33400>
0: 20 89 fa 8b 58 04 and %cl,0x4588bfa(%ecx)
Code; f88e6883 <pg0+3851b883/3fc33400>
6: 89 f0 mov %esi,%eax
Code; f88e6885 <pg0+3851b885/3fc33400>
8: ff 53 40 call *0x40(%ebx)
Code; f88e6888 <pg0+3851b888/3fc33400>
b: 85 c0 test %eax,%eax
Code; f88e688a <pg0+3851b88a/3fc33400>
d: 75 09 jne 18 <_EIP+0x18>
Code; f88e688c <pg0+3851b88c/3fc33400>
f: c6 46 28 01 movb $0x1,0x28(%esi)
Code; f88e6890 <pg0+3851b890/3fc33400>
13: 89 7e 1c mov %edi,0x1c(%esi)
Code; f88e6893 <pg0+3851b893/3fc33400>
16: 31 c0 xor %eax,%eax
Code; f88e6895 <pg0+3851b895/3fc33400>
18: 8b 5c 24 08 mov 0x8(%esp),%ebx
Code; f88e6899 <pg0+3851b899/3fc33400>
1c: 8b 74 24 0c mov 0xc(%esp),%esi
Code; f88e689d <pg0+3851b89d/3fc33400>
20: 8b 7c 24 10 mov 0x10(%esp),%edi
Code; f88e68a1 <pg0+3851b8a1/3fc33400>
24: 83 c4 14 add $0x14,%esp
Code; f88e68a4 <pg0+3851b8a4/3fc33400>
27: c3 ret
Code; f88e68a5 <pg0+3851b8a5/3fc33400>
28: 8b 46 08 mov 0x8(%esi),%eax

This decode from eip onwards should be reliable

Code; f88e68a8 <pg0+3851b8a8/3fc33400>
00000000 <_EIP>:
Code; f88e68a8 <pg0+3851b8a8/3fc33400> <=====
0: 8b 40 04 mov 0x4(%eax),%eax <=====
Code; f88e68ab <pg0+3851b8ab/3fc33400>
3: ff 50 34 call *0x34(%eax)
Code; f88e68ae <pg0+3851b8ae/3fc33400>
6: c6 46 29 01 movb $0x1,0x29(%esi)
Code; f88e68b2 <pg0+3851b8b2/3fc33400>
a: eb c4 jmp ffffffd0 <_EIP+0xffffffd0>
Code; f88e68b4 <pg0+3851b8b4/3fc33400>
c: 89 74 24 04 mov %esi,0x4(%esp)
Code; f88e68b8 <pg0+3851b8b8/3fc33400>
10: c7 .byte 0xc7
Code; f88e68b9 <pg0+3851b8b9/3fc33400>
11: 04 24 add $0x24,%al
Code; f88e68bb <pg0+3851b8bb/3fc33400>
13: 5c pop %esp
Code; f88e68bc <pg0+3851b8bc/3fc33400>
14: 86 .byte 0x86

1 warning issued. Results may not be reliable.

0000:00:00.0 Host bridge: nVidia Corporation nForce2 AGP (different version?) (rev c1) 0000:00:00.1 RAM memory: nVidia Corporation nForce2 Memory Controller 1 (rev c1) 0000:00:00.2 RAM memory: nVidia Corporation nForce2 Memory Controller 4 (rev c1) 0000:00:00.3 RAM memory: nVidia Corporation nForce2 Memory Controller 3 (rev c1) 0000:00:00.4 RAM memory: nVidia Corporation nForce2 Memory Controller 2 (rev c1) 0000:00:00.5 RAM memory: nVidia Corporation nForce2 Memory Controller 5 (rev c1) 0000:00:01.0 ISA bridge: nVidia Corporation nForce2 ISA Bridge (rev a3)
0000:00:01.1 SMBus: nVidia Corporation nForce2 SMBus (MCP) (rev a2)
0000:00:02.0 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:02.1 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:02.2 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:04.0 Ethernet controller: nVidia Corporation nForce2 Ethernet Controller (rev a1) 0000:00:06.0 Multimedia audio controller: nVidia Corporation nForce2 AC97 Audio Controler (MCP) (rev a1) 0000:00:08.0 PCI bridge: nVidia Corporation nForce2 External PCI Bridge (rev a3) 0000:00:09.0 IDE interface: nVidia Corporation nForce2 IDE (rev a2)
0000:00:1e.0 PCI bridge: nVidia Corporation nForce2 AGP (rev c1)
0000:01:07.0 Multimedia audio controller: Ensoniq 5880 AudioPCI (rev 02)
0000:01:0a.0 Unknown mass storage controller: Promise Technology, Inc. 20268 (rev 02) 0000:01:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) 0000:01:0d.0 FireWire (IEEE 1394): Lucent Microelectronics FW323 (rev 61)
0000:02:00.0 VGA compatible controller: ATI Technologies Inc Radeon R200 QL [Radeon 8500 LE]

#168 lore raw

Re: 2.6.10-mm2: swsusp regression

In reply to Andrew Morton
Quoted 2 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely, 2.6.10-mm2 does not suspend, but hangs solid right after the critical section, 100% of the time.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#169 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi!

Quoted 7 lines

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely, 2.6.10-mm2 does not suspend, but hangs solid right after the critical section, 100% of the time.

can you comment out device_power_{down,up} from swsusp_{suspend,resume} and see what happens?
Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#170 lore raw

Re: 2.6.10-mm2: swsusp regression

Quoted 3 lines · Pavel Machek

Hi!

Quoted 1 line

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 4 lines
Quoted 4 lines
Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely,

2.6.10-mm2

Quoted 1 line
Quoted 1 line

does not suspend, but hangs solid right after the critical section, 100%

of

Quoted 4 lines
Quoted 1 line

the time.

can you comment out device_power_{down,up} from
swsusp_{suspend,resume} and see what happens?

It works just fine.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#171 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi!

Quoted 6 lines

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 4 lines
Quoted 4 lines
Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely,

2.6.10-mm2

Quoted 8 lines
Quoted 1 line
Quoted 1 line

does not suspend, but hangs solid right after the critical section, 100%

of

Quoted 4 lines
Quoted 1 line

the time.

can you comment out device_power_{down,up} from
swsusp_{suspend,resume} and see what happens?

It works just fine.

Ok, problem is that device_power_{down,up} is right thing, and neccessary for many machines to work...

...so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Go after mtrr and time in first places.
Pavel
PS: Probably drop andrew from reply; he probably gets enough mail anyway. I want this one to go to him so that he does not back up the patch, through.

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#172 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi.

AMD64 doesn't have MTRRs, does it? If it does, I'd bet on an SMP hang.

Nigel

Quoted 29 lines · Pavel Machek

Hi!

Quoted 6 lines

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 4 lines
Quoted 4 lines
Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely,

2.6.10-mm2

Quoted 8 lines
Quoted 1 line
Quoted 1 line

does not suspend, but hangs solid right after the critical section, 100%

of

Quoted 4 lines
Quoted 1 line

the time.

can you comment out device_power_{down,up} from
swsusp_{suspend,resume} and see what happens?

It works just fine.

Ok, problem is that device_power_{down,up} is right thing, and neccessary for many machines to work...

...so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Go after mtrr and time in first places.
Pavel
PS: Probably drop andrew from reply; he probably gets enough mail anyway. I want this one to go to him so that he does not back up the patch, through.

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#173 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi!

Quoted 2 lines

AMD64 doesn't have MTRRs, does it? If it does, I'd bet on an SMP hang.

I bet AMD64 does have MTRRs. It is backward compatible to i386, remember?

Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#174 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi.

Quoted 7 lines · Pavel Machek

Hi!

Quoted 2 lines

AMD64 doesn't have MTRRs, does it? If it does, I'd bet on an SMP hang.

I bet AMD64 does have MTRRs. It is backward compatible to i386, remember?

Makes sense. I just have this idea that I was told it doesn't :> *shrug*

Nigel

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#175 lore raw

Re: 2.6.10-mm2: swsusp regression

In reply to Pavel Machek
Quoted 3 lines · Pavel Machek

Hi!

Quoted 1 line

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
Quoted 4 lines
Quoted 2 lines

- Various minorish updates and fixes

There's an swsusp regression on my box (AMD64) wrt -mm1. Namely,

2.6.10-mm2

Quoted 1 line
Quoted 1 line

does not suspend, but hangs solid right after the critical section,

100%

Quoted 10 lines
Quoted 7 lines

of

Quoted 4 lines
Quoted 1 line

the time.

can you comment out device_power_{down,up} from
swsusp_{suspend,resume} and see what happens?

It works just fine.

Ok, problem is that device_power_{down,up} is right thing, and neccessary for many machines to work...

It's OK, as long as I know what to comment out. ;-)

Quoted 5 lines

..so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Go after mtrr and time in first places.

OK, but it'll take some time.

Quoted 4 lines

Pavel
PS: Probably drop andrew from reply; he probably gets enough mail anyway. I want this one to go to him so that he does not back up the patch, through.

OK

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#176 lore raw

Re: 2.6.10-mm2: swsusp regression

Hi.

Quoted 7 lines · Rafael J. Wysocki
Quoted 5 lines

..so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Go after mtrr and time in first places.

OK, but it'll take some time.

There's an MTRR fix in the -overloaded ck patches. Perhaps it is what you're after. (Or perhaps it's already included :>)

http://kem.p.lodz.pl/~peter/cko/fixes/2.6.10-cko1-swsusp_fix.patch

Regards,

Nigel

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#177 lore raw

Re: 2.6.10-mm2: swsusp regression

Quoted 7 lines · Nigel Cunningham

Hi.

Quoted 4 lines · Rafael J. Wysocki
Quoted 4 lines

..so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Quoted 8 lines
Quoted 3 lines
Quoted 1 line

Go after mtrr and time in first places.

OK, but it'll take some time.

There's an MTRR fix in the -overloaded ck patches. Perhaps it is what you're after. (Or perhaps it's already included :>)

http://kem.p.lodz.pl/~peter/cko/fixes/2.6.10-cko1-swsusp_fix.patch

Thanks for pointing it out. I have adapted this patch to -mm2, but unfortunately it does not fix the issue. Still searching. ;-)

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#178 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Quoted 12 lines · Rafael J. Wysocki
Quoted 11 lines · Nigel Cunningham

Hi.

Quoted 7 lines · Rafael J. Wysocki
Quoted 5 lines

..so... could you go through sysdev_register()s, one by one, commenting them to see which one causes the regression? That driver then needs to be fixed.

Go after mtrr and time in first places.

OK, but it'll take some time.

Quoted 7 lines
Quoted 4 lines

There's an MTRR fix in the -overloaded ck patches. Perhaps it is what you're after. (Or perhaps it's already included :>)

http://kem.p.lodz.pl/~peter/cko/fixes/2.6.10-cko1-swsusp_fix.patch

Thanks for pointing it out. I have adapted this patch to -mm2, but unfortunately it does not fix the issue. Still searching. ;-)

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

It looks like a locking problem to me. I'll try to find a fix, although someone who knows more about these things would probably do it faster. :-)

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#179 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi.

Quoted 5 lines · Rafael J. Wysocki

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

It looks like a locking problem to me. I'll try to find a fix, although someone who knows more about these things would probably do it faster. :-)

Can I get you to take a look at the patches I just posted; they might need some more work for x86_64, but may be helpful.

Regards,

Nigel

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#180 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

In reply to Rafael J. Wysocki

Hi!

Quoted 8 lines
Quoted 2 lines

Thanks for pointing it out. I have adapted this patch to -mm2, but unfortunately it does not fix the issue. Still searching. ;-)

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

It looks like a locking problem to me. I'll try to find a fix, although someone who knows more about these things would probably do it faster. :-)

(I do not have time right now, but...)

...you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.
Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#181 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Quoted 8 lines · Pavel Machek

Hi!

Quoted 6 lines
Quoted 2 lines

Thanks for pointing it out. I have adapted this patch to -mm2, but unfortunately it does not fix the issue. Still searching. ;-)

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

Quoted 7 lines
Quoted 2 lines

It looks like a locking problem to me. I'll try to find a fix, although someone who knows more about these things would probably do it faster. :-)

(I do not have time right now, but...)

..you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.

Well, I need the help of The Wise. :-)

If I comment out only the modification of jiffies in timer_resume() in arch/x86_64/kernel/time.c (ie line 986), everything seems to work, but I get "APIC error on CPU0: 00(00)" after device_power_up(), which seems strange to me, because I boot with "noapic". On the other hand, if it's not commented out (ie jiffies _is_ modified in timer_resume()), the machine hangs solid after executing device_power_up() in swsusp_suspend().

Right now I have no idea of what happens there, and it seems strange because in 2.6.10-mm1 the code in time.c is the same.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#182 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi!

Quoted 14 lines
Quoted 6 lines
Quoted 6 lines
Quoted 2 lines

Thanks for pointing it out. I have adapted this patch to -mm2, but unfortunately it does not fix the issue. Still searching. ;-)

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

Quoted 7 lines
Quoted 2 lines

It looks like a locking problem to me. I'll try to find a fix, although someone who knows more about these things would probably do it faster. :-)

(I do not have time right now, but...)

..you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.

Quoted 8 lines

Well, I need the help of The Wise. :-)

If I comment out only the modification of jiffies in timer_resume() in arch/x86_64/kernel/time.c (ie line 986), everything seems to work, but I get "APIC error on CPU0: 00(00)" after device_power_up(), which seems strange to me, because I boot with "noapic". On the other hand, if it's not commented out (ie jiffies _is_ modified in timer_resume()), the machine hangs solid after executing device_power_up() in swsusp_suspend().

Perhaps calling handle_lost_ticks() like timer_interrupt does is right thing to do?

Quoted 2 lines

Right now I have no idea of what happens there, and it seems strange because in 2.6.10-mm1 the code in time.c is the same.

Well, but in -mm1, the code is not actually called, right?

Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#183 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

H,

On Saturday, 8 of January 2005 16:44, Pavel Machek wrote:
[-- snip --]

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

[-- snip --]

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

..you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.

Well, I've changed timer_resume() in arch/x86_64/kernel/time.c into the following function:

static int timer_resume(struct sys_device *dev)

{
	unsigned long flags;
	unsigned long sec;
	unsigned long ctime = get_cmos_time();
	long sleep_length = (ctime - sleep_start) * HZ;

	if (vxtime.hpet_address)
		hpet_reenable();

	sec = ctime + clock_cmos_diff;
	write_seqlock_irqsave(&xtime_lock,flags);
	xtime.tv_sec = sec;
	xtime.tv_nsec = 0;
	write_sequnlock_irqrestore(&xtime_lock,flags);
	printk ("jiffies = %lu, sleep_length = %ld\n", jiffies, sleep_length);
	return 0;
}

and that's what I get from the log:

Jan 12 19:43:42 albercik kernel: jiffies = 4294847120, sleep_length = 

-3189288131000

(for example - the second number is always negative and huge). Would it mean that get_cmos_time() needs fixing?

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#184 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi!

Quoted 11 lines

[-- snip --]

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it go away.

[-- snip --]

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

..you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.

Well, I've changed timer_resume() in arch/x86_64/kernel/time.c into the following function:

Ugh, looking at arch/i386/kernel/time.c... "This could have never worked".

It does something like get_cmos_time() - get_cmos_time()*HZ. It looks seriously wrong.

Quoted 2 lines

(for example - the second number is always negative and huge). Would it mean that get_cmos_time() needs fixing?

get_cmos_time() looks okay, but timer){suspend,resume} looks hopelessly broken.

Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#185 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Quoted 5 lines · Pavel Machek

Hi!

Quoted 3 lines

[-- snip --]

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

The regression is caused by the timer driver. Obviously, turning timer_resume() in arch/x86_64/kernel/time.c into a NOOP makes it

go

Quoted 6 lines
Quoted 6 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

away.

[-- snip --]

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

..you might want to look at i386 time code, they have common ancestor, and i386 one seems to work.

Quoted 10 lines
Quoted 2 lines

Well, I've changed timer_resume() in arch/x86_64/kernel/time.c into the following function:

Ugh, looking at arch/i386/kernel/time.c... "This could have never worked".

It does something like get_cmos_time() - get_cmos_time()*HZ. It looks seriously wrong.

Quoted 1 line

(for example - the second number is always negative and huge). Would it

mean

Quoted 4 lines
Quoted 1 line

that get_cmos_time() needs fixing?

get_cmos_time() looks okay, but timer){suspend,resume} looks hopelessly broken.

Well, why don't we convert them to noops, then, at least temporarily?

RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#186 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi!

Quoted 8 lines
Quoted 1 line
Quoted 1 line

(for example - the second number is always negative and huge). Would it

mean

Quoted 4 lines
Quoted 1 line

that get_cmos_time() needs fixing?

get_cmos_time() looks okay, but timer){suspend,resume} looks hopelessly broken.

Well, why don't we convert them to noops, then, at least temporarily?

Actually, it was my analysis that was wrong. Did you try Nigel's trick with updating wall_jiffies?
Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#187 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi.

Quoted 6 lines · Pavel Machek

Hi!

Quoted 4 lines
Quoted 1 line
Quoted 1 line

(for example - the second number is always negative and huge). Would it

mean

Quoted 2 lines
Quoted 1 line

that get_cmos_time() needs fixing?

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines

get_cmos_time() looks okay, but timer){suspend,resume} looks hopelessly broken.

Well, why don't we convert them to noops, then, at least temporarily?

Actually, it was my analysis that was wrong. Did you try Nigel's trick with updating wall_jiffies?

That bit's not mine.

Regards,

Nigel

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#188 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

In reply to Pavel Machek

Hi,

Quoted 3 lines · Pavel Machek

Hi!

Quoted 1 line
Quoted 1 line
Quoted 1 line

(for example - the second number is always negative and huge). Would

it

Quoted 10 lines
Quoted 7 lines

mean

Quoted 4 lines
Quoted 1 line

that get_cmos_time() needs fixing?

get_cmos_time() looks okay, but timer){suspend,resume} looks hopelessly broken.

Well, why don't we convert them to noops, then, at least temporarily?

Actually, it was my analysis that was wrong. Did you try Nigel's trick with updating wall_jiffies?

Do you mean to add

wall_jiffies += (ctime - sleep_start) * HZ;

or an equivalent at the end of timer_resume()? I did and it helped a little. With it, the box hangs while executing device_resume() in swsusp_write(). Without it, the box hangs earlier.

Still, it's sleep_start that has a wrong value, apparently (it shouldn't be negative, at least), and I see that Nigel has a patch that changes __get_cmos_time() on x86_64. I'm going to try it in a couple of minutes.

Greets,
RJW

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#189 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

Hi.

Quoted 3 lines · Rafael J. Wysocki

Still, it's sleep_start that has a wrong value, apparently (it shouldn't be negative, at least), and I see that Nigel has a patch that changes __get_cmos_time() on x86_64. I'm going to try it in a couple of minutes.

I sent a group of four patches, I think on Saturday. The first one is the one Pavel wrongly attributed to me. The other three are mine. I think you might need all four to get it working right.

Nigel

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
#190 lore raw

PATCH 1/1 Fix a bug in timer_suspend() on x86_64

Hi,

This patch is intended to fix a bug in timer_suspend() on x86_64 that causes hard lockups on suspend with swsusp and provide some optimizations. It is based on the Nigel Cunningham's patches to to reduce delay in arch/kernel/time.c. The patch is against 2.6.10-mm3 and 2.6.11-rc1. Please consider for applying.

--- linux-2.6.10-mm3-orig/arch/x86_64/kernel/time.c 2005-01-13
01:46:10.000000000 +0100
+++ linux-2.6.10-mm3/arch/x86_64/kernel/time.c 2005-01-13 01:32:05.000000000
+0100
@@ -955,16 +955,19 @@

__setup("report_lost_ticks", time_setup);

-static long clock_cmos_diff, sleep_start;
+static long clock_cmos_diff;
+static unsigned long sleep_start;

static int timer_suspend(struct sys_device *dev, u32 state) {
/*
* Estimate time zone so that set_time can update the clock */
- clock_cmos_diff = -get_cmos_time();
+ long cmos_time = get_cmos_time();
+
+ clock_cmos_diff = -cmos_time;
clock_cmos_diff += get_seconds();
- sleep_start = jiffies;
+ sleep_start = cmos_time;
return 0;
}

@@ -973,7 +976,7 @@
unsigned long flags;
unsigned long sec;
unsigned long ctime = get_cmos_time();
- unsigned long sleep_length = ctime - sleep_start;
+ unsigned long sleep_length = (ctime - sleep_start) * HZ;

if (vxtime.hpet_address)
hpet_reenable();
@@ -983,7 +986,8 @@
xtime.tv_sec = sec;
xtime.tv_nsec = 0; write_sequnlock_irqrestore(&xtime_lock,flags);
- jiffies += sleep_length * HZ;
+ jiffies += sleep_length;
+ wall_jiffies += sleep_length;
return 0;
}

Signature · 3 lines
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"
#191 lore raw

Re: [PATCH] Fix a bug in timer_suspend() on x86_64

Hi!

Quoted 7 lines

This patch is intended to fix a bug in timer_suspend() on x86_64 that causes hard lockups on suspend with swsusp and provide some optimizations. It is based on the Nigel Cunningham's patches to to reduce delay in arch/kernel/time.c. The patch is against 2.6.10-mm3 and 2.6.11-rc1. Please consider for applying.

Acked-by: Pavel Machek.
Pavel

Signature · 2 lines
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
#192 lore raw

Re: [PATCH] Fix a bug in timer_suspend() on x86_64

Quoted 11 lines · Pavel Machek

Hi!

Quoted 7 lines

This patch is intended to fix a bug in timer_suspend() on x86_64 that causes hard lockups on suspend with swsusp and provide some optimizations. It is based on the Nigel Cunningham's patches to to reduce delay in arch/kernel/time.c. The patch is against 2.6.10-mm3 and 2.6.11-rc1. Please consider for applying.

Acked-by Pavel Machek.
Acked-by Nigel Cunningham

(If that's worth anything :>)

Signature · 5 lines
Nigel Cunningham
Software Engineer, Canberra, Australia
http://www.cyclades.com

Ph: +61 (2) 6292 8028      Mob: +61 (417) 100 574
author
#193 lore raw

Re: [PATCH] Fix a bug in timer_suspend() on x86_64

In reply to Rafael J. Wysocki
Quoted 9 lines · Rafael J. Wysocki

Hi,

This patch is intended to fix a bug in timer_suspend() on x86_64 that causes hard lockups on suspend with swsusp and provide some optimizations. It is based on the Nigel Cunningham's patches to to reduce delay in arch/kernel/time.c. The patch is against 2.6.10-mm3 and 2.6.11-rc1. Please consider for applying.

Thanks, Added to my tree.

-Andi

#194 lore raw

Re: 2.6.10-mm2: swsusp regression [update]

In reply to Rafael J. Wysocki
Quoted 4 lines · Rafael J. Wysocki

If I comment out only the modification of jiffies in timer_resume() in arch/x86_64/kernel/time.c (ie line 986), everything seems to work, but I get "APIC error on CPU0: 00(00)" after device_power_up(), which seems strange to me, because I boot with "noapic". On the other hand, if it's not commented

Actually, I saw this APIC error too (on i386, with "noapic"), but I ignored it because, aside from that message, all of my interrupt problems were gone and I had fully working swsusp for the first time in recorded history.

I should see what happens if I recompile with APIC support. Hopefully I'll be able to get to that today.

-Barry K. Nathan <[email protected]>

#195 lore raw

PATCH 1/1 2.6.10-mm2: move CPUSETS above EMBEDDED

In reply to Andrew Morton

The placement of CPUSETS somewhere in the middle of the EMBEDDED options breaks the EMBEDDED submenu (at least in menuconfig).

The patch below fixes this by simply moving CPUSETS above EMBEDDED.

diffstat output:

 init/Kconfig |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)
init/Kconfig renamed from init/Kconfig.old +10 -11
@@ -248,6 +248,16 @@
 	  This option enables access to the kernel configuration file
 	  through /proc/config.gz.
 
+config CPUSETS
+	bool "Cpuset support"
+	depends on SMP
+	help
+	  This options will let you create and manage CPUSET's which
+	  allow dynamically partitioning a system into sets of CPUs and
+	  Memory Nodes and assigning tasks to run only within those sets.
+	  This is primarily useful on large SMP or NUMA systems.
+
+	  Say N if unsure.
 
 menuconfig EMBEDDED
 	bool "Configure standard kernel features (for small systems)"
@@ -302,17 +312,6 @@
 	  Disabling this option will cause the kernel to be built without
 	  support for epoll family of system calls.
 
-config CPUSETS
-	bool "Cpuset support"
-	depends on SMP
-	help
-	  This options will let you create and manage CPUSET's which
-	  allow dynamically partitioning a system into sets of CPUs and
-	  Memory Nodes and assigning tasks to run only within those sets.
-	  This is primarily useful on large SMP or NUMA systems.
-
-	  Say N if unsure.
-
 config CC_OPTIMIZE_FOR_SIZE
 	bool "Optimize for size" if EMBEDDED
 	default y if ARM || H8300
#196 lore raw

Re: [patch] 2.6.10-mm2: move CPUSETS above EMBEDDED

Quoted 2 lines · Adrian

The placement of CPUSETS somewhere in the middle of the EMBEDDED options breaks the EMBEDDED submenu (at least in menuconfig).

Thanks for fixing this, Adrian. I was ignorant of this config ordering.

Signature · 3 lines
                  I won't rest till it's the best ...
                  Programmer, Linux Scalability
                  Paul Jackson <[email protected]> 1.650.933.1373, 1.925.600.0401
#197 lore raw

PATCH 1/1 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

In reply to Andrew Morton
Quoted 5 lines · Andrew Morton

...
All 560 patches:
...
bk-i2c.patch
...

There's no reason for offering a MIPS-only driver on other architectures (even though it does compile).

Even better dependencies on specific MIPS variables might be possible that obsolete this patch, but this patch fixes at least the !MIPS case.

drivers/i2c/algos/Kconfig renamed from drivers/i2c/algos/Kconfig.old +1 -1
@@ -61,7 +61,7 @@
 
 config I2C_ALGO_SGI
 	tristate "I2C SGI interfaces"
-	depends on I2C
+	depends on I2C && MIPS
 	help
 	  Supports the SGI interfaces like the ones found on SGI Indy VINO
 	  or SGI O2 MACE.
#198 lore raw

Re: [2.6 patch] 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

Quoted 5 lines · Adrian Bunk

There's no reason for offering a MIPS-only driver on other architectures (even though it does compile).

Even better dependencies on specific MIPS variables might be possible that obsolete this patch, but this patch fixes at least the !MIPS case.

Please make that depend on SGI_IP22 || SGI_IP32 instead; the only machines actually using it.

Ladis, is VisWS using this algo also?

Ralf

#199 lore raw

Re: [2.6 patch] 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

Quoted 6 lines · Ralf Baechle
Quoted 2 lines · Adrian Bunk

There's no reason for offering a MIPS-only driver on other architectures (even though it does compile).

Quoted 10 lines
Quoted 3 lines

Even better dependencies on specific MIPS variables might be possible that obsolete this patch, but this patch fixes at least the !MIPS case.

Please make that depend on SGI_IP22 || SGI_IP32 instead; the only machines actually using it.

Ladis, is VisWS using this algo also?

Since MACE is common part, it most likely does.

Quoted 4 lines

Ralf

#200 lore raw

Re: [2.6 patch] 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

Quoted 14 lines · Ilya A. Volynets-Evenbakh
Quoted 12 lines · Ralf Baechle
Quoted 7 lines · Adrian Bunk

There's no reason for offering a MIPS-only driver on other architectures (even though it does compile).

Even better dependencies on specific MIPS variables might be possible that obsolete this patch, but this patch fixes at least the !MIPS case.

Quoted 7 lines
Quoted 6 lines

Please make that depend on SGI_IP22 || SGI_IP32 instead; the only machines actually using it.

Ladis, is VisWS using this algo also?

Since MACE is common part, it most likely does.

Ok, can someone send me the proper patch then?

thanks,

greg k-h

#201 lore raw

Re: [2.6 patch] 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

Quoted 1 line · Greg KH

Ok, can someone send me the proper patch then?

Index: drivers/i2c/algos/Kconfig
===================================================================
RCS file: /home/cvs/linux/drivers/i2c/algos/Kconfig,v retrieving revision 1.3

i2c/algos/Kconfig +1 -1
diff -u -r1.3 Kconfig
@@ -61,7 +61,7 @@
 
 config I2C_ALGO_SGI
 	tristate "I2C SGI interfaces"
-	depends on I2C
+	depends on I2C && (SGI_IP22 || SGI_IP32 || X86_VISWS)
 	help
 	  Supports the SGI interfaces like the ones found on SGI Indy VINO
 	  or SGI O2 MACE.
Applied
#202 lore raw

Re: [2.6 patch] 2.6.10-mm2: let I2C_ALGO_SGI depend on MIPS

Quoted 4 lines · Ladislav Michl
Quoted 1 line · Greg KH

Ok, can someone send me the proper patch then?

Index: drivers/i2c/algos/Kconfig

Applied, thanks.

greg k-h

#203 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi!

I get this ...

Unable to handle kernel NULL pointer dereference at virtual address 00000004

~ printing eip:
c01c8e83
*pde = 0bfc6067
*pte = 00000000

Oops: 0000 [#1]
Modules linked in: r128 iptable_nat ipt_state ip_conntrack
iptable_filter ip_tables 8139too mii crc32 snd_ens1371 snd_rawmidi
snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd
snd_page_alloc gameport uhci_hcd via_agp floppy ide_cd cdrom
CPU:    0
EIP:    0060:[<c01c8e83>]    Not tainted VLI
EFLAGS: 00013246   (2.6.10-mm2)

EIP is at agp_bind_memory+0x43/0x80
eax: 00000000 ebx: 00000000 ecx: 00000000 edx: 00000000
esi: cb0b0d20 edi: 00000000 ebp: 00000001 esp: cfb81f48
ds: 007b es: 007b ss: 0068
Process Xorg (pid: 4524, threadinfo=cfb81000 task=cd7215b0)

Stack: 00000000 cd4e2800 cc9f9440 c01d1f16 00000001 00000000 cd4e2800

00000036
~ c01d1ea0 c01cdf32 bffffb30 40086436 cd49d7e0 cbbd6e28 cd49d7e0
c01cde60
~ 40086436 00000007 c01548d4 bffffb30 40086436 cd49d7e0 00000000
c0154a8a

Call Trace:
~ [<c01d1f16>] drm_agp_bind+0x76/0xc0
~ [<c01d1ea0>] drm_agp_bind+0x0/0xc0
~ [<c01cdf32>] drm_ioctl+0xd2/0x189
~ [<c01cde60>] drm_ioctl+0x0/0x189
~ [<c01548d4>] do_ioctl+0x34/0x60
~ [<c0154a8a>] sys_ioctl+0x6a/0x1c0
~ [<c01022d7>] syscall_call+0x7/0xb
Code: 29 00 74 24 8b 46 08 89 fa 8b 4e 20 8b 58 04 89 f0 ff 53 40 85 c0

75 0c c6 46 28 01 b8 00 00 00 00 89 7e 1c 5b 5e 5f c3 8b 46 08 <8b> 40 04 ff 50 34 c6 46 29 01 eb cd 56 68 40 30 27 c0 e8 66 99

- --
Ramón Rey Vicente <ramon.rey en hispalinux.es>
JID [email protected] - GPG public key id 0x9F28E377 GPG Fingerprint 0BC2 8014 2445 51E8 DE87 C888 C385 A9D3 9F28 E377 Planet AUGCyL - http://augcyl.org/planet/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFB3Z/Rw4Wp058o43cRAuUiAJ4hpg0dZHVSbZT2bdp87zdwB27ZPACgxQHO Rfo1bCjwIlMXd9P6yMhCdWY=
=sMmy
-----END PGP SIGNATURE-----

#204 lore raw

Re: 2.6.10-mm2

In reply to Andrew Morton
Quoted 7 lines · Andrew Morton

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm2/

- Various minorish updates and fixes

Changes since 2.6.10-mm1:

When i launch neverball (3d games), X get killed and I have the following error in dmesg (3d card 9200SE, xserver : Xorg) :

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

reverting the following patches solve the problem:
agpgart-add-bridge-parameter-to-driver-functions.patch agpgart-allow-multiple-backends-to-be-initialized.patch drm-add-support-for-new-multiple-agp-bridge-agpgart-api.patch

I tried the fix from Mike Werner, but it doesn't work in my case.

I can provide more information if needed.

regards,

Benoit

#205 lore raw

Re: 2.6.10-mm2

Quoted 6 lines · Benoit Boissinot

When i launch neverball (3d games), X get killed and I have the following error in dmesg (3d card 9200SE, xserver : Xorg) :

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

Same *ERROR* here on my Compaq Evo N600c (Radeon Mobility M6 LY). Xfree 4.3 from debian sarge doesn't crash but it's way too slow. Vanilla 2.6.10 works fine.

Regards,

Brice

#206 lore raw

Re: 2.6.10-mm2

Quoted 4 lines

Same *ERROR* here on my Compaq Evo N600c (Radeon Mobility M6 LY). Xfree 4.3 from debian sarge doesn't crash but it's way too slow. Vanilla 2.6.10 works fine.

Can you post a dmesg, config and lspci for -mm2? I'm having trouble figuring exactly the combination to mess it up..

Dave.

#207 lore raw

Re: 2.6.10-mm2

Quoted 9 lines · Dave Airlie
Quoted 3 lines

Same *ERROR* here on my Compaq Evo N600c (Radeon Mobility M6 LY). Xfree 4.3 from debian sarge doesn't crash but it's way too slow. Vanilla 2.6.10 works fine.

Can you post a dmesg, config and lspci for -mm2? I'm having trouble figuring exactly the combination to mess it up..

Dave.

Everything is attached.

I passed drm_debug=1 to the kernel. All the drm debug messages appear when I start X. Neverball is very slow (as if DRM was not enabled) but does not show any new debug.

Regards
Brice

#208 lore raw

Re: 2.6.10-mm2

In reply to Benoit Boissinot
Quoted 7 lines

When i launch neverball (3d games), X get killed and I have the following error in dmesg (3d card 9200SE, xserver : Xorg) :

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

this looks like the agp backend isn't loading, Mike sent me parts of your .config but I lost the mail (don't drink and read e-mail...)

make sure that the correct backend for your chipset is loaded (throw a complete dmesg my way if you could.... I broke with tradition and actually tested -mm2 on my own machine there now and I have a Radeon 9200 on an intel agp ...

Dave.

#209 lore raw

Re: 2.6.10-mm2

Quoted 11 lines · Dave Airlie
Quoted 7 lines

When i launch neverball (3d games), X get killed and I have the following error in dmesg (3d card 9200SE, xserver : Xorg) :

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

this looks like the agp backend isn't loading, Mike sent me parts of your .config but I lost the mail (don't drink and read e-mail...)

if you look at the .config, agp and agp_via are not build as modules.

Quoted 5 lines

make sure that the correct backend for your chipset is loaded (throw a complete dmesg my way if you could.... I broke with tradition and actually tested -mm2 on my own machine there now and I have a Radeon 9200 on an intel agp ...

from dmesg, it looks like agp is correctly loaded.

Quoted 2 lines

Dave.

Actually the error I reported first occurs when X starts, it happens a second time when I launch neverball (and X get killed).

I attached a dmesg from right after X started, another after neverball was launched.
output of lsmod and .config are attached to.

Module                  Size  Used by
radeon                 67008  0 
drm                    54548  1 radeon
snd_seq                44688  0 
snd_via82xx            20960  0 
snd_ac97_codec         67936  1 snd_via82xx
snd_pcm                75400  2 snd_via82xx,snd_ac97_codec
snd_timer              19524  2 snd_seq,snd_pcm
snd_page_alloc          7556  2 snd_via82xx,snd_pcm
snd_mpu401_uart         5760  1 snd_via82xx
snd_rawmidi            17344  1 snd_mpu401_uart
snd_seq_device          6988  2 snd_seq,snd_rawmidi
snd                    40056  8 snd_seq,snd_via82xx,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device
soundcore               6880  1 snd
ide_cd                 36164  0 
cdrom                  35424  1 ide_cd
sk98lin               157088  0 
#210 lore raw

Re: 2.6.10-mm2

Quoted 10 lines
Quoted 9 lines
Quoted 5 lines

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

this looks like the agp backend isn't loading, Mike sent me parts of your .config but I lost the mail (don't drink and read e-mail...)

it looks like agp_backend_acquire is returning NULL in this case, [drm:drm_ioctl] pid=10587, cmd=0x6430, nr=0x30, dev 0xe200, auth=1 [drm:drm_ioctl] ret = ffffffed
is the agp acquire ioctl and the return is -ENODEV

Any ideas Mike why that might happen?

Dave.

#211 lore raw

Re: 2.6.10-mm2

Quoted 6 lines · On Sun, 9 Jan 2005 00:42:03 +1100 Dave Airlie <[email protected]> wrote:

it looks like agp_backend_acquire is returning NULL in this case, [drm:drm_ioctl] pid=10587, cmd=0x6430, nr=0x30, dev 0xe200, auth=1 [drm:drm_ioctl] ret = ffffffed
is the agp acquire ioctl and the return is -ENODEV

Any ideas Mike why that might happen?

Could this be the same issue discussed and fixed in another thread?

http://marc.theaimsgroup.com/?l=linux-kernel&m=110504486230527&w=2

Regards

#213 lore raw

Re: 2.6.10-mm2

In reply to Dave Airlie
Quoted 12 lines · Dave Airlie
Quoted 11 lines
Quoted 10 lines
Quoted 6 lines

[drm:radeon_cp_init] *ERROR* radeon_cp_init called without lock held

[drm:drm_unlock] *ERROR* Process 10657 using kernel context 0

this looks like the agp backend isn't loading, Mike sent me parts of your .config but I lost the mail (don't drink and read e-mail...)

Quoted 8 lines

it looks like agp_backend_acquire is returning NULL in this case, [drm:drm_ioctl] pid=10587, cmd=0x6430, nr=0x30, dev 0xe200, auth=1 [drm:drm_ioctl] ret = ffffffed
is the agp acquire ioctl and the return is -ENODEV

Any ideas Mike why that might happen?

Dave.

If the bridge->agp_in_use is non-zero then drm_agp_acquire would return -ENODEV.
Previously it would return -EBUSY in this case but agp_backend_acquire now returns
a pointer to a bridge so there is no distinction made between existence and busy.

#214 lore raw

Re: 2.6.10-mm2

In reply to Benoit Boissinot
Quoted 3 lines

if you look at the .config, agp and agp_via are not build as modules.

can you also try a build with vesafb turned off? I'm just wondering is there maybe a resource conflict or something like that going on ...

Dave.

#215 lore raw

Re: 2.6.10-mm2

Quoted 9 lines · Dave Airlie
Quoted 3 lines

if you look at the .config, agp and agp_via are not build as modules.

can you also try a build with vesafb turned off? I'm just wondering is there maybe a resource conflict or something like that going on ...

Dave.

Removing the framebuffer from the boot command line solved it... (with the patch that Mike Werner posted ; without it, it oopsed).

Benoit.

#216 lore raw

Re: 2.6.10-mm2

Quoted 4 lines

Removing the framebuffer from the boot command line solved it... (with the patch that Mike Werner posted ; without it, it oopsed).

That's a bit weird as nothing should be different, I've just built vesafb into my kernel and booted and it works fine.. (with the oops patch...)

vesafb: framebuffer at 0xe0000000, mapped to 0xe0880000, using 3072k, total 131072k
vesafb: mode is 1024x768x16, linelength=2048, pages=84
vesafb: protected mode interface info at c000:56cd
vesafb: scrolling: redraw
vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0
Console: switching to colour frame buffer device 128x48
fb0: VESA VGA frame buffer device
ACPI: Processor [CPU1] (supports 8 throttling states) Linux agpgart interface v0.101 (c) Dave Jones
agpgart: Detected an Intel 865 Chipset.
agpgart: AGP aperture is 128M @ 0x28000000

....
[drm] Initialized drm 1.0.0 20040925
ACPI: PCI interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 16 [drm] Initialized radeon 1.11.0 20020828 on minor 0:
agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
agpgart: Putting AGP V3 device at 0000:01:00.0 into 8x mode [drm] Loading R200 Microcode

all good here... I'm trying to see if this could be a via only issue, or something even more tricky....

If you could apply the patch I've attached (just adds some debug...) it'll narrow it down a small bit where it is failing for me...

Thanks,
Dave.

#217 lore raw

Re: 2.6.10-mm2

Quoted 10 lines · Dave Airlie
Quoted 4 lines

Removing the framebuffer from the boot command line solved it... (with the patch that Mike Werner posted ; without it, it oopsed).

That's a bit weird as nothing should be different, I've just built vesafb into my kernel and booted and it works fine.. (with the oops patch...)

Quoted 6 lines

all good here... I'm trying to see if this could be a via only issue, or something even more tricky....

If you could apply the patch I've attached (just adds some debug...) it'll narrow it down a small bit where it is failing for me...

A dmesg from a boot with the patch applied is attached.

just in case it matters, i use the following boot command line options :
video=vesa:mtrr vga=0x317

Benoit

#218 lore raw

Re: 2.6.10-mm2

Quoted 8 lines
Quoted 3 lines

If you could apply the patch I've attached (just adds some debug...) it'll narrow it down a small bit where it is failing for me...

A dmesg from a boot with the patch applied is attached.

just in case it matters, i use the following boot command line options :
video=vesa:mtrr vga=0x317

I'm seeing "agp_backend_acquire failed on atomic read" too. No command line options here.

Regards
Brice

#219 lore raw

Re: 2.6.10-mm2

Quoted 3 lines · Brice Goglin
Quoted 3 lines
Quoted 3 lines

If you could apply the patch I've attached (just adds some debug...) it'll narrow it down a small bit where it is failing for me...

I've another patch on top of -mm2 anyone wanna try this.. i'm interested in finding out when the atomic_inc actually is happening...

Dave.

#220 lore raw

Re: 2.6.10-mm2

Quoted 4 lines

I've another patch on top of -mm2 anyone wanna try this.. i'm interested in finding out when the atomic_inc actually is happening...

Dave.

Hi,

I still only see "agp_backend_acquire failed on atomic read".

Regards
Brice

A message that is not in the archive (sent off-list or not yet received): [email protected]

#222 lore raw

Re: 2.6.10-mm2 solved

Quoted 7 lines · Dave Airlie
Quoted 1 line

I still only see "agp_backend_acquire failed on atomic read".

do you see how many atomic inc and atomic decs there is?

send me the full dmesg...
thanks,
Dave.

The agp_in_use field of the bridge structure is never initialized. That's the reason why atomic_read fails to read 0.

In vanilla, the bridge is allocated as a static global variable, and thus initialized to 0 at init. In -mm, the bridge is kmalloc'ed, and thus not initialized.

The attached patch fixes it and solves my problem (when combined with
http://lkml.org/lkml/2005/1/7/377). DRM is back with good performance.

Regards
Brice

drivers/char/agp/backend.c renamed from drivers/char/agp/backend.c.orig +2 -0
@@ -235,6 +235,8 @@
 	if (!bridge)
 		return NULL;
 
+	atomic_set(&bridge->agp_in_use, 0);
+
 	if (list_empty(&agp_bridges))
 		agp_bridge = bridge;
 
#223 lore raw

Re: 2.6.10-mm2 solved

Quoted 2 lines

The attached patch fixes it and solves my problem (when combined with
http://lkml.org/lkml/2005/1/7/377). DRM is back with good performance.

Actually, this doesn't fix Benoit's problem (even if we were initially having the same errors (radeon_cp_init called without lock held)).

It seems that memsetting the whole bridge structure to 0 (instead of juste the agp_in_use field) fixes Benoit's problem too. No idea which field was responsible for this. New patch attached.

Regards,
Brice

drivers/char/agp/backend.c renamed from drivers/char/agp/backend.c.orig +2 -0
@@ -235,6 +235,8 @@
 	if (!bridge)
 		return NULL;
 
+	memset(bridge, 0, sizeof(*bridge));
+
 	if (list_empty(&agp_bridges))
 		agp_bridge = bridge;
 
#224 lore raw

AGP Oops (was Re: 2.6.10-mm2)

In reply to Andrew Morton

Got the following upon starting X (Debian sid's 4.3.0.dfsg.1-10). Was fine with 2.6.10-mm1. Radeon card, VIA AGP.

Unable to handle kernel NULL pointer dereference at virtual address 00000004
 printing eip:
c025a386
*pde = 78f84067
Oops: 0000 [#1]
SMP
CPU:    1
EIP:    0060:[<c025a386>]    Not tainted VLI
EFLAGS: 00013246   (2.6.10-mm2)

EIP is at agp_bind_memory+0x56/0x80
eax: 00000000 ebx: 00000000 ecx: 00000000 edx: 00000000
esi: f027c0e0 edi: 00000000 ebp: f027c3a0 esp: f6c83f10
ds: 007b es: 007b ss: 0068
Process XFree86 (pid: 2160, threadinfo=f6c83000 task=efc3aaa0)

Stack: bffffab0 c0214a04 00000000 c23ed000 f7d6ff40 c02645df 00000000 0000a1b6
       00000000 00000000 00000001 00000000 00000036 c23ed000 c0264550 c025ffe5
       bffffab0 f6c83f50 00000005 bffff95c f6c83000 efc3aaa0 086de8c0 40086436
Call Trace:
 [<c0214a04>] copy_from_user+0x34/0x70
 [<c02645df>] drm_agp_bind+0x8f/0xf0
 [<c0264550>] drm_agp_bind+0x0/0xf0
 [<c025ffe5>] drm_ioctl+0x105/0x201
 [<c0163c1a>] do_ioctl+0x8a/0xb0
 [<c0163e5a>] sys_ioctl+0x7a/0x200
 [<c01025ad>] sysenter_past_esp+0x52/0x75
Code: 89 fa 8b 4e 20 8b 58 04 89 f0 ff 53 40 85 c0 75 07 c6 46 28 01 89 7e 1c 8b 5c 24 08 8b 74 24 0c 8b 7c 24 10 83 c4 14 c3 8b 46 08 <8b> 40 04 ff 50 34 c6 46 29 01 eb c6 89 74 24 04 c7 04 24 f4 d4
#225 lore raw

Re: AGP Oops (was Re: 2.6.10-mm2)

Quoted 4 lines · Sean Neakums

Got the following upon starting X (Debian sid's 4.3.0.dfsg.1-10). Was fine with 2.6.10-mm1. Radeon card, VIA AGP.

Did you have this?

drivers/char/agp/generic.c renamed from drivers/char/agp/generic.c~agpgart-add-bridge-assignment-missed-in-agp_allocate_memory +1 -0
@@ -211,6 +211,7 @@ struct agp_memory *agp_allocate_memory(s
 		new->memory[i] = virt_to_phys(addr);
 		new->page_count++;
 	}
+       new->bridge = bridge;
 
 	flush_agp_mappings();
 

_

#226 lore raw

Re: AGP Oops (was Re: 2.6.10-mm2)

Quoted 7 lines · Andrew Morton
Quoted 4 lines · Sean Neakums

Got the following upon starting X (Debian sid's 4.3.0.dfsg.1-10). Was fine with 2.6.10-mm1. Radeon card, VIA AGP.

Did you have this?

That fixes it. Thanks!

Quoted 11 lines
drivers/char/agp/generic.c renamed from drivers/char/agp/generic.c~agpgart-add-bridge-assignment-missed-in-agp_allocate_memory +1 -0
@@ -211,6 +211,7 @@ struct agp_memory *agp_allocate_memory(s
 		new->memory[i] = virt_to_phys(addr);
 		new->page_count++;
 	}
+       new->bridge = bridge;
 
 	flush_agp_mappings();
 

_