Minor "cleanup" patches for 2.4.5-ac kernels
Subsystems (4)
Here are some small, but in times important, "gotchas" in current 2.4.5-ac kernels.
When compiling SMP 'udelay' in current drivers/pci/quirks.c expands to:
__udelay((15), cpu_data[(current->processor)]...
and a type for 'current' is not known, at least on alpha, so the following seems to be in order:
drivers/pci/quirks.c renamed from drivers/pci/quirks.c~ +1 -0
@@ -18,6 +18,7 @@#include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h> #undef DEBUG
There is no problem if SMP is not configured.
This one is replacing a symbol in sg.c to one which is exported so 'sg.o' can be compiled as a valid module.
drivers/scsi/sg.c renamed from drivers/scsi/sg.c~ +1 -1
@@ -2603,7 +2603,7 @@ num = (count <10 ) ? count :10 ;copy_from_user (buff, buffer, num); buff[num] ='\0' ; - sg_allow_dio =simple_strtol (buff,0 ,10 ) ?1 :0 ; + sg_allow_dio =simple_strtoul (buff,0 ,10 ) ?1 :0 ;return count; }
And this one, proposed already some few times by Ivan Kokshaysky,
include/linux/binfmts.h +3 -0
@@ -32,6 +32,9 @@ struct linux_binprm{unsigned long loader, exec; }; +/* Forward declaration */ +struct mm_struct ; +/* * This structure defines the functions that are used to load the binary formats that * linux accepts.
kills a flood of warnings (at least on Alpha) about 'mm_struct' defined on a parameter list.
Are there any reasons which would make any of those "bad"?
Michal
Quoted 11 lines · Michal Jaegermann
drivers/pci/quirks.c Tue Jun 12 17:13:18 2001 renamed from drivers/pci/quirks.c~ Tue Jun 12 16:31:12 2001 +1
-0@@ -18,6 +18,7 @@ #include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h> #undef DEBUGThere is no problem if SMP is not configured.
no the better place for this is include/asm-i386/delay.h. Otherwise you wind up solving the same problem over and over again in each similar driver.
I --just-- went through on Alpha, and included linux/sched.h in include/asm-alpha/delay.h. Not an hour ago :) Then Andrea suggested to simply un-inline udelay, which solved the compile problem in an even better way. (we cannot un-inline udelay on x86 I think)
include/linux/binfmts.h Mon Jun 4 20:24:50 2001 struct linux_binprm{ · line 37
Quoted 9 lines
include/linux/binfmts.h Mon Jun 4 20:24:50 2001 renamed from include/linux/binfmts.h Mon Jun 4 14:19:00 2001 +3
-0@@ -32,6 +32,9 @@ struct linux_binprm{ unsigned long loader, exec; }; +/* Forward declaration */ +struct mm_struct; +
I added this one to the MDK kernel compile. I think it is an 'ac' thing, I don't get these warnings on vanilla 2.4.[56]-pre.
Signature · 3 lines
Jeff Garzik | Andre the Giant has a posse. Building 1024 | MandrakeSoft |
Quoted 9 lines · Jeff Garzik
Quoted 8 lines · Michal Jaegermann
drivers/pci/quirks.c Tue Jun 12 17:13:18 2001 renamed from drivers/pci/quirks.c~ Tue Jun 12 16:31:12 2001 +1
-0@@ -18,6 +18,7 @@ #include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h>
Quoted 5 lines
Quoted 3 lines
drivers/pci/quirks.c Tue Jun 12 17:13:18 2001 renamed from drivers/pci/quirks.c~ Tue Jun 12 16:31:12 2001 +0
-0#undef DEBUGThere is no problem if SMP is not configured.
no the better place for this is
include/asm-i386/delay.h.
You mean to put "#include <linux/sched.h>" into include/linux/delay.h? Otherwise this will not help very much on Alpha when I run into the problem; or other architectures. :-) Works for me and indeed it may be a better place.
Quoted 3 lines
Otherwise you
wind up solving the same problem over and over again in each similar driver.
'quirks.c' was the only trouble spot which tripped compilation after changes to it. So I kept my patch local.
Quoted 2 lines
I --just-- went through on Alpha, and included
linux/sched.hininclude/asm-alpha/delay.h. Not an hour ago :)
This was probably this hour when I was looking for that error. :-)
Quoted 3 lines
Then Andrea suggested to
simply un-inline udelay, which solved the compile problem in an even better way. (we cannot un-inline udelay on x86 I think)
How about other architectures? Each will need an individual treatment?
Quoted 6 lines
Quoted 6 lines
include/linux/binfmts.h Mon Jun 4 20:24:50 2001 renamed from include/linux/binfmts.h Mon Jun 4 14:19:00 2001 +0
-0@@ -32,6 +32,9 @@ struct linux_binprm{ unsigned long loader, exec; };
Quoted 6 lines
include/linux/binfmts.h Mon Jun 4 20:24:50 2001 struct linux_binprm{ · line 37
Quoted 3 lines
include/linux/binfmts.h Mon Jun 4 20:24:50 2001 renamed from include/linux/binfmts.h Mon Jun 4 14:19:00 2001 +3
-0+/* Forward declaration */ +struct mm_struct; +I added this one to the MDK kernel compile. I think it is an 'ac' thing, I don't get these warnings on vanilla 2.4.[56]-pre.
Indeed it is. All three actually are (as I wrote). The last one, if not present, has a very unpleasant effect of drowning compilation warnings in a flood as wailing happens in a header which is included mostly everywhere. It is very easy then to miss something where one should pay a closer attention.
I suggested earlier some other patch for that but Alan apparently did not like that one. Quite possibly he was right.
Michal
Quoted 13 lines · Michal Jaegermann
Quoted 11 lines · Jeff Garzik
Quoted 10 lines · Michal Jaegermann
drivers/pci/quirks.c Tue Jun 12 17:13:18 2001 renamed from drivers/pci/quirks.c~ Tue Jun 12 16:31:12 2001 +1
-0@@ -18,6 +18,7 @@ #include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h> #undef DEBUG
Quoted 8 lines
Quoted 3 lines
Quoted 1 line
There is no problem if SMP is not configured.
no the better place for this is
include/asm-i386/delay.h.You mean to put "#include <
linux/sched.h>" intoinclude/linux/delay.h? Otherwise this will not help very much on Alpha when I run into the problem; or other architectures. :-) Works for me and indeed it may be a better place.
This is an architecture-level thing. include/asm-$arch/delay not include/linux/delay.h
Currently, Alpha does not need to include sched.h at all...
Quoted 5 lines
Quoted 3 lines
Then Andrea suggested to
simply un-inline udelay, which solved the compile problem in an even better way. (we cannot un-inline udelay on x86 I think)How about other architectures? Each will need an individual treatment?
Each arch will need individual treatment, but each alpha should decide for itself whether or not to un-inline udelay. It may not be possible on some archs.
Signature · 3 lines
Jeff Garzik | Andre the Giant has a posse. Building 1024 | MandrakeSoft |
drivers/pci/quirks.c line 21
Quoted 7 lines
drivers/pci/quirks.c renamed from drivers/pci/quirks.c~ +1
-0@@ -18,6 +18,7 @@#include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h>
Ok
Quoted 3 lines
This one is replacing a symbol in
sg.cto one which is exported so 'sg.o' can be compiled as a valid module.
Export the right symbol on Alpha ?
drivers/pci/quirks.c
Quoted 4 lines
drivers/pci/quirks.c renamed from drivers/pci/quirks.c~ +3
-0+/* Forward declaration */ +struct mm_struct ; +
Ok
Quoted 9 lines · Alan Cox
drivers/pci/quirks.c line 21
Quoted 7 lines
drivers/pci/quirks.c renamed from drivers/pci/quirks.c~ +1
-0@@ -18,6 +18,7 @@#include <linux/pci.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/sched.h> Ok
Jeff Garzik had some comments here and other, architecture dependent, propositions.
Quoted 5 lines
Quoted 3 lines
This one is replacing a symbol in
sg.cto one which is exported so 'sg.o' can be compiled as a valid module.Export the right symbol on Alpha ?
I do not see how this one is Alpha specific. Patches from 'ac' series added one reference to 'simple_strtol' in drivers/scsi/sg.c. Sure, one more symbol can be exported, but results of this call are used only as a zero/non-zero flag so an already exported 'simple_strtoul' will serve instead (or we have an extra export for _one_ call in the whole kernel).
Michal