public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sam Ravnborg <sam@ravnborg.org>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: modpost error about size inconsitency
Date: Sun, 9 Jul 2006 14:46:40 +0200	[thread overview]
Message-ID: <20060709124640.GA23306@mars.ravnborg.org> (raw)
In-Reply-To: <20060709021106.9310d4d1.akpm@osdl.org>

> - You'll probably see these:
> 
> 	WARNING: drivers/net/3c59x ids 36 bad size (each on 16)
> 	WARNING: drivers/net/depca ids 24 bad size (each on 16)
> 	WARNING: drivers/net/dgrs ids 24 bad size (each on 16)
> 	WARNING: drivers/net/hp100 ids 84 bad size (each on 16)
> 	WARNING: drivers/net/ne3210 ids 36 bad size (each on 16)
> 	WARNING: drivers/net/tulip/de4x5 ids 24 bad size (each on 16)
> 	WARNING: drivers/scsi/aha1740 ids 60 bad size (each on 16)
> 	WARNING: drivers/scsi/aic7xxx/aic7xxx ids 84 bad size (each on 16)
> 
>   They're triggered by eisa-bus-modalias-attributes-support-1.patch but I
>   don't know where the error lies.  But I love the error message!  Would be
>   good to see on a tee shirt.

Following does make the errormessage more descriptive. Will be pushed to
kbuild.git soon.
Sample error message (not for real - I provoked it):

FATAL: drivers/net/s2io: sizeof(struct pci_device_id)=33 is not a modulo of the
size of section __mod_pci_device_table=160.
Fix definition of struct pci_device_id in mod_devicetable.h


The error is now fatal.

	Sam

diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 37f67c2..c522f16 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -52,6 +52,23 @@ do {                                    
                 sprintf(str + strlen(str), "*");                \
 } while(0)
 
