From: Dmitry Torokhov <dtor@vmware.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: David Miller <davem@davemloft.net>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Rusty Russell <rusty@rustcorp.com.au>,
Linux/m68k <linux-m68k@vger.kernel.org>,
Linux-Arch <linux-arch@vger.kernel.org>,
Dmitry Torokhov <dtor@vmware.com>
Subject: [PATCH 1/3] module: deal with alignment issues in built-in module versions
Date: Mon, 7 Feb 2011 16:02:25 -0800 [thread overview]
Message-ID: <1297123347-2170-1-git-send-email-dtor@vmware.com> (raw)
On m68k natural alignment is 2-byte boundary but we are trying to
align structures in __modver section on sizeof(void *) boundary.
This causes trouble when we try to access elements in this section
in array-like fashion when create "version" attributes for built-in
modules.
Moreover, as DaveM said, we can't reliably put structures into
independent objects, put them into a special section, and then expect
array access over them (via the section boundaries) after linking the
objects together to just "work" due to variable alignment choices in
different situations. The only solution that seems to work reliably
is to make an array of plain pointers to the objects in question and
put those pointers in the special section.
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
---
include/linux/module.h | 10 +++++-----
kernel/params.c | 9 ++++++---
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/linux/module.h b/include/linux/module.h
index 9bdf27c..9b7081a 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -174,10 +174,7 @@ extern struct module __this_module;
#define MODULE_VERSION(_version) \
extern ssize_t __modver_version_show(struct module_attribute *, \
struct module *, char *); \
- static struct module_version_attribute __modver_version_attr \
- __used \
- __attribute__ ((__section__ ("__modver"),aligned(sizeof(void *)))) \
- = { \
+ static struct module_version_attribute ___modver_attr = { \
.mattr = { \
.attr = { \
.name = "version", \
@@ -187,7 +184,10 @@ extern struct module __this_module;
}, \
.module_name = KBUILD_MODNAME, \
.version = _version, \
- }
+ }; \
+ static const struct module_version_attribute \
+ __used __attribute__ ((__section__ ("__modver"))) \
+ * __moduleparam_const __modver_attr = &___modver_attr
#endif
/* Optional firmware file (or files) needed by the module
diff --git a/kernel/params.c b/kernel/params.c
index 0da1411..09a08cb 100644
--- a/kernel/params.c
+++ b/kernel/params.c
@@ -821,15 +821,18 @@ ssize_t __modver_version_show(struct module_attribute *mattr,
return sprintf(buf, "%s\n", vattr->version);
}
-extern struct module_version_attribute __start___modver[], __stop___modver[];
+extern const struct module_version_attribute *__start___modver[];
+extern const struct module_version_attribute *__stop___modver[];
static void __init version_sysfs_builtin(void)
{
- const struct module_version_attribute *vattr;
+ const struct module_version_attribute **p;
struct module_kobject *mk;
int err;
- for (vattr = __start___modver; vattr < __stop___modver; vattr++) {
+ for (p = __start___modver; p < __stop___modver; p++) {
+ const struct module_version_attribute *vattr = *p;
+
mk = locate_module_kobject(vattr->module_name);
if (mk) {
err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr);
--
1.7.3.2
next reply other threads:[~2011-02-08 0:02 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-08 0:02 Dmitry Torokhov [this message]
2011-02-08 0:02 ` [PATCH 2/3] module: deal with alignment issues in built-in module parameters Dmitry Torokhov
2011-02-08 0:02 ` [PATCH 3/3] module: do not hide __modver_version_show declaration behind ifdef Dmitry Torokhov
2011-02-08 21:12 ` [PATCH 1/3] module: deal with alignment issues in built-in module versions Geert Uytterhoeven
2011-02-17 12:43 ` Geert Uytterhoeven
2011-02-11 22:03 ` [PATCH v2] module: deal with alignment issues in built-in module parameters Dmitry Torokhov
2011-02-13 23:04 ` Rusty Russell
2011-02-17 17:24 ` [PATCH 1/3] module: deal with alignment issues in built-in module versions Linus Torvalds
2011-02-17 17:31 ` Dmitry Torokhov
2011-02-17 17:45 ` Linus Torvalds
2011-02-17 18:00 ` Dmitry Torokhov
2011-02-17 18:06 ` Linus Torvalds
2011-02-17 21:01 ` David Miller
2011-02-17 21:11 ` Linus Torvalds
2011-02-17 21:17 ` David Miller
2011-02-17 21:54 ` Linus Torvalds
2011-02-17 22:01 ` David Miller
2011-02-17 22:19 ` Dmitry Torokhov
2011-02-17 22:23 ` David Miller
2011-02-17 22:48 ` Linus Torvalds
2011-02-17 23:08 ` Linus Torvalds
2011-02-17 23:19 ` David Miller
2011-02-19 0:14 ` Benjamin Herrenschmidt
2011-02-21 4:00 ` Rusty Russell
2011-02-21 7:38 ` Geert Uytterhoeven
2011-02-21 7:49 ` Dmitry Torokhov
2011-02-21 13:25 ` Geert Uytterhoeven
2011-02-22 1:58 ` Benjamin Herrenschmidt
2011-02-22 2:03 ` Linus Torvalds
2011-02-22 7:02 ` Dmitry Torokhov
2011-02-22 17:08 ` Jesper Nilsson
2011-02-22 20:47 ` Linus Torvalds
2011-02-23 15:00 ` Jesper Nilsson
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=1297123347-2170-1-git-send-email-dtor@vmware.com \
--to=dtor@vmware.com \
--cc=davem@davemloft.net \
--cc=geert@linux-m68k.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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