Hello community,
here is the log from the commit of package kernel-source
checked in at Sun Apr 2 22:04:26 CEST 2006.
--------
--- kernel-source/kernel-bigsmp.changes 2006-04-02 11:17:53.000000000 +0200
+++ kernel-source/kernel-bigsmp.changes 2006-04-02 21:06:58.000000000 +0200
@@ -1,0 +2,6 @@
+Sun Apr 2 21:04:39 CEST 2006 - agruen@suse.de
+
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
+
+-------------------------------------------------------------------
kernel-debug.changes: same change
kernel-default.changes: same change
kernel-dummy.changes: same change
kernel-iseries64.changes: same change
kernel-kdump.changes: same change
kernel-ppc64.changes: same change
kernel-s390.changes: same change
kernel-smp.changes: same change
kernel-source.changes: same change
kernel-syms.changes: same change
kernel-um.changes: same change
kernel-xen.changes: same change
kernel-xenpae.changes: same change
New:
----
needed_space_in_mb
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kernel-bigsmp.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:11.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:11.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 9
+Release: 10
Summary: Kernel with Multiprocessor Support and PAE
License: GPL
Group: System/Kernel
@@ -115,7 +115,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -441,6 +441,9 @@
%files -f kernel.files
%changelog -n kernel-bigsmp
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
kernel-debug.spec: same change
kernel-default.spec: same change
++++++ kernel-dummy.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:11.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:11.000000000 +0200
@@ -17,7 +17,7 @@
Summary: Internal dummy package for synchronizing release numbers
Group: System/Kernel
Version: 2.6.16
-Release: 9
+Release: 10
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@@ -27,7 +27,7 @@
--------
Andreas Gruenbacher
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%install
@@ -40,6 +40,9 @@
/etc/dummy
%changelog -n kernel-dummy
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-iseries64.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:11.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:11.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 8
+Release: 9
Summary: 64-Bit Kernel for iSeries
License: GPL
Group: System/Kernel
@@ -116,7 +116,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -442,6 +442,9 @@
%files -f kernel.files
%changelog -n kernel-iseries64
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-kdump.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:11.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:11.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 9
+Release: 10
Summary: kernel for kdump
License: GPL
Group: System/Kernel
@@ -125,7 +125,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -451,6 +451,9 @@
%files -f kernel.files
%changelog -n kernel-kdump
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-ppc64.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -20,7 +20,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 8
+Release: 9
Summary: Kernel for ppc64 Systems
License: GPL, LGPL
Group: System/Kernel
@@ -130,7 +130,7 @@
Tom Gall
see /usr/src/linux-pmac-benh/CREDITS for more details.
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -456,6 +456,9 @@
%files -f kernel.files
%changelog -n kernel-ppc64
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-s390.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 8
+Release: 9
Summary: The Standard Kernel
License: GPL
Group: System/Kernel
@@ -113,7 +113,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -439,6 +439,9 @@
%files -f kernel.files
%changelog -n kernel-s390
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-smp.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 9
+Release: 10
Summary: Kernel with Multiprocessor Support
License: GPL
Group: System/Kernel
@@ -124,7 +124,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -450,6 +450,9 @@
%files -f kernel.files
%changelog -n kernel-smp
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-source.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -25,7 +25,7 @@
%endif
PreReq: /sbin/insserv /usr/bin/grep /bin/sed /bin/uname /bin/mkdir /bin/cat /bin/ln /bin/rm /etc/rc.status
Version: 2.6.16
-Release: 9
+Release: 10
Source0: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2
Source1: functions.sh
Source2: source-post.sh
@@ -93,7 +93,7 @@
see /usr/src/linux/CREDITS for more details.
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -273,6 +273,9 @@
%files -f kernel-source.files
%changelog -n kernel-source
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-syms.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -49,7 +49,7 @@
Summary: Kernel Symbol Versions (modversions)
Group: Development/Sources
Version: 2.6.16
-Release: 9
+Release: 10
Requires: linux
Requires: kernel-source = 2.6.16-%release
Source11: arch-symbols
@@ -84,7 +84,7 @@
see /usr/src/linux/CREDITS for more details.
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%install
@@ -127,6 +127,9 @@
/boot/symsets-*-*.tar.gz
%changelog -n kernel-syms
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
++++++ kernel-um.spec ++++++
--- /var/tmp/diff_new_pack.xrbUWR/_old 2006-04-02 22:02:12.000000000 +0200
+++ /var/tmp/diff_new_pack.xrbUWR/_new 2006-04-02 22:02:12.000000000 +0200
@@ -21,7 +21,7 @@
BuildRequires: python
%endif
Version: 2.6.16
-Release: 9
+Release: 10
Summary: The User Mode Linux kernel.
License: GPL
Group: System/Kernel
@@ -116,7 +116,7 @@
-Source Timestamp: 2006-04-01 22:00:07 +0000
+Source Timestamp: 2006-04-02 19:05:22 +0000
%prep
if ! [ -e %_sourcedir/linux-2.6.16.tar.bz2 ]; then
@@ -442,6 +442,9 @@
%files -f kernel.files
%changelog -n kernel-um
+* Sun Apr 02 2006 - agruen@suse.de
+- patches.fixes/remove-MODULE_PARM: Remove MODULE_PARM (162172).
+- patches.fixes/module-obsparm.diff: Patch is obsolete.
* Sat Apr 01 2006 - olh@suse.de
- update to 2.6.16.1
dm: bio split bvec fix
kernel-xen.spec: same change
kernel-xenpae.spec: same change
++++++ build-source-timestamp ++++++
--- kernel-source/build-source-timestamp 2006-04-02 11:17:53.000000000 +0200
+++ kernel-source/build-source-timestamp 2006-04-02 21:06:51.000000000 +0200
@@ -1 +1 @@
-2006-04-01 22:00:07 +0000
+2006-04-02 19:05:22 +0000
++++++ config.tar.bz2 ++++++
++++++ kabi.tar.bz2 ++++++
++++++ minmem ++++++
--- kernel-source/minmem 2006-04-02 11:49:49.000000000 +0200
+++ kernel-source/minmem 2006-04-02 21:06:53.000000000 +0200
@@ -1 +1 @@
-514000
+1048576
++++++ novell-kmp.tar.bz2 ++++++
++++++ patches.arch.tar.bz2 ++++++
++++++ patches.drivers.tar.bz2 ++++++
++++++ patches.fixes.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.fixes/module-obsparm.diff new/patches.fixes/module-obsparm.diff
--- old/patches.fixes/module-obsparm.diff 2006-02-28 10:14:32.000000000 +0100
+++ new/patches.fixes/module-obsparm.diff 1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-From: Andreas Gruenbacher
-Subject: Modules with old-style parameters won't load
-References: 148245
-
-Modules may define static variables as old-style MODULE_PARM()
-parameters. If those variables are not actually used, the compiler
-may optimize them out, which currently leads to a `module: falsely
-claims to have parameter param' error, and the module won't load.
-Just ignore parameter definitions for parameters that aren't
-actually there.
-
-Signed-off-by: Andreas Gruenbacher
-
-Index: linux-2.6.15/kernel/module.c
-===================================================================
---- linux-2.6.15.orig/kernel/module.c
-+++ linux-2.6.15/kernel/module.c
-@@ -763,6 +763,10 @@ static int set_obsolete(const char *val,
- max = simple_strtol(p, &endp, 10);
- } else
- max = min;
-+ if (!obsparm->addr) {
-+ /* Assume the compiler optimized out an unused parameter. */
-+ return 0;
-+ }
- switch (*endp) {
- case 'b':
- return param_array(kp->name, val, min, max, obsparm->addr,
-@@ -834,12 +838,6 @@ static int obsolete_params(const char *n
- obsparm[i].addr
- = (void *)find_local_symbol(sechdrs, symindex, strtab,
- sym_name);
-- if (!obsparm[i].addr) {
-- printk("%s: falsely claims to have parameter %s\n",
-- name, obsparm[i].name);
-- ret = -EINVAL;
-- goto out;
-- }
- kp[i].arg = &obsparm[i];
- }
-
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/patches.fixes/remove-MODULE_PARM new/patches.fixes/remove-MODULE_PARM
--- old/patches.fixes/remove-MODULE_PARM 1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/remove-MODULE_PARM 2006-04-02 21:04:24.000000000 +0200
@@ -0,0 +1,1263 @@
+From: Rusty Russell
+Subject: Remove MODULE_PARM
+Patch-mainline: 2.6.17
+References: 162172
+
+We don't have a good way to prevent recent gcc from optimizing out
+obsolete MODULE_PARM-style parameters. Instead of risking silent
+failures, backport this changeset from 2.6.17 which gets rid of
+MODULE_PARM altogether.
+
+Signed-off-by: Andreas Gruenbacher
+
+# HG changeset patch
+# User Rusty Russell
+# Date Sun Mar 26 00:22:52 2006 +0800
+# Node ID 73303913ac70b1b6dc23267dd401544aa62af643
+# parent: 4fcfdf1b021390ffad47e3ea8920c759d1f6a6a4
+[PATCH] Remove MODULE_PARM
+
+MODULE_PARM was actually breaking: recent gcc version optimize them out as
+unused. It's time to replace the last users, which are generally in the
+most unloved drivers anyway.
+
+Signed-off-by: Rusty Russell
+Signed-off-by: Andrew Morton
+Signed-off-by: Linus Torvalds
+
+committer: Linus Torvalds 1143303772 -0800
+
+
+Index: linux-2.6.16/kernel/module.c
+===================================================================
+--- linux-2.6.16.orig/kernel/module.c
++++ linux-2.6.16/kernel/module.c
+@@ -182,24 +182,6 @@ static unsigned long __find_symbol(const
+ return 0;
+ }
+
+-/* Find a symbol in this elf symbol table */
+-static unsigned long find_local_symbol(Elf_Shdr *sechdrs,
+- unsigned int symindex,
+- const char *strtab,
+- const char *name)
+-{
+- unsigned int i;
+- Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
+-
+- /* Search (defined) internal symbols first. */
+- for (i = 1; i < sechdrs[symindex].sh_size/sizeof(*sym); i++) {
+- if (sym[i].st_shndx != SHN_UNDEF
+- && strcmp(name, strtab + sym[i].st_name) == 0)
+- return sym[i].st_value;
+- }
+- return 0;
+-}
+-
+ /* Search for module by name: must hold module_mutex. */
+ static struct module *find_module(const char *name)
+ {
+@@ -731,139 +713,6 @@ static inline void module_unload_init(st
+ }
+ #endif /* CONFIG_MODULE_UNLOAD */
+
+-#ifdef CONFIG_OBSOLETE_MODPARM
+-/* Bounds checking done below */
+-static int obsparm_copy_string(const char *val, struct kernel_param *kp)
+-{
+- strcpy(kp->arg, val);
+- return 0;
+-}
+-
+-static int set_obsolete(const char *val, struct kernel_param *kp)
+-{
+- unsigned int min, max;
+- unsigned int size, maxsize;
+- int dummy;
+- char *endp;
+- const char *p;
+- struct obsolete_modparm *obsparm = kp->arg;
+-
+- if (!val) {
+- printk(KERN_ERR "Parameter %s needs an argument\n", kp->name);
+- return -EINVAL;
+- }
+-
+- /* type is: [min[-max]]{b,h,i,l,s} */
+- p = obsparm->type;
+- min = simple_strtol(p, &endp, 10);
+- if (endp == obsparm->type)
+- min = max = 1;
+- else if (*endp == '-') {
+- p = endp+1;
+- max = simple_strtol(p, &endp, 10);
+- } else
+- max = min;
+- switch (*endp) {
+- case 'b':
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- 1, param_set_byte, &dummy);
+- case 'h':
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- sizeof(short), param_set_short, &dummy);
+- case 'i':
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- sizeof(int), param_set_int, &dummy);
+- case 'l':
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- sizeof(long), param_set_long, &dummy);
+- case 's':
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- sizeof(char *), param_set_charp, &dummy);
+-
+- case 'c':
+- /* Undocumented: 1-5c50 means 1-5 strings of up to 49 chars,
+- and the decl is "char xxx[5][50];" */
+- p = endp+1;
+- maxsize = simple_strtol(p, &endp, 10);
+- /* We check lengths here (yes, this is a hack). */
+- p = val;
+- while (p[size = strcspn(p, ",")]) {
+- if (size >= maxsize)
+- goto oversize;
+- p += size+1;
+- }
+- if (size >= maxsize)
+- goto oversize;
+- return param_array(kp->name, val, min, max, obsparm->addr,
+- maxsize, obsparm_copy_string, &dummy);
+- }
+- printk(KERN_ERR "Unknown obsolete parameter type %s\n", obsparm->type);
+- return -EINVAL;
+- oversize:
+- printk(KERN_ERR
+- "Parameter %s doesn't fit in %u chars.\n", kp->name, maxsize);
+- return -EINVAL;
+-}
+-
+-static int obsolete_params(const char *name,
+- char *args,
+- struct obsolete_modparm obsparm[],
+- unsigned int num,
+- Elf_Shdr *sechdrs,
+- unsigned int symindex,
+- const char *strtab)
+-{
+- struct kernel_param *kp;
+- unsigned int i;
+- int ret;
+-
+- kp = kmalloc(sizeof(kp[0]) * num, GFP_KERNEL);
+- if (!kp)
+- return -ENOMEM;
+-
+- for (i = 0; i < num; i++) {
+- char sym_name[128 + sizeof(MODULE_SYMBOL_PREFIX)];
+-
+- snprintf(sym_name, sizeof(sym_name), "%s%s",
+- MODULE_SYMBOL_PREFIX, obsparm[i].name);
+-
+- kp[i].name = obsparm[i].name;
+- kp[i].perm = 000;
+- kp[i].set = set_obsolete;
+- kp[i].get = NULL;
+- obsparm[i].addr
+- = (void *)find_local_symbol(sechdrs, symindex, strtab,
+- sym_name);
+- if (!obsparm[i].addr) {
+- printk("%s: falsely claims to have parameter %s\n",
+- name, obsparm[i].name);
+- ret = -EINVAL;
+- goto out;
+- }
+- kp[i].arg = &obsparm[i];
+- }
+-
+- ret = parse_args(name, args, kp, num, NULL);
+- out:
+- kfree(kp);
+- return ret;
+-}
+-#else
+-static int obsolete_params(const char *name,
+- char *args,
+- struct obsolete_modparm obsparm[],
+- unsigned int num,
+- Elf_Shdr *sechdrs,
+- unsigned int symindex,
+- const char *strtab)
+-{
+- if (num != 0)
+- printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
+- name);
+- return 0;
+-}
+-#endif /* CONFIG_OBSOLETE_MODPARM */
+-
+ static const char vermagic[] = VERMAGIC_STRING;
+
+ #ifdef CONFIG_MODVERSIONS
+@@ -1847,27 +1696,17 @@ static struct module *load_module(void _
+ set_fs(old_fs);
+
+ mod->args = args;
+- if (obsparmindex) {
+- err = obsolete_params(mod->name, mod->args,
+- (struct obsolete_modparm *)
+- sechdrs[obsparmindex].sh_addr,
+- sechdrs[obsparmindex].sh_size
+- / sizeof(struct obsolete_modparm),
+- sechdrs, symindex,
+- (char *)sechdrs[strindex].sh_addr);
+- if (setupindex)
+- printk(KERN_WARNING "%s: Ignoring new-style "
+- "parameters in presence of obsolete ones\n",
+- mod->name);
+- } else {
+- /* Size of section 0 is 0, so this works well if no params */
+- err = parse_args(mod->name, mod->args,
+- (struct kernel_param *)
+- sechdrs[setupindex].sh_addr,
+- sechdrs[setupindex].sh_size
+- / sizeof(struct kernel_param),
+- NULL);
+- }
++ if (obsparmindex)
++ printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
++ mod->name);
++
++ /* Size of section 0 is 0, so this works well if no params */
++ err = parse_args(mod->name, mod->args,
++ (struct kernel_param *)
++ sechdrs[setupindex].sh_addr,
++ sechdrs[setupindex].sh_size
++ / sizeof(struct kernel_param),
++ NULL);
+ if (err < 0)
+ goto arch_cleanup;
+
+Index: linux-2.6.16/Documentation/networking/ray_cs.txt
+===================================================================
+--- linux-2.6.16.orig/Documentation/networking/ray_cs.txt
++++ linux-2.6.16/Documentation/networking/ray_cs.txt
+@@ -25,7 +25,7 @@ the essid= string parameter is available
+ This will change after the method of sorting out parameters for all
+ the PCMCIA drivers is agreed upon. If you must have a built in driver
+ with nondefault parameters, they can be edited in
+-/usr/src/linux/drivers/net/pcmcia/ray_cs.c. Searching for MODULE_PARM
++/usr/src/linux/drivers/net/pcmcia/ray_cs.c. Searching for module_param
+ will find them all.
+
+ Information on card services is available at:
+Index: linux-2.6.16/Documentation/sound/oss/Introduction
+===================================================================
+--- linux-2.6.16.orig/Documentation/sound/oss/Introduction
++++ linux-2.6.16/Documentation/sound/oss/Introduction
+@@ -69,7 +69,7 @@ are available, for example IRQ, address,
+
+ Warning, the options for different cards sometime use different names
+ for the same or a similar feature (dma1= versus dma16=). As a last
+-resort, inspect the code (search for MODULE_PARM).
++resort, inspect the code (search for module_param).
+
+ Notes:
+
+Index: linux-2.6.16/Documentation/sound/oss/cs46xx
+===================================================================
+--- linux-2.6.16.orig/Documentation/sound/oss/cs46xx
++++ linux-2.6.16/Documentation/sound/oss/cs46xx
+@@ -88,7 +88,7 @@ parameters. for a copy email: twoller@c
+
+ MODULE_PARMS definitions
+ ------------------------
+-MODULE_PARM(defaultorder, "i");
++module_param(defaultorder, ulong, 0);
+ defaultorder=N
+ where N is a value from 1 to 12
+ The buffer order determines the size of the dma buffer for the driver.
+@@ -98,18 +98,18 @@ to not underrun the dma buffer as easily
+ rather than 64k as some of the games work more responsively.
+ (2^N) * PAGE_SIZE = allocated buffer size
+
+-MODULE_PARM(cs_debuglevel, "i");
+-MODULE_PARM(cs_debugmask, "i");
++module_param(cs_debuglevel, ulong, 0644);
++module_param(cs_debugmask, ulong, 0644);
+ cs_debuglevel=N
+ cs_debugmask=0xMMMMMMMM
+ where N is a value from 0 (no debug printfs), to 9 (maximum)
+ 0xMMMMMMMM is a debug mask corresponding to the CS_xxx bits (see driver source).
+
+-MODULE_PARM(hercules_egpio_disable, "i");
++module_param(hercules_egpio_disable, ulong, 0);
+ hercules_egpio_disable=N
+ where N is a 0 (enable egpio), or a 1 (disable egpio support)
+
+-MODULE_PARM(initdelay, "i");
++module_param(initdelay, ulong, 0);
+ initdelay=N
+ This value is used to determine the millescond delay during the initialization
+ code prior to powering up the PLL. On laptops this value can be used to
+@@ -118,19 +118,19 @@ system is booted under battery power the
+ properly delay the required time. Also, if the system is booted under AC power
+ and then the power removed, the mdelay()/udelay() functions will not delay properly.
+
+-MODULE_PARM(powerdown, "i");
++module_param(powerdown, ulong, 0);
+ powerdown=N
+ where N is 0 (disable any powerdown of the internal blocks) or 1 (enable powerdown)
+
+
+-MODULE_PARM(external_amp, "i");
++module_param(external_amp, bool, 0);
+ external_amp=1
+ if N is set to 1, then force enabling the EAPD support in the primary AC97 codec.
+ override the detection logic and force the external amp bit in the AC97 0x26 register
+ to be reset (0). EAPD should be 0 for powerup, and 1 for powerdown. The VTB Santa Cruz
+ card has inverted logic, so there is a special function for these cards.
+
+-MODULE_PARM(thinkpad, "i");
++module_param(thinkpad, bool, 0);
+ thinkpad=1
+ if N is set to 1, then force enabling the clkrun functionality.
+ Currently, when the part is being used, then clkrun is disabled for the entire system,
+Index: linux-2.6.16/arch/ppc/8xx_io/cs4218_tdm.c
+===================================================================
+--- linux-2.6.16.orig/arch/ppc/8xx_io/cs4218_tdm.c
++++ linux-2.6.16/arch/ppc/8xx_io/cs4218_tdm.c
+@@ -126,11 +126,11 @@ static int numReadBufs = 4, readbufSize
+ */
+ static volatile cbd_t *rx_base, *rx_cur, *tx_base, *tx_cur;
+
+-MODULE_PARM(catchRadius, "i");
+-MODULE_PARM(numBufs, "i");
+-MODULE_PARM(bufSize, "i");
+-MODULE_PARM(numreadBufs, "i");
+-MODULE_PARM(readbufSize, "i");
++module_param(catchRadius, int, 0);
++module_param(numBufs, int, 0);
++module_param(bufSize, int, 0);
++module_param(numreadBufs, int, 0);
++module_param(readbufSize, int, 0);
+
+ #define arraysize(x) (sizeof(x)/sizeof(*(x)))
+ #define le2be16(x) (((x)<<8 & 0xff00) | ((x)>>8 & 0x00ff))
+Index: linux-2.6.16/drivers/block/ataflop.c
+===================================================================
+--- linux-2.6.16.orig/drivers/block/ataflop.c
++++ linux-2.6.16/drivers/block/ataflop.c
+@@ -271,7 +271,7 @@ unsigned char *DMABuffer; /* buffer
+ static unsigned long PhysDMABuffer; /* physical address */
+
+ static int UseTrackbuffer = -1; /* Do track buffering? */
+-MODULE_PARM(UseTrackbuffer, "i");
++module_param(UseTrackbuffer, int, 0);
+
+ unsigned char *TrackBuffer; /* buffer for reads */
+ static unsigned long PhysTrackBuffer; /* physical address */
+@@ -296,7 +296,7 @@ static int MotorOn = 0, MotorOffTrys;
+ static int IsFormatting = 0, FormatError;
+
+ static int UserSteprate[FD_MAX_UNITS] = { -1, -1 };
+-MODULE_PARM(UserSteprate, "1-" __MODULE_STRING(FD_MAX_UNITS) "i");
++module_param_array(UserSteprate, int, NULL, 0);
+
+ /* Synchronization of FDC access. */
+ static volatile int fdc_busy = 0;
+Index: linux-2.6.16/drivers/cdrom/cm206.c
+===================================================================
+--- linux-2.6.16.orig/drivers/cdrom/cm206.c
++++ linux-2.6.16/drivers/cdrom/cm206.c
+@@ -218,12 +218,12 @@ static int cm206_base = CM206_BASE;
+ static int cm206_irq = CM206_IRQ;
+ #ifdef MODULE
+ static int cm206[2] = { 0, 0 }; /* for compatible `insmod' parameter passing */
++module_param_array(cm206, int, NULL, 0); /* base,irq or irq,base */
+ #endif
+
+-MODULE_PARM(cm206_base, "i"); /* base */
+-MODULE_PARM(cm206_irq, "i"); /* irq */
+-MODULE_PARM(cm206, "1-2i"); /* base,irq or irq,base */
+-MODULE_PARM(auto_probe, "i"); /* auto probe base and irq */
++module_param(cm206_base, int, 0); /* base */
++module_param(cm206_irq, int, 0); /* irq */
++module_param(auto_probe, bool, 0); /* auto probe base and irq */
+ MODULE_LICENSE("GPL");
+
+ #define POLLOOP 100 /* milliseconds */
+Index: linux-2.6.16/drivers/cdrom/sbpcd.c
+===================================================================
+--- linux-2.6.16.orig/drivers/cdrom/sbpcd.c
++++ linux-2.6.16/drivers/cdrom/sbpcd.c
+@@ -464,8 +464,13 @@ static int sbpcd[] =
+ static __cacheline_aligned DEFINE_SPINLOCK(sbpcd_lock);
+ static struct request_queue *sbpcd_queue;
+
+-MODULE_PARM(sbpcd, "2i");
+-MODULE_PARM(max_drives, "i");
++/* You can only set the first pair, from old MODULE_PARM code. */
++static int sbpcd_set(const char *val, struct kernel_param *kp)
++{
++ get_options((char *)val, 2, (int *)sbpcd);
++ return 0;
++}
++module_param_call(sbpcd, sbpcd_set, NULL, NULL, 0);
+
+ #define NUM_PROBE (sizeof(sbpcd) / sizeof(int))
+
+@@ -553,6 +558,7 @@ static unsigned char msgnum;
+ static char msgbuf[80];
+
+ static int max_drives = MAX_DRIVES;
++module_param(max_drives, int, 0);
+ #ifndef MODULE
+ static unsigned char setup_done;
+ static const char *str_sb_l = "soundblaster";
+Index: linux-2.6.16/drivers/char/istallion.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/istallion.c
++++ linux-2.6.16/drivers/char/istallion.c
+@@ -379,13 +379,13 @@ MODULE_DESCRIPTION("Stallion Intelligent
+ MODULE_LICENSE("GPL");
+
+
+-MODULE_PARM(board0, "1-3s");
++module_param_array(board0, charp, NULL, 0);
+ MODULE_PARM_DESC(board0, "Board 0 config -> name[,ioaddr[,memaddr]");
+-MODULE_PARM(board1, "1-3s");
++module_param_array(board1, charp, NULL, 0);
+ MODULE_PARM_DESC(board1, "Board 1 config -> name[,ioaddr[,memaddr]");
+-MODULE_PARM(board2, "1-3s");
++module_param_array(board2, charp, NULL, 0);
+ MODULE_PARM_DESC(board2, "Board 2 config -> name[,ioaddr[,memaddr]");
+-MODULE_PARM(board3, "1-3s");
++module_param_array(board3, charp, NULL, 0);
+ MODULE_PARM_DESC(board3, "Board 3 config -> name[,ioaddr[,memaddr]");
+
+ #endif
+Index: linux-2.6.16/drivers/char/mxser.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/mxser.c
++++ linux-2.6.16/drivers/char/mxser.c
+@@ -243,10 +243,10 @@ static int verbose = 0;
+
+ MODULE_AUTHOR("Casper Yang");
+ MODULE_DESCRIPTION("MOXA Smartio/Industio Family Multiport Board Device Driver");
+-MODULE_PARM(ioaddr, "1-4i");
+-MODULE_PARM(ttymajor, "i");
+-MODULE_PARM(calloutmajor, "i");
+-MODULE_PARM(verbose, "i");
++module_param_array(ioaddr, int, NULL, 0);
++module_param(ttymajor, int, 0);
++module_param(calloutmajor, int, 0);
++module_param(verbose, bool, 0);
+ MODULE_LICENSE("GPL");
+
+ struct mxser_log {
+Index: linux-2.6.16/drivers/char/riscom8.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/riscom8.c
++++ linux-2.6.16/drivers/char/riscom8.c
+@@ -1743,10 +1743,10 @@ static int iobase;
+ static int iobase1;
+ static int iobase2;
+ static int iobase3;
+-MODULE_PARM(iobase, "i");
+-MODULE_PARM(iobase1, "i");
+-MODULE_PARM(iobase2, "i");
+-MODULE_PARM(iobase3, "i");
++module_param(iobase, int, 0);
++module_param(iobase1, int, 0);
++module_param(iobase2, int, 0);
++module_param(iobase3, int, 0);
+
+ MODULE_LICENSE("GPL");
+ #endif /* MODULE */
+Index: linux-2.6.16/drivers/isdn/hardware/avm/b1dma.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hardware/avm/b1dma.c
++++ linux-2.6.16/drivers/isdn/hardware/avm/b1dma.c
+@@ -39,7 +39,7 @@ MODULE_AUTHOR("Carsten Paeth");
+ MODULE_LICENSE("GPL");
+
+ static int suppress_pollack = 0;
+-MODULE_PARM(suppress_pollack, "0-1i");
++module_param(suppress_pollack, bool, 0);
+
+ /* ------------------------------------------------------------- */
+
+Index: linux-2.6.16/drivers/isdn/hardware/avm/b1isa.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hardware/avm/b1isa.c
++++ linux-2.6.16/drivers/isdn/hardware/avm/b1isa.c
+@@ -169,8 +169,8 @@ static struct pci_dev isa_dev[MAX_CARDS]
+ static int io[MAX_CARDS];
+ static int irq[MAX_CARDS];
+
+-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i");
+-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_CARDS) "i");
++module_param_array(io, int, NULL, 0);
++module_param_array(irq, int, NULL, 0);
+ MODULE_PARM_DESC(io, "I/O base address(es)");
+ MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
+
+Index: linux-2.6.16/drivers/isdn/hardware/avm/c4.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hardware/avm/c4.c
++++ linux-2.6.16/drivers/isdn/hardware/avm/c4.c
+@@ -50,7 +50,7 @@ MODULE_DEVICE_TABLE(pci, c4_pci_tbl);
+ MODULE_DESCRIPTION("CAPI4Linux: Driver for AVM C2/C4 cards");
+ MODULE_AUTHOR("Carsten Paeth");
+ MODULE_LICENSE("GPL");
+-MODULE_PARM(suppress_pollack, "0-1i");
++module_param(suppress_pollack, bool, 0);
+
+ /* ------------------------------------------------------------- */
+
+Index: linux-2.6.16/drivers/isdn/hardware/avm/t1isa.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hardware/avm/t1isa.c
++++ linux-2.6.16/drivers/isdn/hardware/avm/t1isa.c
+@@ -519,9 +519,9 @@ static int io[MAX_CARDS];
+ static int irq[MAX_CARDS];
+ static int cardnr[MAX_CARDS];
+
+-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i");
+-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_CARDS) "i");
+-MODULE_PARM(cardnr, "1-" __MODULE_STRING(MAX_CARDS) "i");
++module_param_array(io, int, NULL, 0);
++module_param_array(irq, int, NULL, 0);
++module_param_array(cardnr, int, NULL, 0);
+ MODULE_PARM_DESC(io, "I/O base address(es)");
+ MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
+ MODULE_PARM_DESC(cardnr, "Card number(s) (as jumpered)");
+Index: linux-2.6.16/drivers/isdn/hysdn/hycapi.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hysdn/hycapi.c
++++ linux-2.6.16/drivers/isdn/hysdn/hycapi.c
+@@ -31,7 +31,7 @@
+ static char hycapi_revision[]="$Revision: 1.8.6.4 $";
+
+ unsigned int hycapi_enable = 0xffffffff;
+-MODULE_PARM(hycapi_enable, "i");
++module_param(hycapi_enable, uint, 0);
+
+ typedef struct _hycapi_appl {
+ unsigned int ctrl_mask;
+Index: linux-2.6.16/drivers/isdn/hysdn/hysdn_net.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/hysdn/hysdn_net.c
++++ linux-2.6.16/drivers/isdn/hysdn/hysdn_net.c
+@@ -24,7 +24,7 @@
+ #include "hysdn_defs.h"
+
+ unsigned int hynet_enable = 0xffffffff;
+-MODULE_PARM(hynet_enable, "i");
++module_param(hynet_enable, uint, 0);
+
+ /* store the actual version for log reporting */
+ char *hysdn_net_revision = "$Revision: 1.8.6.4 $";
+Index: linux-2.6.16/drivers/isdn/isdnloop/isdnloop.c
+===================================================================
+--- linux-2.6.16.orig/drivers/isdn/isdnloop/isdnloop.c
++++ linux-2.6.16/drivers/isdn/isdnloop/isdnloop.c
+@@ -22,7 +22,7 @@ static char *isdnloop_id = "loop0";
+ MODULE_DESCRIPTION("ISDN4Linux: Pseudo Driver that simulates an ISDN card");
+ MODULE_AUTHOR("Fritz Elfert");
+ MODULE_LICENSE("GPL");
+-MODULE_PARM(isdnloop_id, "s");
++module_param(isdnloop_id, charp, 0);
+ MODULE_PARM_DESC(isdnloop_id, "ID-String of first card");
+
+ static int isdnloop_addcard(char *);
+Index: linux-2.6.16/drivers/media/video/zr36120.c
+===================================================================
+--- linux-2.6.16.orig/drivers/media/video/zr36120.c
++++ linux-2.6.16/drivers/media/video/zr36120.c
+@@ -70,10 +70,10 @@ MODULE_AUTHOR("Pauline Middelink ");
+ MODULE_DESCRIPTION(DRIVER_DESC);
+-MODULE_PARM(bankwidth, "i");
++module_param(bankwidth, int, 0);
+ MODULE_PARM_DESC(bankwidth, "Set bankwidth (1=8 bit, 2=16 bit, default=2)");
+-MODULE_PARM(mem_speed, "i");
++module_param(mem_speed, int, 0);
+ MODULE_PARM_DESC(mem_speed, "Set memory access speed in ns");
+-MODULE_PARM(force_size, "i");
++module_param(force_size, int, 0);
+ MODULE_PARM_DESC(force_size, "Force size of card in MiB (1-64)");
+-MODULE_PARM(setvpp, "i");
++module_param(setvpp, int, 0);
+ MODULE_PARM_DESC(setvpp, "Set Vpp (0=Never, 1=On writes, 2=Always on, default=0)");
+-MODULE_PARM(vpp, "i");
++module_param(vpp, int, 0);
+ MODULE_PARM_DESC(vpp, "Vpp value in 1/10ths eg 33=3.3V 120=12V (Dangerous)");
+-MODULE_PARM(mem_type, "i");
++module_param(mem_type, int, 0);
+ MODULE_PARM_DESC(mem_type, "Set Memory type (0=Flash, 1=RAM, 2=ROM, default=0)");
+
+
+Index: linux-2.6.16/drivers/net/atari_bionet.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/atari_bionet.c
++++ linux-2.6.16/drivers/net/atari_bionet.c
+@@ -123,7 +123,7 @@ static char version[] =
+ * Global variable 'bionet_debug'. Can be set at load time by 'insmod'
+ */
+ unsigned int bionet_debug = NET_DEBUG;
+-MODULE_PARM(bionet_debug, "i");
++module_param(bionet_debug, int, 0);
+ MODULE_PARM_DESC(bionet_debug, "bionet debug level (0-2)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/net/atari_pamsnet.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/atari_pamsnet.c
++++ linux-2.6.16/drivers/net/atari_pamsnet.c
+@@ -119,7 +119,7 @@ static char *version =
+ * Global variable 'pamsnet_debug'. Can be set at load time by 'insmod'
+ */
+ unsigned int pamsnet_debug = NET_DEBUG;
+-MODULE_PARM(pamsnet_debug, "i");
++module_param(pamsnet_debug, int, 0);
+ MODULE_PARM_DESC(pamsnet_debug, "pamsnet debug enable (0-1)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/net/atarilance.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/atarilance.c
++++ linux-2.6.16/drivers/net/atarilance.c
+@@ -78,7 +78,7 @@ static int lance_debug = LANCE_DEBUG;
+ #else
+ static int lance_debug = 1;
+ #endif
+-MODULE_PARM(lance_debug, "i");
++module_param(lance_debug, int, 0);
+ MODULE_PARM_DESC(lance_debug, "atarilance debug level (0-3)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/net/cassini.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/cassini.c
++++ linux-2.6.16/drivers/net/cassini.c
+@@ -191,12 +191,15 @@
+ static char version[] __devinitdata =
+ DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
+
++static int cassini_debug = -1; /* -1 == use CAS_DEF_MSG_ENABLE as value */
++static int link_mode;
++
+ MODULE_AUTHOR("Adrian Sun (asun@darksunrising.com)");
+ MODULE_DESCRIPTION("Sun Cassini(+) ethernet driver");
+ MODULE_LICENSE("GPL");
+-MODULE_PARM(cassini_debug, "i");
++module_param(cassini_debug, int, 0);
+ MODULE_PARM_DESC(cassini_debug, "Cassini bitmapped debugging message enable value");
+-MODULE_PARM(link_mode, "i");
++module_param(link_mode, int, 0);
+ MODULE_PARM_DESC(link_mode, "default link mode");
+
+ /*
+@@ -208,7 +211,7 @@ MODULE_PARM_DESC(link_mode, "default lin
+ * Value in seconds, for user input.
+ */
+ static int linkdown_timeout = DEFAULT_LINKDOWN_TIMEOUT;
+-MODULE_PARM(linkdown_timeout, "i");
++module_param(linkdown_timeout, int, 0);
+ MODULE_PARM_DESC(linkdown_timeout,
+ "min reset interval in sec. for PCS linkdown issue; disabled if not positive");
+
+@@ -220,8 +223,6 @@ MODULE_PARM_DESC(linkdown_timeout,
+ static int link_transition_timeout;
+
+
+-static int cassini_debug = -1; /* -1 == use CAS_DEF_MSG_ENABLE as value */
+-static int link_mode;
+
+ static u16 link_modes[] __devinitdata = {
+ BMCR_ANENABLE, /* 0 : autoneg */
+Index: linux-2.6.16/drivers/net/chelsio/cxgb2.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/chelsio/cxgb2.c
++++ linux-2.6.16/drivers/net/chelsio/cxgb2.c
+@@ -124,7 +124,7 @@ MODULE_LICENSE("GPL");
+
+ static int dflt_msg_enable = DFLT_MSG_ENABLE;
+
+-MODULE_PARM(dflt_msg_enable, "i");
++module_param(dflt_msg_enable, int, 0);
+ MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T1 message enable bitmap");
+
+
+Index: linux-2.6.16/drivers/net/fec_8xx/fec_main.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/fec_8xx/fec_main.c
++++ linux-2.6.16/drivers/net/fec_8xx/fec_main.c
+@@ -55,11 +55,11 @@ MODULE_AUTHOR("Pantelis Antoniou ");
+ MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
+-MODULE_PARM(crc_force, "i");
++module_param(crc_force, int, 0);
+ MODULE_PARM_DESC(crc_force, "crc [0 = auto | 1 = none | 2 = flexnet | 3 = smack]");
+ MODULE_LICENSE("GPL");
+ MODULE_ALIAS_LDISC(N_AX25);
+Index: linux-2.6.16/drivers/net/irda/irport.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/irda/irport.c
++++ linux-2.6.16/drivers/net/irda/irport.c
+@@ -1118,9 +1118,9 @@ static void __exit irport_cleanup(void)
+ }
+ }
+
+-MODULE_PARM(io, "1-4i");
++module_param_array(io, int, NULL, 0);
+ MODULE_PARM_DESC(io, "Base I/O addresses");
+-MODULE_PARM(irq, "1-4i");
++module_param_array(irq, int, NULL, 0);
+ MODULE_PARM_DESC(irq, "IRQ lines");
+
+ MODULE_AUTHOR("Dag Brattli ");
+Index: linux-2.6.16/drivers/net/lasi_82596.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/lasi_82596.c
++++ linux-2.6.16/drivers/net/lasi_82596.c
+@@ -177,7 +177,7 @@ static int i596_debug = (DEB_SERIOUS|DEB
+ MODULE_AUTHOR("Richard Hirst");
+ MODULE_DESCRIPTION("i82596 driver");
+ MODULE_LICENSE("GPL");
+-MODULE_PARM(i596_debug, "i");
++module_param(i596_debug, int, 0);
+ MODULE_PARM_DESC(i596_debug, "lasi_82596 debug mask");
+
+ /* Copy frames shorter than rx_copybreak, otherwise pass on up in
+@@ -1520,9 +1520,9 @@ static void set_multicast_list(struct ne
+ }
+ }
+
+-MODULE_PARM(debug, "i");
+-MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
+ static int debug = -1;
++module_param(debug, int, 0);
++MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
+
+ static int num_drivers;
+ static struct net_device *netdevs[MAX_DRIVERS];
+Index: linux-2.6.16/drivers/net/mac89x0.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/mac89x0.c
++++ linux-2.6.16/drivers/net/mac89x0.c
+@@ -629,7 +629,7 @@ static int set_mac_address(struct net_de
+ static struct net_device *dev_cs89x0;
+ static int debug;
+
+-MODULE_PARM(debug, "i");
++module_param(debug, int, 0);
+ MODULE_PARM_DESC(debug, "CS89[02]0 debug level (0-5)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/net/mace.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/mace.c
++++ linux-2.6.16/drivers/net/mace.c
+@@ -1042,7 +1042,7 @@ static void __exit mace_cleanup(void)
+
+ MODULE_AUTHOR("Paul Mackerras");
+ MODULE_DESCRIPTION("PowerMac MACE driver.");
+-MODULE_PARM(port_aaui, "i");
++module_param(port_aaui, int, 0);
+ MODULE_PARM_DESC(port_aaui, "MACE uses AAUI port (0-1)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/net/meth.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/meth.c
++++ linux-2.6.16/drivers/net/meth.c
+@@ -62,7 +62,7 @@ MODULE_DESCRIPTION("SGI O2 Builtin Fast
+
+ #ifdef HAVE_TX_TIMEOUT
+ static int timeout = TX_TIMEOUT;
+-MODULE_PARM(timeout, "i");
++module_param(timeout, int, 0);
+ #endif
+
+ /*
+Index: linux-2.6.16/drivers/net/ne-h8300.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/ne-h8300.c
++++ linux-2.6.16/drivers/net/ne-h8300.c
+@@ -600,9 +600,9 @@ static int io[MAX_NE_CARDS];
+ static int irq[MAX_NE_CARDS];
+ static int bad[MAX_NE_CARDS]; /* 0xbad = bad sig or no reset ack */
+
+-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+-MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
++module_param_array(io, int, NULL, 0);
++module_param_array(irq, int, NULL, 0);
++module_param_array(bad, int, NULL, 0);
+ MODULE_PARM_DESC(io, "I/O base address(es)");
+ MODULE_PARM_DESC(irq, "IRQ number(s)");
+ MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver");
+Index: linux-2.6.16/drivers/net/ni5010.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/ni5010.c
++++ linux-2.6.16/drivers/net/ni5010.c
+@@ -766,8 +766,8 @@ static void ni5010_show_registers(struct
+ #ifdef MODULE
+ static struct net_device *dev_ni5010;
+
+-MODULE_PARM(io, "i");
+-MODULE_PARM(irq, "i");
++module_param(io, int, 0);
++module_param(irq, int, 0);
+ MODULE_PARM_DESC(io, "ni5010 I/O base address");
+ MODULE_PARM_DESC(irq, "ni5010 IRQ number");
+
+Index: linux-2.6.16/drivers/net/sun3lance.c
+===================================================================
+--- linux-2.6.16.orig/drivers/net/sun3lance.c
++++ linux-2.6.16/drivers/net/sun3lance.c
+@@ -71,7 +71,7 @@ static int lance_debug = LANCE_DEBUG;
+ #else
+ static int lance_debug = 1;
+ #endif
+-MODULE_PARM(lance_debug, "i");
++module_param(lance_debug, int, 0);
+ MODULE_PARM_DESC(lance_debug, "SUN3 Lance debug level (0-3)");
+ MODULE_LICENSE("GPL");
+
+Index: linux-2.6.16/drivers/s390/block/dasd.c
+===================================================================
+--- linux-2.6.16.orig/drivers/s390/block/dasd.c
++++ linux-2.6.16/drivers/s390/block/dasd.c
+@@ -43,7 +43,6 @@ MODULE_AUTHOR("Holger Smolinski
+ #include
+ #include
++#include
+
+ #include
+ #include
+@@ -69,6 +70,8 @@ int dasd_autodetect = 0; /* is true, whe
+ * strings when running as a module.
+ */
+ static char *dasd[256];
++module_param_array(dasd, charp, NULL, 0);
++
+ /*
+ * Single spinlock to protect devmap structures and lists.
+ */
+Index: linux-2.6.16/drivers/scsi/arm/cumana_2.c
+===================================================================
+--- linux-2.6.16.orig/drivers/scsi/arm/cumana_2.c
++++ linux-2.6.16/drivers/scsi/arm/cumana_2.c
+@@ -550,6 +550,6 @@ module_exit(cumanascsi2_exit);
+
+ MODULE_AUTHOR("Russell King");
+ MODULE_DESCRIPTION("Cumana SCSI-2 driver for Acorn machines");
+-MODULE_PARM(term, "1-8i");
++module_param_array(term, int, NULL, 0);
+ MODULE_PARM_DESC(term, "SCSI bus termination");
+ MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/scsi/arm/eesox.c
+===================================================================
+--- linux-2.6.16.orig/drivers/scsi/arm/eesox.c
++++ linux-2.6.16/drivers/scsi/arm/eesox.c
+@@ -674,6 +674,6 @@ module_exit(eesox_exit);
+
+ MODULE_AUTHOR("Russell King");
+ MODULE_DESCRIPTION("EESOX 'Fast' SCSI driver for Acorn machines");
+-MODULE_PARM(term, "1-8i");
++module_param_array(term, int, NULL, 0);
+ MODULE_PARM_DESC(term, "SCSI bus termination");
+ MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/scsi/arm/powertec.c
+===================================================================
+--- linux-2.6.16.orig/drivers/scsi/arm/powertec.c
++++ linux-2.6.16/drivers/scsi/arm/powertec.c
+@@ -466,6 +466,6 @@ module_exit(powertecscsi_exit);
+
+ MODULE_AUTHOR("Russell King");
+ MODULE_DESCRIPTION("Powertec SCSI driver");
+-MODULE_PARM(term, "1-8i");
++module_param_array(term, int, NULL, 0);
+ MODULE_PARM_DESC(term, "SCSI bus termination");
+ MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/scsi/atari_scsi.c
+===================================================================
+--- linux-2.6.16.orig/drivers/scsi/atari_scsi.c
++++ linux-2.6.16/drivers/scsi/atari_scsi.c
+@@ -239,17 +239,17 @@ static int atari_read_overruns = 0;
+ #endif
+
+ static int setup_can_queue = -1;
+-MODULE_PARM(setup_can_queue, "i");
++module_param(setup_can_queue, int, 0);
+ static int setup_cmd_per_lun = -1;
+-MODULE_PARM(setup_cmd_per_lun, "i");
++module_param(setup_cmd_per_lun, int, 0);
+ static int setup_sg_tablesize = -1;
+-MODULE_PARM(setup_sg_tablesize, "i");
++module_param(setup_sg_tablesize, int, 0);
+ #ifdef SUPPORT_TAGS
+ static int setup_use_tagged_queuing = -1;
+-MODULE_PARM(setup_use_tagged_queuing, "i");
++module_param(setup_use_tagged_queuing, int, 0);
+ #endif
+ static int setup_hostid = -1;
+-MODULE_PARM(setup_hostid, "i");
++module_param(setup_hostid, int, 0);
+
+
+ #if defined(CONFIG_TT_DMA_EMUL)
+Index: linux-2.6.16/drivers/video/pm3fb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/video/pm3fb.c
++++ linux-2.6.16/drivers/video/pm3fb.c
+@@ -3532,26 +3532,26 @@ int __init pm3fb_init(void)
+ MODULE_AUTHOR("Romain Dolbeau");
+ MODULE_DESCRIPTION("Permedia3 framebuffer device driver");
+ static char *mode[PM3_MAX_BOARD];
+-MODULE_PARM(mode,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
++module_param_array(mode, charp, NULL, 0);
+ MODULE_PARM_DESC(mode,"video mode");
+-MODULE_PARM(disable,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
++module_param_array(disable, short, NULL, 0);
+ MODULE_PARM_DESC(disable,"disable board");
+ static short off[PM3_MAX_BOARD];
+-MODULE_PARM(off,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
++module_param_array(off, short, NULL, 0);
+ MODULE_PARM_DESC(off,"disable board");
+ static char *pciid[PM3_MAX_BOARD];
+-MODULE_PARM(pciid,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
++module_param_array(pciid, charp, NULL, 0);
+ MODULE_PARM_DESC(pciid,"board PCI Id");
+-MODULE_PARM(noaccel,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
++module_param_array(noaccel, short, NULL, 0);
+ MODULE_PARM_DESC(noaccel,"disable accel");
+ static char *font[PM3_MAX_BOARD];
+-MODULE_PARM(font,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
++module_param_array(font, charp, NULL, 0);
+ MODULE_PARM_DESC(font,"choose font");
+-MODULE_PARM(depth,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
++module_param(depth, short, NULL, 0);
+ MODULE_PARM_DESC(depth,"boot-time depth");
+-MODULE_PARM(printtimings, "h");
++module_param(printtimings, short, NULL, 0);
+ MODULE_PARM_DESC(printtimings, "print the memory timings of the card(s)");
+-MODULE_PARM(forcesize, PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
++module_param(forcesize, short, NULL, 0);
+ MODULE_PARM_DESC(forcesize, "force specified memory size");
+ /*
+ MODULE_SUPPORTED_DEVICE("Permedia3 PCI boards")
+Index: linux-2.6.16/include/linux/module.h
+===================================================================
+--- linux-2.6.16.orig/include/linux/module.h
++++ linux-2.6.16/include/linux/module.h
+@@ -544,25 +544,6 @@ static inline void module_remove_driver(
+
+ /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
+
+-struct obsolete_modparm {
+- char name[64];
+- char type[64-sizeof(void *)];
+- void *addr;
+-};
+-
+-static inline void MODULE_PARM_(void) { }
+-#ifdef MODULE
+-/* DEPRECATED: Do not use. */
+-#define MODULE_PARM(var,type) \
+-extern struct obsolete_modparm __parm_##var \
+-__attribute__((section("__obsparm"))); \
+-struct obsolete_modparm __parm_##var = \
+-{ __stringify(var), type, &MODULE_PARM_ }; \
+-__MODULE_PARM_TYPE(var, type);
+-#else
+-#define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_;
+-#endif
+-
+ #define __MODULE_STRING(x) __stringify(x)
+
+ /* Use symbol_get and symbol_put instead. You'll thank me. */
+Index: linux-2.6.16/include/video/pm3fb.h
+===================================================================
+--- linux-2.6.16.orig/include/video/pm3fb.h
++++ linux-2.6.16/include/video/pm3fb.h
+@@ -1128,10 +1128,7 @@
+ #endif
+
+ /* max number of simultaneous board */
+-/* warning : make sure module array def's are coherent with PM3_MAX_BOARD */
+ #define PM3_MAX_BOARD 4
+-#define PM3_MAX_BOARD_MODULE_ARRAY_SHORT "1-4h"
+-#define PM3_MAX_BOARD_MODULE_ARRAY_STRING "1-4s"
+
+ /* max size of options */
+ #define PM3_OPTIONS_SIZE 256
+Index: linux-2.6.16/init/Kconfig
+===================================================================
+--- linux-2.6.16.orig/init/Kconfig
++++ linux-2.6.16/init/Kconfig
+@@ -459,15 +459,6 @@ config MODULE_FORCE_UNLOAD
+ rmmod). This is mainly for kernel developers and desperate users.
+ If unsure, say N.
+
+-config OBSOLETE_MODPARM
+- bool
+- default y
+- depends on MODULES
+- help
+- You need this option to use module parameters on modules which
+- have not been converted to the new module parameter system yet.
+- If unsure, say Y.
+-
+ config MODVERSIONS
+ bool "Module versioning support"
+ depends on MODULES
+Index: linux-2.6.16/kernel/rcutorture.c
+===================================================================
+--- linux-2.6.16.orig/kernel/rcutorture.c
++++ linux-2.6.16/kernel/rcutorture.c
+@@ -54,15 +54,15 @@ static int verbose; /* Print more debug
+ static int test_no_idle_hz; /* Test RCU's support for tickless idle CPUs. */
+ static int shuffle_interval = 5; /* Interval between shuffles (in sec)*/
+
+-MODULE_PARM(nreaders, "i");
++module_param(nreaders, int, 0);
+ MODULE_PARM_DESC(nreaders, "Number of RCU reader threads");
+-MODULE_PARM(stat_interval, "i");
++module_param(stat_interval, int, 0);
+ MODULE_PARM_DESC(stat_interval, "Number of seconds between stats printk()s");
+-MODULE_PARM(verbose, "i");
++module_param(verbose, bool, 0);
+ MODULE_PARM_DESC(verbose, "Enable verbose debugging printk()s");
+-MODULE_PARM(test_no_idle_hz, "i");
++module_param(test_no_idle_hz, bool, 0);
+ MODULE_PARM_DESC(test_no_idle_hz, "Test support for tickless idle CPUs");
+-MODULE_PARM(shuffle_interval, "i");
++module_param(shuffle_interval, int, 0);
+ MODULE_PARM_DESC(shuffle_interval, "Number of seconds between shuffles");
+ #define TORTURE_FLAG "rcutorture: "
+ #define PRINTK_STRING(s) \
+Index: linux-2.6.16/sound/oss/au1000.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/au1000.c
++++ linux-2.6.16/sound/oss/au1000.c
+@@ -98,7 +98,7 @@
+
+ /* Boot options */
+ static int vra = 0; // 0 = no VRA, 1 = use VRA if codec supports it
+-MODULE_PARM(vra, "i");
++module_param(vra, bool, 0);
+ MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
+
+
+Index: linux-2.6.16/sound/oss/au1550_ac97.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/au1550_ac97.c
++++ linux-2.6.16/sound/oss/au1550_ac97.c
+@@ -77,7 +77,7 @@
+ * 0 = no VRA, 1 = use VRA if codec supports it
+ */
+ static int vra = 1;
+-MODULE_PARM(vra, "i");
++module_param(vra, bool, 0);
+ MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
+
+ static struct au1550_state {
+Index: linux-2.6.16/sound/oss/dmasound/dmasound_core.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/dmasound/dmasound_core.c
++++ linux-2.6.16/sound/oss/dmasound/dmasound_core.c
+@@ -195,18 +195,18 @@
+ */
+
+ int dmasound_catchRadius = 0;
+-MODULE_PARM(dmasound_catchRadius, "i");
++module_param(dmasound_catchRadius, int, 0);
+
+ static unsigned int numWriteBufs = DEFAULT_N_BUFFERS;
+-MODULE_PARM(numWriteBufs, "i");
++module_param(numWriteBufs, int, 0);
+ static unsigned int writeBufSize = DEFAULT_BUFF_SIZE ; /* in bytes */
+-MODULE_PARM(writeBufSize, "i");
++module_param(writeBufSize, int, 0);
+
+ #ifdef HAS_RECORD
+ static unsigned int numReadBufs = DEFAULT_N_BUFFERS;
+-MODULE_PARM(numReadBufs, "i");
++module_param(numReadBufs, int, 0);
+ static unsigned int readBufSize = DEFAULT_BUFF_SIZE; /* in bytes */
+-MODULE_PARM(readBufSize, "i");
++module_param(readBufSize, int, 0);
+ #endif
+
+ MODULE_LICENSE("GPL");
+Index: linux-2.6.16/sound/oss/ite8172.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/ite8172.c
++++ linux-2.6.16/sound/oss/ite8172.c
+@@ -1966,9 +1966,9 @@ static int i2s_fmt[NR_DEVICE];
+
+ static unsigned int devindex;
+
+-MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
++module_param_array(spdif, int, NULL, 0);
+ MODULE_PARM_DESC(spdif, "if 1 the S/PDIF digital output is enabled");
+-MODULE_PARM(i2s_fmt, "1-" __MODULE_STRING(NR_DEVICE) "i");
++module_param_array(i2s_fmt, int, NULL, 0);
+ MODULE_PARM_DESC(i2s_fmt, "the format of I2S");
+
+ MODULE_AUTHOR("Monta Vista Software, stevel@mvista.com");
+Index: linux-2.6.16/sound/oss/swarm_cs4297a.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/swarm_cs4297a.c
++++ linux-2.6.16/sound/oss/swarm_cs4297a.c
+@@ -153,8 +153,8 @@ static void start_adc(struct cs4297a_sta
+ #if CSDEBUG
+ static unsigned long cs_debuglevel = 4; // levels range from 1-9
+ static unsigned long cs_debugmask = CS_INIT /*| CS_IOCTL*/;
+-MODULE_PARM(cs_debuglevel, "i");
+-MODULE_PARM(cs_debugmask, "i");
++module_param(cs_debuglevel, int, 0);
++module_param(cs_debugmask, int, 0);
+ #endif
+ #define CS_TRUE 1
+ #define CS_FALSE 0
+Index: linux-2.6.16/sound/oss/waveartist.c
+===================================================================
+--- linux-2.6.16.orig/sound/oss/waveartist.c
++++ linux-2.6.16/sound/oss/waveartist.c
+@@ -2028,8 +2028,8 @@ __setup("waveartist=", setup_waveartist)
+ #endif
+
+ MODULE_DESCRIPTION("Rockwell WaveArtist RWA-010 sound driver");
+-MODULE_PARM(io, "i"); /* IO base */
+-MODULE_PARM(irq, "i"); /* IRQ */
+-MODULE_PARM(dma, "i"); /* DMA */
+-MODULE_PARM(dma2, "i"); /* DMA2 */
++module_param(io, int, 0); /* IO base */
++module_param(irq, int, 0); /* IRQ */
++module_param(dma, int, 0); /* DMA */
++module_param(dma2, int, 0); /* DMA2 */
+ MODULE_LICENSE("GPL");
++++++ patches.rpmify.tar.bz2 ++++++
++++++ patches.suse.tar.bz2 ++++++
++++++ patches.uml.tar.bz2 ++++++
++++++ patches.xen.tar.bz2 ++++++
++++++ series.conf ++++++
--- kernel-source/series.conf 2006-04-02 11:18:00.000000000 +0200
+++ kernel-source/series.conf 2006-04-02 21:06:52.000000000 +0200
@@ -27,7 +27,7 @@
patches.fixes/git-kbuild.patch
patches.fixes/git-kbuild-cscope.patch
patches.fixes/duplicate-exports.diff
- patches.fixes/module-obsparm.diff
+ patches.fixes/remove-MODULE_PARM
patches.suse/error-implicit-function-declaration.patch
patches.suse/ppc-fno-ivopts.patch
@@ -456,7 +456,6 @@
patches.drivers/export_symbol_gpl_future-rcu.patch
patches.drivers/export_symbol_gpl_future-usb.patch
-
########################################################
# USB
########################################################
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...