Re: [PATCH] exporting capability code/name pairs (try #6)
On Wed, Feb 20, 2008 at 02:38:16PM +0900, Kohei KaiGai wrote: > Greg KH wrote: >> On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: > If we can have a private member in kobj_attribute, we can found the >>> content > to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. >>> [1/2] Add a private data field within kobj_attribute structure. >>> >>> This patch add a private data field, declared as void *, within >>> kobj_attribute >>> structure. Anyone wants to use sysfs can store their private data to >>> refer at >>> _show() and _store() method. >>> It enables to share a single method function with several similar >>> entries, >>> like ones to export the list of capabilities the running kernel >>> supported. >> But your patch 2/2 doesn't use this interface, why not? > > Really? > The following two _show() methods shared by every capabilities refer > the private member of kobj_attribute. > > | +static ssize_t capability_name_show(struct kobject *kobj, > | +struct kobj_attribute *attr, > | +char *buffer) > | +{ > | +/* It returns numerical representation of capability. */ > | +return scnprintf(buffer, PAGE_SIZE, "%d\n", (int) attr->data); > | +} > | + > | +static ssize_t capability_code_show(struct kobject *kobj, > | +struct kobj_attribute *attr, > | +char *buffer) > | +{ > | +/* It returns symbolic representation of capability. */ > | +return scnprintf(buffer, PAGE_SIZE, "%s\n", (char *) attr->data); > | +} Ah, sorry, missed that. I also missed where this was set up as well :( thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] exporting capability code/name pairs (try #6)
Greg KH wrote: On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. But your patch 2/2 doesn't use this interface, why not? Really? The following two _show() methods shared by every capabilities refer the private member of kobj_attribute. | +static ssize_t capability_name_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns numerical representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, "%d\n", (int) attr->data); | +} | + | +static ssize_t capability_code_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns symbolic representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, "%s\n", (char *) attr->data); | +} include/linux/kobject.h |1 + include/linux/sysfs.h |7 +++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index caa3f41..57d5bf1 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -130,6 +130,7 @@ struct kobj_attribute { char *buf); ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); + void *data; /* a private field */ Hm, can you really use this? Yes, extern struct sysfs_ops kobj_sysfs_ops; diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 8027104..6f40ff9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -50,6 +50,13 @@ struct attribute_group { .store = _store, \ } +#define __ATTR_DATA(_name,_mode,_show,_store,_data) { \ + .attr = {.name = __stringify(_name), .mode = _mode }, \ + .show = _show,\ + .store = _store, \ + .data = (void *)(_data), \ +} I don't see how this would be any different from the original? You are always passed a kobject, which can be embedded in anything else. The intension of the latest patch is same as the version which uses capability_attribute structure. It enables to store the content to be returned in the expanded field. Applying kobj_attribute killed needs to declare my own structure. However, every entries had its own _show() method, generated by macros automatically, in the previous version. It fundamentally differ from the latest one. Could you also modify the documentation and the sample code to use this new field, showing how it is to be used, and testing that it works properly at the same time? OK, Please wait for a while. Thanks, -- OSS Platform Development Division, NEC KaiGai Kohei <[EMAIL PROTECTED]> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] exporting capability code/name pairs (try #6)
On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: > >> If we can have a private member in kobj_attribute, we can found the > content > >> to be returned in a single step. > > > > Ok, again, just send me a patch that adds this functionality and we will > > be very glad to consider it. > > [1/2] Add a private data field within kobj_attribute structure. > > This patch add a private data field, declared as void *, within > kobj_attribute > structure. Anyone wants to use sysfs can store their private data to refer > at > _show() and _store() method. > It enables to share a single method function with several similar entries, > like ones to export the list of capabilities the running kernel supported. But your patch 2/2 doesn't use this interface, why not? > include/linux/kobject.h |1 + > include/linux/sysfs.h |7 +++ > 2 files changed, 8 insertions(+), 0 deletions(-) > > diff --git a/include/linux/kobject.h b/include/linux/kobject.h > index caa3f41..57d5bf1 100644 > --- a/include/linux/kobject.h > +++ b/include/linux/kobject.h > @@ -130,6 +130,7 @@ struct kobj_attribute { > char *buf); > ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, >const char *buf, size_t count); > + void *data; /* a private field */ Hm, can you really use this? > extern struct sysfs_ops kobj_sysfs_ops; > diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h > index 8027104..6f40ff9 100644 > --- a/include/linux/sysfs.h > +++ b/include/linux/sysfs.h > @@ -50,6 +50,13 @@ struct attribute_group { > .store = _store, \ > } > > +#define __ATTR_DATA(_name,_mode,_show,_store,_data) {\ > + .attr = {.name = __stringify(_name), .mode = _mode }, \ > + .show = _show,\ > + .store = _store, \ > + .data = (void *)(_data), \ > +} I don't see how this would be any different from the original? You are always passed a kobject, which can be embedded in anything else. Could you also modify the documentation and the sample code to use this new field, showing how it is to be used, and testing that it works properly at the same time? thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] exporting capability code/name pairs (try #6)
Greg KH wrote: On Mon, Feb 18, 2008 at 05:45:46PM +0900, Kohei KaiGai wrote: Greg KH wrote: Also, this code can be cleaned up a lot by just using the basic kobject attributes, and not rolling your own types here. I replaced my own defined capability_attribute by kobj_attribute. It made the patch cleaned up, however, it also impossible to share a single _show() method instance, because kobj_attribute does not have any private member. Is there any reason why kobj_attribute does not have "void *private;"? Because no one has asked for it? :) Or you can just do as the example in samples/kobject/ does it, no need for the void pointer as that code shows. It shows us a good example in samples/kobject. However, it is unsuitable to export the list of capabilities. The shared _show() method (b_show) calls strcmp() once with the name of kobject attribute to switch its returning string. If we have 34 of candidates to be returned, like the capability case, we have to call strcmp() 33 times in maximum. If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. In the attached patch, every attribute entry stores its capability identifier in numerical or symbolic representation within private data field of kobj_attribute structure. The rest of them are unchanged. [2/2] Exporting capability code/name pairs This patch enables to export code/name of capabilities supported on the running kernel. A newer kernel sometimes adds new capabilities, like CAP_MAC_ADMIN at 2.6.25. However, we have no interface to disclose what capabilities are supported on this kernel. Thus, we have to maintain libcap version in appropriate one synchronously. This patch enables libcap to collect the list of capabilities on run time, and provide them for users. It helps to improve portability of library. It exports these information as regular files under /sys/kernel/capability. The numeric node exports its name, the symbolic node exports its code. Please consider to put this patch on the queue of 2.6.25. Thanks, === [EMAIL PROTECTED] ~]$ ls -R /sys/kernel/capability/ /sys/kernel/capability/: codes names version /sys/kernel/capability/codes: 0 10 12 14 16 18 2 21 23 25 27 29 30 32 4 6 8 1 11 13 15 17 19 20 22 24 26 28 3 31 33 5 7 9 /sys/kernel/capability/names: cap_audit_controlcap_kill cap_net_raw cap_sys_nice cap_audit_write cap_lease cap_setfcap cap_sys_pacct cap_chowncap_linux_immutable cap_setgid cap_sys_ptrace cap_dac_override cap_mac_admin cap_setpcap cap_sys_rawio cap_dac_read_search cap_mac_override cap_setuid cap_sys_resource cap_fowner cap_mknod cap_sys_admin cap_sys_time cap_fsetid cap_net_admin cap_sys_bootcap_sys_tty_config cap_ipc_lock cap_net_bind_service cap_sys_chroot cap_ipc_ownercap_net_broadcast cap_sys_module [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/version 0x20071026 [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/codes/30 cap_audit_control [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/names/cap_sys_pacct 20 [EMAIL PROTECTED] ~]$ === Signed-off-by: KaiGai Kohei <[EMAIL PROTECTED]> -- Documentation/ABI/testing/sysfs-kernel-capability | 23 + scripts/mkcapnames.sh | 44 + security/Makefile |9 ++ security/commoncap.c | 99 + 4 files changed, 175 insertions(+), 0 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-kernel-capability b/Documentation/ABI/testing/sysfs-kernel-capability index e69de29..402ef06 100644 --- a/Documentation/ABI/testing/sysfs-kernel-capability +++ b/Documentation/ABI/testing/sysfs-kernel-capability @@ -0,0 +1,23 @@ +What: /sys/kernel/capability +Date: Feb 2008 +Contact: KaiGai Kohei <[EMAIL PROTECTED]> +Description: + The entries under /sys/kernel/capability are used to export + the list of capabilities the running kernel supported. + + - /sys/kernel/capability/version + returns the most preferable version number for the + running kernel. + e.g) $ cat /sys/kernel/capability/version + 0x20071026 + + - /sys/kernel/capability/code/ + returns its symbolic representation, on reading. + e.g) $ cat /sys/kernel/capability/codes/30 + cap_audit_control + + - /sys/kernel/capability/name/ + returns its numerical representation, on reading. + e.g) $ cat
[PATCH] exporting capability code/name pairs (try #6)
>> If we can have a private member in kobj_attribute, we can found the content >> to be returned in a single step. > > Ok, again, just send me a patch that adds this functionality and we will > be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. Signed-off-by: KaiGai Kohei <[EMAIL PROTECTED]> -- include/linux/kobject.h |1 + include/linux/sysfs.h |7 +++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index caa3f41..57d5bf1 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -130,6 +130,7 @@ struct kobj_attribute { char *buf); ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); + void *data; /* a private field */ }; extern struct sysfs_ops kobj_sysfs_ops; diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 8027104..6f40ff9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -50,6 +50,13 @@ struct attribute_group { .store = _store, \ } +#define __ATTR_DATA(_name,_mode,_show,_store,_data) { \ + .attr = {.name = __stringify(_name), .mode = _mode }, \ + .show = _show,\ + .store = _store, \ + .data = (void *)(_data), \ +} + #define __ATTR_RO(_name) { \ .attr = { .name = __stringify(_name), .mode = 0444 }, \ .show = _name##_show, \ -- OSS Platform Development Division, NEC KaiGai Kohei <[EMAIL PROTECTED]> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] exporting capability code/name pairs (try #6)
If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. Signed-off-by: KaiGai Kohei [EMAIL PROTECTED] -- include/linux/kobject.h |1 + include/linux/sysfs.h |7 +++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index caa3f41..57d5bf1 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -130,6 +130,7 @@ struct kobj_attribute { char *buf); ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); + void *data; /* a private field */ }; extern struct sysfs_ops kobj_sysfs_ops; diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 8027104..6f40ff9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -50,6 +50,13 @@ struct attribute_group { .store = _store, \ } +#define __ATTR_DATA(_name,_mode,_show,_store,_data) { \ + .attr = {.name = __stringify(_name), .mode = _mode }, \ + .show = _show,\ + .store = _store, \ + .data = (void *)(_data), \ +} + #define __ATTR_RO(_name) { \ .attr = { .name = __stringify(_name), .mode = 0444 }, \ .show = _name##_show, \ -- OSS Platform Development Division, NEC KaiGai Kohei [EMAIL PROTECTED] -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] exporting capability code/name pairs (try #6)
Greg KH wrote: On Mon, Feb 18, 2008 at 05:45:46PM +0900, Kohei KaiGai wrote: Greg KH wrote: Also, this code can be cleaned up a lot by just using the basic kobject attributes, and not rolling your own types here. I replaced my own defined capability_attribute by kobj_attribute. It made the patch cleaned up, however, it also impossible to share a single _show() method instance, because kobj_attribute does not have any private member. Is there any reason why kobj_attribute does not have void *private;? Because no one has asked for it? :) Or you can just do as the example in samples/kobject/ does it, no need for the void pointer as that code shows. It shows us a good example in samples/kobject. However, it is unsuitable to export the list of capabilities. The shared _show() method (b_show) calls strcmp() once with the name of kobject attribute to switch its returning string. If we have 34 of candidates to be returned, like the capability case, we have to call strcmp() 33 times in maximum. If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. In the attached patch, every attribute entry stores its capability identifier in numerical or symbolic representation within private data field of kobj_attribute structure. The rest of them are unchanged. [2/2] Exporting capability code/name pairs This patch enables to export code/name of capabilities supported on the running kernel. A newer kernel sometimes adds new capabilities, like CAP_MAC_ADMIN at 2.6.25. However, we have no interface to disclose what capabilities are supported on this kernel. Thus, we have to maintain libcap version in appropriate one synchronously. This patch enables libcap to collect the list of capabilities on run time, and provide them for users. It helps to improve portability of library. It exports these information as regular files under /sys/kernel/capability. The numeric node exports its name, the symbolic node exports its code. Please consider to put this patch on the queue of 2.6.25. Thanks, === [EMAIL PROTECTED] ~]$ ls -R /sys/kernel/capability/ /sys/kernel/capability/: codes names version /sys/kernel/capability/codes: 0 10 12 14 16 18 2 21 23 25 27 29 30 32 4 6 8 1 11 13 15 17 19 20 22 24 26 28 3 31 33 5 7 9 /sys/kernel/capability/names: cap_audit_controlcap_kill cap_net_raw cap_sys_nice cap_audit_write cap_lease cap_setfcap cap_sys_pacct cap_chowncap_linux_immutable cap_setgid cap_sys_ptrace cap_dac_override cap_mac_admin cap_setpcap cap_sys_rawio cap_dac_read_search cap_mac_override cap_setuid cap_sys_resource cap_fowner cap_mknod cap_sys_admin cap_sys_time cap_fsetid cap_net_admin cap_sys_bootcap_sys_tty_config cap_ipc_lock cap_net_bind_service cap_sys_chroot cap_ipc_ownercap_net_broadcast cap_sys_module [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/version 0x20071026 [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/codes/30 cap_audit_control [EMAIL PROTECTED] ~]$ cat /sys/kernel/capability/names/cap_sys_pacct 20 [EMAIL PROTECTED] ~]$ === Signed-off-by: KaiGai Kohei [EMAIL PROTECTED] -- Documentation/ABI/testing/sysfs-kernel-capability | 23 + scripts/mkcapnames.sh | 44 + security/Makefile |9 ++ security/commoncap.c | 99 + 4 files changed, 175 insertions(+), 0 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-kernel-capability b/Documentation/ABI/testing/sysfs-kernel-capability index e69de29..402ef06 100644 --- a/Documentation/ABI/testing/sysfs-kernel-capability +++ b/Documentation/ABI/testing/sysfs-kernel-capability @@ -0,0 +1,23 @@ +What: /sys/kernel/capability +Date: Feb 2008 +Contact: KaiGai Kohei [EMAIL PROTECTED] +Description: + The entries under /sys/kernel/capability are used to export + the list of capabilities the running kernel supported. + + - /sys/kernel/capability/version + returns the most preferable version number for the + running kernel. + e.g) $ cat /sys/kernel/capability/version + 0x20071026 + + - /sys/kernel/capability/code/numerical representation + returns its symbolic representation, on reading. + e.g) $ cat /sys/kernel/capability/codes/30 + cap_audit_control + + - /sys/kernel/capability/name/symbolic representation + returns its numerical representation, on reading. +
Re: [PATCH] exporting capability code/name pairs (try #6)
On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. But your patch 2/2 doesn't use this interface, why not? include/linux/kobject.h |1 + include/linux/sysfs.h |7 +++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index caa3f41..57d5bf1 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -130,6 +130,7 @@ struct kobj_attribute { char *buf); ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); + void *data; /* a private field */ Hm, can you really use this? extern struct sysfs_ops kobj_sysfs_ops; diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 8027104..6f40ff9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -50,6 +50,13 @@ struct attribute_group { .store = _store, \ } +#define __ATTR_DATA(_name,_mode,_show,_store,_data) {\ + .attr = {.name = __stringify(_name), .mode = _mode }, \ + .show = _show,\ + .store = _store, \ + .data = (void *)(_data), \ +} I don't see how this would be any different from the original? You are always passed a kobject, which can be embedded in anything else. Could you also modify the documentation and the sample code to use this new field, showing how it is to be used, and testing that it works properly at the same time? thanks, greg k-h -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] exporting capability code/name pairs (try #6)
Greg KH wrote: On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. But your patch 2/2 doesn't use this interface, why not? Really? The following two _show() methods shared by every capabilities refer the private member of kobj_attribute. | +static ssize_t capability_name_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns numerical representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, %d\n, (int) attr-data); | +} | + | +static ssize_t capability_code_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns symbolic representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, %s\n, (char *) attr-data); | +} include/linux/kobject.h |1 + include/linux/sysfs.h |7 +++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index caa3f41..57d5bf1 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -130,6 +130,7 @@ struct kobj_attribute { char *buf); ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); + void *data; /* a private field */ Hm, can you really use this? Yes, extern struct sysfs_ops kobj_sysfs_ops; diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 8027104..6f40ff9 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -50,6 +50,13 @@ struct attribute_group { .store = _store, \ } +#define __ATTR_DATA(_name,_mode,_show,_store,_data) { \ + .attr = {.name = __stringify(_name), .mode = _mode }, \ + .show = _show,\ + .store = _store, \ + .data = (void *)(_data), \ +} I don't see how this would be any different from the original? You are always passed a kobject, which can be embedded in anything else. The intension of the latest patch is same as the version which uses capability_attribute structure. It enables to store the content to be returned in the expanded field. Applying kobj_attribute killed needs to declare my own structure. However, every entries had its own _show() method, generated by macros automatically, in the previous version. It fundamentally differ from the latest one. Could you also modify the documentation and the sample code to use this new field, showing how it is to be used, and testing that it works properly at the same time? OK, Please wait for a while. Thanks, -- OSS Platform Development Division, NEC KaiGai Kohei [EMAIL PROTECTED] -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] exporting capability code/name pairs (try #6)
On Wed, Feb 20, 2008 at 02:38:16PM +0900, Kohei KaiGai wrote: Greg KH wrote: On Wed, Feb 20, 2008 at 01:38:59PM +0900, Kohei KaiGai wrote: If we can have a private member in kobj_attribute, we can found the content to be returned in a single step. Ok, again, just send me a patch that adds this functionality and we will be very glad to consider it. [1/2] Add a private data field within kobj_attribute structure. This patch add a private data field, declared as void *, within kobj_attribute structure. Anyone wants to use sysfs can store their private data to refer at _show() and _store() method. It enables to share a single method function with several similar entries, like ones to export the list of capabilities the running kernel supported. But your patch 2/2 doesn't use this interface, why not? Really? The following two _show() methods shared by every capabilities refer the private member of kobj_attribute. | +static ssize_t capability_name_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns numerical representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, %d\n, (int) attr-data); | +} | + | +static ssize_t capability_code_show(struct kobject *kobj, | +struct kobj_attribute *attr, | +char *buffer) | +{ | +/* It returns symbolic representation of capability. */ | +return scnprintf(buffer, PAGE_SIZE, %s\n, (char *) attr-data); | +} Ah, sorry, missed that. I also missed where this was set up as well :( thanks, greg k-h -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/