On Mon, Dec 04, 2017 at 10:03:19AM +0000, Ard Biesheuvel wrote: > On 4 December 2017 at 09:59, Greg Kroah-Hartman > <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > On Mon, Dec 04, 2017 at 09:48:37AM +0000, Ard Biesheuvel wrote: > >> On 4 December 2017 at 09:34, Greg Kroah-Hartman > >> <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > >> > On Mon, Dec 04, 2017 at 05:29:28PM +0800, Dave Young wrote: > >> >> On 12/04/17 at 08:36am, Greg Kroah-Hartman wrote: > >> >> > On Mon, Dec 04, 2017 at 10:02:16AM +0800, Dave Young wrote: > >> >> > > +#define __ATTR_IRUSR(_name) { \ > >> >> > > + .attr = { .name = __stringify(_name), .mode = S_IRUSR }, \ > >> >> > > + .show = _name##_show, \ > >> >> > > +} > >> >> > > >> >> > Ick, no, as others, including Linus, have said, using IRUSER is a pain > >> >> > in the ass to try to look up and remember what it is... > >> >> > > >> >> > Just use __ATTR() please, it should be fine for what you need to do, > >> >> > which is special-case a sysfs attribute. > >> >> > >> >> Hmm, I was hesitating to do that because it needs either long code > >> >> (over 80 chars) or some driver internal macros. > >> >> > >> >> There is already same issue in dmi-sysfs.c, it uses an internal macro > >> >> DMI_SYSFS_ATTR for 0400 attr. I did not search all the kernel code, > >> >> there might be more for such special cases. Maybe we can add some > >> >> comment in sysfs.h to mention this is for some special case? > >> >> > >> >> I can do something similar as dmi sysfs code though. > >> > > >> > Hm, let me look at this this afternoon when I get through some stable > >> > patches, it shouldn't be that complex to need a whole new macro... > >> > > >> > >> But wasn't that the whole point? That there is a macro that does what > >> you don't want (__ATTR_RO) and none that does what you do want? > > > > my point is that __ATTR() should work for you as-is... > > Well, not entirely. > > Not sure if the runtime-map code is doing anything wrong here, but it defines > > struct map_attribute { > struct attribute attr; > ssize_t (*show)(struct efi_runtime_map_entry *entry, char *buf); > }; > > and uses __ATTR_RO() to emit initializers for it. __ATTR() initializes > the .store member as well, which does not exists, and so it cannot be > used directly. > > So we should either add a .store member that is always NULL, or we > should add our own You should add a .store member that is always null, as you are getting away with a nice hack by relying on that not being present :) > #define __ATTR_0400(_name) { \ > .attr = { .name = __stringify(_name), .mode = 0400 }, \ > .show = _name##_show, \ > } > > that does not set .store at all. Creating a new macro for every different mode value you are wanting to use seems a bit overkill, just use __ATTR() as is please. You are already using it in other efi files today: drivers/firmware/efi/efi.c drivers/firmware/efi/esrt.c thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html