+/**
+ * Check that sizeof(device_id type) are consistent with size of section
+ * in .o file. If in-consistent then userspace and kernel does not agree
+ * on actual size which is a bug.
+ **/
+static void device_id_size_check(const char *modname, const char *device_id,
+				 unsigned long size, unsigned long id_size)
+{
+	if (size % id_size || size < id_size) {
+		fatal("%s: sizeof(struct %s_device_id)=%lu is not a modulo "
+		      "of the size of section __mod_%s_device_table=%lu.\n"
+		      "Fix definition of struct %s_device_id "
+		      "in mod_devicetable.h\n",
+		      modname, device_id, id_size, device_id, size, device_id);
+	}
+}
+
 /* USB is special because the bcdDevice can be matched against a numeric range */
 /* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipN" */
 static void do_usb_entry(struct usb_device_id *id,
@@ -152,10 +169,8 @@ static void do_usb_table(void *symval, u
 	unsigned int i;
 	const unsigned long id_size = sizeof(struct usb_device_id);
 
-	if (size % id_size || size < id_size) {
-		warn("%s ids %lu bad size "
-		     "(each on %lu)\n", mod->name, size, id_size);
-	}
+	device_id_size_check(mod->name, "usb", size, id_size);
+
 	/* Leave last one: it's the terminator. */
 	size -= id_size;
 
@@ -434,6 +449,7 @@ static inline int sym_is(const char *sym
 
 static void do_table(void *symval, unsigned long size,
 		     unsigned long id_size,
+		     const char *device_id,
 		     void *function,
 		     struct module *mod)
 {
@@ -441,10 +457,7 @@ static void do_table(void *symval, unsig
 	char alias[500];
 	int (*do_entry)(const char *, void *entry, char *alias) = function;
 
-	if (size % id_size || size < id_size) {
-		warn("%s ids %lu bad size "
-		     "(each on %lu)\n", mod->name, size, id_size);
-	}
+	device_id_size_check(mod->name, device_id, size, id_size);
 	/* Leave last one: it's the terminator. */
 	size -= id_size;
 
@@ -476,40 +489,51 @@ void handle_moddevtable(struct module *m
 		+ sym->st_value;
 
 	if (sym_is(symname, "__mod_pci_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct pci_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct pci_device_id), "pci",
 			 do_pci_entry, mod);
 	else if (sym_is(symname, "__mod_usb_device_table"))
 		/* special case to handle bcdDevice ranges */
 		do_usb_table(symval, sym->st_size, mod);
 	else if (sym_is(symname, "__mod_ieee1394_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct ieee1394_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct ieee1394_device_id), "ieee1394",
 			 do_ieee1394_entry, mod);
 	else if (sym_is(symname, "__mod_ccw_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct ccw_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct ccw_device_id), "ccw",
 			 do_ccw_entry, mod);
 	else if (sym_is(symname, "__mod_serio_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct serio_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct serio_device_id), "serio",
 			 do_serio_entry, mod);
 	else if (sym_is(symname, "__mod_pnp_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct pnp_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct pnp_device_id), "pnp",
 			 do_pnp_entry, mod);
 	else if (sym_is(symname, "__mod_pnp_card_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct pnp_card_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct pnp_card_device_id), "pnp_card",
 			 do_pnp_card_entry, mod);
 	else if (sym_is(symname, "__mod_pcmcia_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct pcmcia_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct pcmcia_device_id), "pcmia",
 			 do_pcmcia_entry, mod);
         else if (sym_is(symname, "__mod_of_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct of_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct of_device_id), "of",
 			 do_of_entry, mod);
         else if (sym_is(symname, "__mod_vio_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct vio_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct vio_device_id), "vio",
 			 do_vio_entry, mod);
 	else if (sym_is(symname, "__mod_i2c_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct i2c_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct i2c_device_id), "i2c",
 			 do_i2c_entry, mod);
 	else if (sym_is(symname, "__mod_input_device_table"))
-		do_table(symval, sym->st_size, sizeof(struct input_device_id),
+		do_table(symval, sym->st_size,
+			 sizeof(struct input_device_id), "input",
 			 do_input_entry, mod);
 }
 

  parent reply	other threads:[~2006-07-09 12:46 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-09  9:11 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 10:20 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:26 ` 2.6.18-rc1-mm1 Fabio Comolli
2006-07-09 10:45   ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 12:37     ` 2.6.18-rc1-mm1 Nick Piggin
2006-07-09 12:55       ` 2.6.18-rc1-mm1 Nick Piggin
2006-07-10  8:50       ` 2.6.18-rc1-mm1 Arjan van de Ven
2006-07-09 10:32 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:33   ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:52   ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 21:06     ` 2.6.18-rc1-mm1 Arjan van de Ven
2006-07-10  7:40     ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10  9:22       ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10  9:25         ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10 10:01           ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10 10:37             ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10 10:37               ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10 10:57                 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:02 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:13   ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 12:10   ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 13:19     ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:22 ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-09 12:22   ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 12:56     ` 2.6.18-rc1-mm1 Alan Cox
2006-07-09 14:21       ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-09 16:29       ` 2.6.18-rc1-mm1 Jeff Garzik
2006-07-09 18:35     ` 2.6.18-rc1-mm1 Andi Kleen
2006-07-11 19:37       ` 2.6.18-rc1-mm1 Greg KH
2006-07-09 21:10     ` 2.6.18-rc1-mm1 john stultz
2006-07-09 17:33   ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-09 21:40     ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10  4:56   ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-10  5:01     ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10  5:35   ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-09 11:49 ` 2.6.18-rc1-mm1 fails on amd64 (smp_call_function_single) Gregoire Favre
2006-07-09 13:00   ` Adrian Bunk
2006-07-09 14:11     ` Gregoire Favre
2006-07-09 20:39   ` Rafael J. Wysocki
2006-07-09 21:03     ` Andrew Morton
2006-07-09 22:37       ` Rafael J. Wysocki
2006-07-09 22:44         ` Andrew Morton
2006-07-10  0:08           ` Andi Kleen
2006-07-09 12:46 ` Sam Ravnborg [this message]
2006-07-09 12:49   ` modpost error about size inconsitency Sam Ravnborg
2006-07-09 14:28 ` [-mm patch] fix MODULES=n compile Adrian Bunk
2006-07-09 14:28 ` [-mm patch] proper prototype for drivers/scsi/arcmsr/arcmsr_attr.c:arcmsr_free_sysfs_attr() Adrian Bunk
2006-07-09 16:19 ` 2.6.18-rc1-mm1 oops on x86_64 Cedric Le Goater
2006-07-09 20:21   ` Andrew Morton
2006-07-09 20:35     ` Rafael J. Wysocki
2006-07-09 20:59       ` Andrew Morton
2006-07-09 21:11         ` Rafael J. Wysocki
2006-07-10 15:54     ` Christoph Lameter
2006-07-10 17:22       ` Christoph Lameter
2006-07-10 16:20     ` Christoph Lameter
2006-07-10 17:38       ` Christoph Lameter
2006-07-10 20:27         ` Cedric Le Goater
2006-07-10 20:32           ` Rafael J. Wysocki
2006-07-09 17:28 ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-09 20:24   ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10  7:11     ` 2.6.18-rc1-mm1 Mauro Carvalho Chehab
2006-07-10 22:25       ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-13 22:10       ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-09 17:53 ` [-mm patch] make arch/i386/kernel/cpu/cpufreq/longhaul.c:longhaul_walk_callback() static Adrian Bunk
2006-07-09 17:53 ` [-mm patch] kernel/rcutorture.c: make code static Adrian Bunk
2006-07-10 14:58   ` Paul E. McKenney
2006-07-09 18:22 ` 2.6.18-rc1-mm1: /sys/class/net/ethN becoming symlink befuddled /sbin/ifup Mike Galbraith
2006-07-09 19:01   ` Mike Galbraith
2006-07-09 20:51   ` Andrew Morton
2006-07-10  0:32     ` David Miller
2006-07-11 22:59       ` Greg KH
2006-07-12  6:29         ` Kay Sievers
2006-07-10  1:29     ` Jeremy Fitzhardinge
2006-07-10  5:01     ` Mike Galbraith
2006-07-09 19:24 ` 2.6.18-rc1-mm1 Valdis.Kletnieks
2006-07-09 21:11   ` 2.6.18-rc1-mm1 john stultz
2006-07-09 21:37 ` 2.6.18-rc1-mm1 inconsistent lock state in netpoll_send_skb Laurent Riffard
2006-07-10  8:40   ` Arjan van de Ven
2006-07-10 19:06     ` Laurent Riffard
2006-07-11  8:40       ` Arjan van de Ven
2006-07-11 22:00         ` Laurent Riffard
2006-07-09 21:47 ` 2.6.18-rc1-mm1 reiser4 module calls generic_file_read Laurent Riffard
2006-07-10 13:37   ` Edward Shishkin
2006-07-09 23:32 ` [-mm patch] fs/ocfs2/ioctl.c should #include "ioctl.h" Adrian Bunk
2006-07-10  0:33 ` 2.6.18-rc1-mm1 J.A. Magallón
2006-07-10 10:02   ` 2.6.18-rc1-mm1 Alan Cox
2006-07-10  1:10 ` 2.6.18-rc1-mm1 Brice Goglin
2006-07-10 15:22 ` 2.6.18-rc1-mm1 Rafael J. Wysocki
2006-07-10 18:33 ` [-mm patch] include/scsi/libsas.h should #include <linux/scatterlist.h> Adrian Bunk
2006-07-10 19:29 ` [PATCH -mm] sysfs_remove_bin_file: no return value, no check needed Randy.Dunlap
2006-07-10 21:43   ` Andrew Morton
2006-07-11  0:36     ` Randy.Dunlap
2006-07-11  6:05       ` [PATCH -mm] sysfs_remove_bin_file: no return value, dump_stack on error Randy.Dunlap
2006-07-10 22:21 ` 2.6.18-rc1-mm1 J.A. Magallón
2006-07-11 12:47 ` [-mm patch] MICROCODE should select FW_LOADER Adrian Bunk
2006-07-11 12:52 ` 2.6.18-rc1-mm1: drivers/ide/pci/jmicron.c warning Adrian Bunk
2006-07-11 14:02   ` Alan Cox
2006-07-11 22:10     ` Adrian Bunk
2006-07-11 23:10       ` Alan Cox
2006-07-11 23:23         ` Andrew Morton
2006-07-11 23:27           ` Adrian Bunk
2006-07-12 20:45 ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-13 20:18 ` [-mm patch] DEBUG_SHIRQ should depend on DEBUG_KERNEL Adrian Bunk
2006-07-15 13:41   ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060709124640.GA23306@mars.ravnborg.org \
    --to=sam@ravnborg.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox