* [PATCH] modules: sysfs - export: taint, address, size
@ 2012-01-07 15:44 Kay Sievers
2012-01-09 7:27 ` Rusty Russell
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Kay Sievers @ 2012-01-07 15:44 UTC (permalink / raw)
To: Rusty Russell; +Cc: linux-kernel, Lucas De Marchi
From: Kay Sievers <kay.sievers@vrfy.org>
Subject: modules: sysfs - export taint, address, size
Recent tools do not use /proc to retrieve module information. A few values
are currently missing from sysfs.
Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
---
kernel/module.c | 89 +++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 62 insertions(+), 27 deletions(-)
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -849,6 +849,26 @@ out:
return ret;
}
+static size_t module_flags_taint(struct module *mod, char *buf)
+{
+ size_t l = 0;
+
+ if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
+ buf[l++] = 'P';
+ else if (mod->taints & (1 << TAINT_OOT_MODULE))
+ buf[l++] = 'O';
+ if (mod->taints & (1 << TAINT_FORCED_MODULE))
+ buf[l++] = 'F';
+ if (mod->taints & (1 << TAINT_CRAP))
+ buf[l++] = 'C';
+ /*
+ * TAINT_FORCED_RMMOD: could be added.
+ * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
+ * apply to modules.
+ */
+ return l;
+}
+
static inline void print_unload_info(struct seq_file *m, struct module *mod)
{
struct module_use *use;
@@ -907,10 +927,8 @@ static ssize_t show_refcnt(struct module
return sprintf(buffer, "%u\n", module_refcount(mk->mod));
}
-static struct module_attribute refcnt = {
- .attr = { .name = "refcnt", .mode = 0444 },
- .show = show_refcnt,
-};
+static struct module_attribute refcnt =
+ __ATTR(refcnt, 0444, show_refcnt, NULL);
void module_put(struct module *module)
{
@@ -970,10 +988,8 @@ static ssize_t show_initstate(struct mod
return sprintf(buffer, "%s\n", state);
}
-static struct module_attribute initstate = {
- .attr = { .name = "initstate", .mode = 0444 },
- .show = show_initstate,
-};
+static struct module_attribute module_initstate =
+ __ATTR(initstate, 0444, show_initstate, NULL);
static ssize_t store_uevent(struct module_attribute *mattr,
struct module_kobject *mk,
@@ -986,16 +1002,48 @@ static ssize_t store_uevent(struct modul
return count;
}
-struct module_attribute module_uevent = {
- .attr = { .name = "uevent", .mode = 0200 },
- .store = store_uevent,
-};
+struct module_attribute module_uevent =
+ __ATTR(uevent, 0200, NULL, store_uevent);
+
+static ssize_t show_address(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ return sprintf(buffer, "0x%pK\n", mk->mod->module_core);
+}
+
+struct module_attribute module_address =
+ __ATTR(address, 0444, show_address, NULL);
+
+static ssize_t show_size(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ return sprintf(buffer, "%u\n", mk->mod->init_size + mk->mod->core_size);
+}
+
+struct module_attribute module_size =
+ __ATTR(size, 0444, show_size, NULL);
+
+static ssize_t show_taint(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ size_t l;
+
+ l = module_flags_taint(mk->mod, buffer);
+ buffer[l++] = '\n';
+ return l;
+}
+
+struct module_attribute module_taint =
+ __ATTR(taint, 0444, show_taint, NULL);
static struct module_attribute *modinfo_attrs[] = {
&modinfo_version,
&modinfo_srcversion,
- &initstate,
+ &module_initstate,
&module_uevent,
+ &module_address,
+ &module_size,
+ &module_taint,
#ifdef CONFIG_MODULE_UNLOAD
&refcnt,
#endif
@@ -3256,20 +3304,7 @@ static char *module_flags(struct module
mod->state == MODULE_STATE_GOING ||
mod->state == MODULE_STATE_COMING) {
buf[bx++] = '(';
- if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
- buf[bx++] = 'P';
- else if (mod->taints & (1 << TAINT_OOT_MODULE))
- buf[bx++] = 'O';
- if (mod->taints & (1 << TAINT_FORCED_MODULE))
- buf[bx++] = 'F';
- if (mod->taints & (1 << TAINT_CRAP))
- buf[bx++] = 'C';
- /*
- * TAINT_FORCED_RMMOD: could be added.
- * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
- * apply to modules.
- */
-
+ bx += module_flags_taint(mod, buf + bx);
/* Show a - for module-is-being-unloaded */
if (mod->state == MODULE_STATE_GOING)
buf[bx++] = '-';
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-07 15:44 [PATCH] modules: sysfs - export: taint, address, size Kay Sievers
@ 2012-01-09 7:27 ` Rusty Russell
2012-01-09 12:44 ` Kay Sievers
2012-01-09 15:52 ` Nick Bowler
2012-01-09 23:07 ` Greg KH
2 siblings, 1 reply; 10+ messages in thread
From: Rusty Russell @ 2012-01-09 7:27 UTC (permalink / raw)
To: Kay Sievers; +Cc: Jon Masters, linux-kernel, Lucas De Marchi
On Sat, 07 Jan 2012 16:44:36 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
> From: Kay Sievers <kay.sievers@vrfy.org>
> Subject: modules: sysfs - export taint, address, size
>
> Recent tools do not use /proc to retrieve module information. A few values
> are currently missing from sysfs.
Well, strace says lsmod still does. Is libkmod doing something
different? Should we be deprecating /proc/modules?
> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
> ---
> kernel/module.c | 89 +++++++++++++++++++++++++++++++++++++++-----------------
> 1 file changed, 62 insertions(+), 27 deletions(-)
>
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -849,6 +849,26 @@ out:
> return ret;
> }
>
> +static size_t module_flags_taint(struct module *mod, char *buf)
> +{
> + size_t l = 0;
> +
> + if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
> + buf[l++] = 'P';
> + else if (mod->taints & (1 << TAINT_OOT_MODULE))
> + buf[l++] = 'O';
> + if (mod->taints & (1 << TAINT_FORCED_MODULE))
> + buf[l++] = 'F';
> + if (mod->taints & (1 << TAINT_CRAP))
> + buf[l++] = 'C';
> + /*
> + * TAINT_FORCED_RMMOD: could be added.
> + * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
> + * apply to modules.
> + */
> + return l;
> +}
The else here is weird. Shouldn't we leave the exclusion elsewhere?
> +static ssize_t show_address(struct module_attribute *mattr,
> + struct module_kobject *mk, char *buffer)
> +{
> + return sprintf(buffer, "0x%pK\n", mk->mod->module_core);
> +}
> +
> +struct module_attribute module_address =
> + __ATTR(address, 0444, show_address, NULL);
> +
> +static ssize_t show_size(struct module_attribute *mattr,
> + struct module_kobject *mk, char *buffer)
> +{
> + return sprintf(buffer, "%u\n", mk->mod->init_size + mk->mod->core_size);
> +}
> +
> +struct module_attribute module_size =
> + __ATTR(size, 0444, show_size, NULL);
This copies a past mistake, and is definitely wrong. Either expose both
pointers and sizes, or don't include init_size here. Sure, it'll
normally be 0, but if not it's confusing...
But the bigger question is: Why are we exposing these sizes?
/proc/modules did since 2.2, or before, but that doesn't make it the
best option...
Cheers,
Rusty.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-09 7:27 ` Rusty Russell
@ 2012-01-09 12:44 ` Kay Sievers
2012-01-09 18:40 ` Randy Dunlap
2012-01-09 22:44 ` Rusty Russell
0 siblings, 2 replies; 10+ messages in thread
From: Kay Sievers @ 2012-01-09 12:44 UTC (permalink / raw)
To: Rusty Russell; +Cc: Jon Masters, linux-kernel, Lucas De Marchi
On Mon, Jan 9, 2012 at 08:27, Rusty Russell <rusty@rustcorp.com.au> wrote:
> On Sat, 07 Jan 2012 16:44:36 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
>> Recent tools do not use /proc to retrieve module information. A few values
>> are currently missing from sysfs.
>
> Well, strace says lsmod still does. Is libkmod doing something
> different?
Yes, kmod used /sys only.
There is current code to read the size, to provide the 'lsmod' output,
but that will be removed.
> Should we be deprecating /proc/modules?
In the longer run, yes.
We still aim for leaving everything that isn't process- or
namespace-related (which, with some stretch is always process-related)
alone, and use /sys for it.
>> +static size_t module_flags_taint(struct module *mod, char *buf)
>> +{
>> + size_t l = 0;
>> +
>> + if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
>> + buf[l++] = 'P';
>> + else if (mod->taints & (1 << TAINT_OOT_MODULE))
>> + buf[l++] = 'O';
>> + if (mod->taints & (1 << TAINT_FORCED_MODULE))
>> + buf[l++] = 'F';
>> + if (mod->taints & (1 << TAINT_CRAP))
>> + buf[l++] = 'C';
>> + /*
>> + * TAINT_FORCED_RMMOD: could be added.
>> + * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
>> + * apply to modules.
>> + */
>> + return l;
>> +}
>
> The else here is weird. Shouldn't we leave the exclusion elsewhere?
You mean the 'else if ... TAINT_OOT_MODULE'? It's a one-to-one copy
of the current code, which just moved up a bit.
Disconnect the two flags form each other?
>> +static ssize_t show_address(struct module_attribute *mattr,
>> + struct module_kobject *mk, char *buffer)
>> +{
>> + return sprintf(buffer, "0x%pK\n", mk->mod->module_core);
>> +}
>> +
>> +struct module_attribute module_address =
>> + __ATTR(address, 0444, show_address, NULL);
>> +
>> +static ssize_t show_size(struct module_attribute *mattr,
>> + struct module_kobject *mk, char *buffer)
>> +{
>> + return sprintf(buffer, "%u\n", mk->mod->init_size + mk->mod->core_size);
>> +}
>> +
>> +struct module_attribute module_size =
>> + __ATTR(size, 0444, show_size, NULL);
>
> This copies a past mistake, and is definitely wrong. Either expose both
> pointers and sizes, or don't include init_size here. Sure, it'll
> normally be 0, but if not it's confusing...
Ah, good to know, mod->init_size is 0 for all modules here, so we
should just drop mod->init_size and maybe name the 'size' attribute to
'coresize'?
> But the bigger question is: Why are we exposing these sizes?
> /proc/modules did since 2.2, or before, but that doesn't make it the
> best option...
Good question, I doubt it is too useful, it's just that 'lsmod' shows
it, so we wanted to show too.
Kay
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-07 15:44 [PATCH] modules: sysfs - export: taint, address, size Kay Sievers
2012-01-09 7:27 ` Rusty Russell
@ 2012-01-09 15:52 ` Nick Bowler
2012-01-09 23:07 ` Greg KH
2 siblings, 0 replies; 10+ messages in thread
From: Nick Bowler @ 2012-01-09 15:52 UTC (permalink / raw)
To: Kay Sievers; +Cc: Rusty Russell, linux-kernel, Lucas De Marchi
On 2012-01-07 16:44 +0100, Kay Sievers wrote:
> From: Kay Sievers <kay.sievers@vrfy.org>
> Subject: modules: sysfs - export taint, address, size
>
> Recent tools do not use /proc to retrieve module information. A few values
> are currently missing from sysfs.
[...]
> @@ -907,10 +927,8 @@ static ssize_t show_refcnt(struct module
> return sprintf(buffer, "%u\n", module_refcount(mk->mod));
> }
>
> -static struct module_attribute refcnt = {
> - .attr = { .name = "refcnt", .mode = 0444 },
> - .show = show_refcnt,
> -};
> +static struct module_attribute refcnt =
> + __ATTR(refcnt, 0444, show_refcnt, NULL);
This change seems unrelated to the patch description, and is not
mentioned in the changelog. Several instances of this.
[...]
> static struct module_attribute *modinfo_attrs[] = {
> &modinfo_version,
> &modinfo_srcversion,
> - &initstate,
> + &module_initstate,
Another unrelated change?
> &module_uevent,
> + &module_address,
> + &module_size,
> + &module_taint,
You've forgotten to update Documentation/ABI to describe these new
attributes.
Cheers,
--
Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-09 12:44 ` Kay Sievers
@ 2012-01-09 18:40 ` Randy Dunlap
2012-01-09 22:44 ` Rusty Russell
1 sibling, 0 replies; 10+ messages in thread
From: Randy Dunlap @ 2012-01-09 18:40 UTC (permalink / raw)
To: Kay Sievers; +Cc: Rusty Russell, Jon Masters, linux-kernel, Lucas De Marchi
On 01/09/2012 04:44 AM, Kay Sievers wrote:
> On Mon, Jan 9, 2012 at 08:27, Rusty Russell <rusty@rustcorp.com.au> wrote:
>> On Sat, 07 Jan 2012 16:44:36 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
>
>>> Recent tools do not use /proc to retrieve module information. A few values
>>> are currently missing from sysfs.
>>
>> Well, strace says lsmod still does. Is libkmod doing something
>> different?
>
> Yes, kmod used /sys only.
>
> There is current code to read the size, to provide the 'lsmod' output,
> but that will be removed.
>
>> Should we be deprecating /proc/modules?
>
> In the longer run, yes.
Deprecate it for udev? OK.
what about other users of it?
> We still aim for leaving everything that isn't process- or
> namespace-related (which, with some stretch is always process-related)
> alone, and use /sys for it.
--
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-09 12:44 ` Kay Sievers
2012-01-09 18:40 ` Randy Dunlap
@ 2012-01-09 22:44 ` Rusty Russell
2012-01-10 16:47 ` Kay Sievers
1 sibling, 1 reply; 10+ messages in thread
From: Rusty Russell @ 2012-01-09 22:44 UTC (permalink / raw)
To: Kay Sievers; +Cc: Jon Masters, linux-kernel, Lucas De Marchi
On Mon, 9 Jan 2012 13:44:52 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
> On Mon, Jan 9, 2012 at 08:27, Rusty Russell <rusty@rustcorp.com.au> wrote:
> > The else here is weird. Shouldn't we leave the exclusion elsewhere?
>
> You mean the 'else if ... TAINT_OOT_MODULE'? It's a one-to-one copy
> of the current code, which just moved up a bit.
>
> Disconnect the two flags form each other?
Yes, I think so.
> > This copies a past mistake, and is definitely wrong. Either expose both
> > pointers and sizes, or don't include init_size here. Sure, it'll
> > normally be 0, but if not it's confusing...
>
> Ah, good to know, mod->init_size is 0 for all modules here, so we
> should just drop mod->init_size and maybe name the 'size' attribute to
> 'coresize'?
If a module is still initializing, mod->init_size may well be non-zero.
Let's rename it to coresize, and add initsize.
> > But the bigger question is: Why are we exposing these sizes?
> > /proc/modules did since 2.2, or before, but that doesn't make it the
> > best option...
>
> Good question, I doubt it is too useful, it's just that 'lsmod' shows
> it, so we wanted to show too.
And breaking lsmod output might kill some scripts. So it stays.
Let's drop the address stuff though.
We can actually do something more radical: we could change the kernel to
call modprobe to resolve unresolved symbols. We already support
symbol:<symbol> for symbol_request().
This means that modprobe still needs to maintain a sym->mod mapping
(though I would argue depmod should be moved into the kernel source),
but not any dependency mapping.
Thanks,
Rusty.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-07 15:44 [PATCH] modules: sysfs - export: taint, address, size Kay Sievers
2012-01-09 7:27 ` Rusty Russell
2012-01-09 15:52 ` Nick Bowler
@ 2012-01-09 23:07 ` Greg KH
2 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2012-01-09 23:07 UTC (permalink / raw)
To: Kay Sievers; +Cc: Rusty Russell, linux-kernel, Lucas De Marchi
On Sat, Jan 07, 2012 at 04:44:36PM +0100, Kay Sievers wrote:
> From: Kay Sievers <kay.sievers@vrfy.org>
> Subject: modules: sysfs - export taint, address, size
>
> Recent tools do not use /proc to retrieve module information. A few values
> are currently missing from sysfs.
>
> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
> ---
> kernel/module.c | 89 +++++++++++++++++++++++++++++++++++++++-----------------
You forgot the Documentation/ABI/ update as well :)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-09 22:44 ` Rusty Russell
@ 2012-01-10 16:47 ` Kay Sievers
2012-01-10 23:54 ` Rusty Russell
0 siblings, 1 reply; 10+ messages in thread
From: Kay Sievers @ 2012-01-10 16:47 UTC (permalink / raw)
To: Rusty Russell; +Cc: Jon Masters, linux-kernel, Lucas De Marchi
On Tue, 2012-01-10 at 09:14 +1030, Rusty Russell wrote:
> On Mon, 9 Jan 2012 13:44:52 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
> > On Mon, Jan 9, 2012 at 08:27, Rusty Russell <rusty@rustcorp.com.au> wrote:
> > > The else here is weird. Shouldn't we leave the exclusion elsewhere?
> >
> > You mean the 'else if ... TAINT_OOT_MODULE'? It's a one-to-one copy
> > of the current code, which just moved up a bit.
> >
> > Disconnect the two flags form each other?
>
> Yes, I think so.
>
> > > This copies a past mistake, and is definitely wrong. Either expose both
> > > pointers and sizes, or don't include init_size here. Sure, it'll
> > > normally be 0, but if not it's confusing...
> >
> > Ah, good to know, mod->init_size is 0 for all modules here, so we
> > should just drop mod->init_size and maybe name the 'size' attribute to
> > 'coresize'?
>
> If a module is still initializing, mod->init_size may well be non-zero.
> Let's rename it to coresize, and add initsize.
>
> > > But the bigger question is: Why are we exposing these sizes?
> > > /proc/modules did since 2.2, or before, but that doesn't make it the
> > > best option...
> >
> > Good question, I doubt it is too useful, it's just that 'lsmod' shows
> > it, so we wanted to show too.
>
> And breaking lsmod output might kill some scripts. So it stays.
>
> Let's drop the address stuff though.
From: Kay Sievers <kay.sievers@vrfy.org>
Subject: modules: sysfs - export: taint, coresize, initsize
Recent tools do not want to use /proc to retrieve module information. A few
values are currently missing from sysfs to replace the information available
in /proc/modules.
This adds /sys/module/*/{coresize,initsize,taint} attributes.
TAINT_PROPRIETARY_MODULE (P) and TAINT_OOT_MODULE (O) flags are both always
shown now, and do no longer exclude each other, also in /proc/modules.
Replace the open-coded sysfs attribute initializers with the __ATTR() macro.
Add the new attributes to Documentation/ABI.
Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
---
Documentation/ABI/testing/sysfs-module | 16 +++++
kernel/module.c | 93 ++++++++++++++++++++++-----------
2 files changed, 80 insertions(+), 29 deletions(-)
--- a/Documentation/ABI/testing/sysfs-module
+++ b/Documentation/ABI/testing/sysfs-module
@@ -33,3 +33,19 @@ Description: Maximum time allowed for pe
Beware, non-standard modes are usually not thoroughly tested by
hardware designers, and the hardware can malfunction when this
setting differ from default 100.
+
+What: /sys/module/*/{coresize,initsize}
+Date: Jan 2012
+KernelVersion:»·3.3
+Contact: Kay Sievers <kay.sievers@vrfy.org>
+Description: Module size in bytes.
+
+What: /sys/module/*/taint
+Date: Jan 2012
+KernelVersion:»·3.3
+Contact: Kay Sievers <kay.sievers@vrfy.org>
+Description: Module taint flags:
+ P - proprietary module
+ O - out-of-tree module
+ F - force-loaded module
+ C - staging driver module
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -849,6 +849,26 @@ out:
return ret;
}
+static size_t module_flags_taint(struct module *mod, char *buf)
+{
+ size_t l = 0;
+
+ if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
+ buf[l++] = 'P';
+ if (mod->taints & (1 << TAINT_OOT_MODULE))
+ buf[l++] = 'O';
+ if (mod->taints & (1 << TAINT_FORCED_MODULE))
+ buf[l++] = 'F';
+ if (mod->taints & (1 << TAINT_CRAP))
+ buf[l++] = 'C';
+ /*
+ * TAINT_FORCED_RMMOD: could be added.
+ * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
+ * apply to modules.
+ */
+ return l;
+}
+
static inline void print_unload_info(struct seq_file *m, struct module *mod)
{
struct module_use *use;
@@ -907,10 +927,8 @@ static ssize_t show_refcnt(struct module
return sprintf(buffer, "%u\n", module_refcount(mk->mod));
}
-static struct module_attribute refcnt = {
- .attr = { .name = "refcnt", .mode = 0444 },
- .show = show_refcnt,
-};
+static struct module_attribute modinfo_refcnt =
+ __ATTR(refcnt, 0444, show_refcnt, NULL);
void module_put(struct module *module)
{
@@ -970,10 +988,8 @@ static ssize_t show_initstate(struct mod
return sprintf(buffer, "%s\n", state);
}
-static struct module_attribute initstate = {
- .attr = { .name = "initstate", .mode = 0444 },
- .show = show_initstate,
-};
+static struct module_attribute modinfo_initstate =
+ __ATTR(initstate, 0444, show_initstate, NULL);
static ssize_t store_uevent(struct module_attribute *mattr,
struct module_kobject *mk,
@@ -986,18 +1002,50 @@ static ssize_t store_uevent(struct modul
return count;
}
-struct module_attribute module_uevent = {
- .attr = { .name = "uevent", .mode = 0200 },
- .store = store_uevent,
-};
+struct module_attribute module_uevent =
+ __ATTR(uevent, 0200, NULL, store_uevent);
+
+static ssize_t show_coresize(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ return sprintf(buffer, "%u\n", mk->mod->core_size);
+}
+
+static struct module_attribute modinfo_coresize =
+ __ATTR(coresize, 0444, show_coresize, NULL);
+
+static ssize_t show_initsize(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ return sprintf(buffer, "%u\n", mk->mod->init_size);
+}
+
+static struct module_attribute modinfo_initsize =
+ __ATTR(initsize, 0444, show_initsize, NULL);
+
+static ssize_t show_taint(struct module_attribute *mattr,
+ struct module_kobject *mk, char *buffer)
+{
+ size_t l;
+
+ l = module_flags_taint(mk->mod, buffer);
+ buffer[l++] = '\n';
+ return l;
+}
+
+static struct module_attribute modinfo_taint =
+ __ATTR(taint, 0444, show_taint, NULL);
static struct module_attribute *modinfo_attrs[] = {
+ &module_uevent,
&modinfo_version,
&modinfo_srcversion,
- &initstate,
- &module_uevent,
+ &modinfo_initstate,
+ &modinfo_coresize,
+ &modinfo_initsize,
+ &modinfo_taint,
#ifdef CONFIG_MODULE_UNLOAD
- &refcnt,
+ &modinfo_refcnt,
#endif
NULL,
};
@@ -3256,20 +3304,7 @@ static char *module_flags(struct module
mod->state == MODULE_STATE_GOING ||
mod->state == MODULE_STATE_COMING) {
buf[bx++] = '(';
- if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
- buf[bx++] = 'P';
- else if (mod->taints & (1 << TAINT_OOT_MODULE))
- buf[bx++] = 'O';
- if (mod->taints & (1 << TAINT_FORCED_MODULE))
- buf[bx++] = 'F';
- if (mod->taints & (1 << TAINT_CRAP))
- buf[bx++] = 'C';
- /*
- * TAINT_FORCED_RMMOD: could be added.
- * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
- * apply to modules.
- */
-
+ bx += module_flags_taint(mod, buf + bx);
/* Show a - for module-is-being-unloaded */
if (mod->state == MODULE_STATE_GOING)
buf[bx++] = '-';
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-10 16:47 ` Kay Sievers
@ 2012-01-10 23:54 ` Rusty Russell
2012-01-11 1:56 ` Lucas De Marchi
0 siblings, 1 reply; 10+ messages in thread
From: Rusty Russell @ 2012-01-10 23:54 UTC (permalink / raw)
To: Kay Sievers; +Cc: Jon Masters, linux-kernel, Lucas De Marchi
On Tue, 10 Jan 2012 17:47:43 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
> From: Kay Sievers <kay.sievers@vrfy.org>
> Subject: modules: sysfs - export: taint, coresize, initsize
>
> Recent tools do not want to use /proc to retrieve module information. A few
> values are currently missing from sysfs to replace the information available
> in /proc/modules.
>
> This adds /sys/module/*/{coresize,initsize,taint} attributes.
>
> TAINT_PROPRIETARY_MODULE (P) and TAINT_OOT_MODULE (O) flags are both always
> shown now, and do no longer exclude each other, also in /proc/modules.
>
> Replace the open-coded sysfs attribute initializers with the __ATTR() macro.
>
> Add the new attributes to Documentation/ABI.
>
> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Thanks, applied.
Cheers,
Rusty.
PS. You could have split this into four separate patches, like the
pedants wanted, and got more gititude!
PPS. I'm so glad you didn't.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] modules: sysfs - export: taint, address, size
2012-01-10 23:54 ` Rusty Russell
@ 2012-01-11 1:56 ` Lucas De Marchi
0 siblings, 0 replies; 10+ messages in thread
From: Lucas De Marchi @ 2012-01-11 1:56 UTC (permalink / raw)
To: Rusty Russell; +Cc: Kay Sievers, Jon Masters, linux-kernel
On Tue, Jan 10, 2012 at 9:54 PM, Rusty Russell <rusty@rustcorp.com.au> wrote:
> On Tue, 10 Jan 2012 17:47:43 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote:
>> From: Kay Sievers <kay.sievers@vrfy.org>
>> Subject: modules: sysfs - export: taint, coresize, initsize
>>
>> Recent tools do not want to use /proc to retrieve module information. A few
>> values are currently missing from sysfs to replace the information available
>> in /proc/modules.
>>
>> This adds /sys/module/*/{coresize,initsize,taint} attributes.
>>
>> TAINT_PROPRIETARY_MODULE (P) and TAINT_OOT_MODULE (O) flags are both always
>> shown now, and do no longer exclude each other, also in /proc/modules.
>>
>> Replace the open-coded sysfs attribute initializers with the __ATTR() macro.
>>
>> Add the new attributes to Documentation/ABI.
>>
>> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
>> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
>
> Thanks, applied.
>
Nice to see this patch applied. I'll prepare the changes to kmod.
Thanks
Lucas De Marchi
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-01-11 1:56 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-07 15:44 [PATCH] modules: sysfs - export: taint, address, size Kay Sievers
2012-01-09 7:27 ` Rusty Russell
2012-01-09 12:44 ` Kay Sievers
2012-01-09 18:40 ` Randy Dunlap
2012-01-09 22:44 ` Rusty Russell
2012-01-10 16:47 ` Kay Sievers
2012-01-10 23:54 ` Rusty Russell
2012-01-11 1:56 ` Lucas De Marchi
2012-01-09 15:52 ` Nick Bowler
2012-01-09 23:07 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).