From: Greg KH <gregkh@linuxfoundation.org>
To: dyoung@redhat.com
Cc: mjg59@srcf.ucam.org, linux-efi@vger.kernel.org,
toshi.kani@hp.com, matt@console-pimps.org, x86@kernel.org,
kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
James.Bottomley@HansenPartnership.com, horms@verge.net.au,
bp@alien8.de, ebiederm@xmission.com, hpa@zytor.com,
vgoyal@redhat.com
Subject: Re: [patch 5/9 v3] efi: export more efi table variable to sysfs
Date: Thu, 21 Nov 2013 08:42:24 -0800 [thread overview]
Message-ID: <20131121164224.GA15083@kroah.com> (raw)
In-Reply-To: <20131121061754.887381332@dhcp-16-126.nay.redhat.com>
On Thu, Nov 21, 2013 at 02:17:09PM +0800, dyoung@redhat.com wrote:
> Export fw_vendor, runtime and config tables physical
> addresses to /sys/firmware/efi/systab becaue kexec
> kernel will need them.
>
> >From EFI spec these 3 variables will be updated to
> virtual address after entering virtual mode. But
> kernel startup code will need the physical address.
>
> changelog:
> Greg: add standalone sysfs files instead of add lines to systab
> Document them as testing ABI
>
> Signed-off-by: Dave Young <dyoung@redhat.com>
> ---
> Documentation/ABI/testing/sysfs-firmware-efi | 26 +++++++++
> arch/x86/platform/efi/efi.c | 4 +
> drivers/firmware/efi/efi.c | 71 +++++++++++++++++++++++++--
> include/linux/efi.h | 3 +
> 4 files changed, 101 insertions(+), 3 deletions(-)
>
> --- efi.orig/drivers/firmware/efi/efi.c
> +++ efi/drivers/firmware/efi/efi.c
> @@ -32,6 +32,9 @@ struct efi __read_mostly efi = {
> .hcdp = EFI_INVALID_TABLE_ADDR,
> .uga = EFI_INVALID_TABLE_ADDR,
> .uv_systab = EFI_INVALID_TABLE_ADDR,
> + .fw_vendor = EFI_INVALID_TABLE_ADDR,
> + .runtime = EFI_INVALID_TABLE_ADDR,
> + .config_table = EFI_INVALID_TABLE_ADDR,
> };
> EXPORT_SYMBOL(efi);
>
> @@ -71,6 +74,31 @@ static ssize_t systab_show(struct kobjec
> static struct kobj_attribute efi_attr_systab =
> __ATTR(systab, 0400, systab_show, NULL);
>
> +static ssize_t fw_vendor_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.fw_vendor);
> +}
> +
> +static ssize_t runtime_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.runtime);
> +}
> +
> +static ssize_t config_table_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.config_table);
> +}
> +
> +static struct kobj_attribute efi_attr_fw_vendor =
> + __ATTR(fw_vendor, 0400, fw_vendor_show, NULL);
> +static struct kobj_attribute efi_attr_runtime =
> + __ATTR(runtime, 0400, runtime_show, NULL);
> +static struct kobj_attribute efi_attr_config_table =
> + __ATTR(config_table, 0400, config_table_show, NULL);
> +
> static struct attribute *efi_subsys_attrs[] = {
> &efi_attr_systab.attr,
> NULL, /* maybe more in the future? */
> @@ -123,21 +151,58 @@ static int __init efisubsys_init(void)
>
> error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
> if (error) {
> - pr_err("efi: Sysfs attribute export failed with error %d.\n",
> - error);
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_systab.attr.name, error);
> goto err_unregister;
> }
>
> + if (efi.fw_vendor != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_fw_vendor.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_fw_vendor.attr.name, error);
> + goto err_remove_group;
> + }
> + }
> +
> + if (efi.runtime != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_runtime.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_runtime.attr.name, error);
> + goto err_remove_fw_vendor;
> + }
> + }
> +
> + if (efi.config_table != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj,
> + &efi_attr_config_table.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_config_table.attr.name, error);
> + goto err_remove_runtime;
> + }
> + }
You don't need to do this "if SOMETHING then create the file", just use
the "is_visible" attribute in the group to do this as a callback to
determine this when the group is registered.
That should clean up this logic a bunch.
thanks,
greg k-h
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>
To: dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
mjg59-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org,
hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org,
horms-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org,
matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org,
toshi.kani-VXdhtT5mjnY@public.gmane.org
Subject: Re: [patch 5/9 v3] efi: export more efi table variable to sysfs
Date: Thu, 21 Nov 2013 08:42:24 -0800 [thread overview]
Message-ID: <20131121164224.GA15083@kroah.com> (raw)
In-Reply-To: <20131121061754.887381332-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
On Thu, Nov 21, 2013 at 02:17:09PM +0800, dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org wrote:
> Export fw_vendor, runtime and config tables physical
> addresses to /sys/firmware/efi/systab becaue kexec
> kernel will need them.
>
> >From EFI spec these 3 variables will be updated to
> virtual address after entering virtual mode. But
> kernel startup code will need the physical address.
>
> changelog:
> Greg: add standalone sysfs files instead of add lines to systab
> Document them as testing ABI
>
> Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> Documentation/ABI/testing/sysfs-firmware-efi | 26 +++++++++
> arch/x86/platform/efi/efi.c | 4 +
> drivers/firmware/efi/efi.c | 71 +++++++++++++++++++++++++--
> include/linux/efi.h | 3 +
> 4 files changed, 101 insertions(+), 3 deletions(-)
>
> --- efi.orig/drivers/firmware/efi/efi.c
> +++ efi/drivers/firmware/efi/efi.c
> @@ -32,6 +32,9 @@ struct efi __read_mostly efi = {
> .hcdp = EFI_INVALID_TABLE_ADDR,
> .uga = EFI_INVALID_TABLE_ADDR,
> .uv_systab = EFI_INVALID_TABLE_ADDR,
> + .fw_vendor = EFI_INVALID_TABLE_ADDR,
> + .runtime = EFI_INVALID_TABLE_ADDR,
> + .config_table = EFI_INVALID_TABLE_ADDR,
> };
> EXPORT_SYMBOL(efi);
>
> @@ -71,6 +74,31 @@ static ssize_t systab_show(struct kobjec
> static struct kobj_attribute efi_attr_systab =
> __ATTR(systab, 0400, systab_show, NULL);
>
> +static ssize_t fw_vendor_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.fw_vendor);
> +}
> +
> +static ssize_t runtime_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.runtime);
> +}
> +
> +static ssize_t config_table_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.config_table);
> +}
> +
> +static struct kobj_attribute efi_attr_fw_vendor =
> + __ATTR(fw_vendor, 0400, fw_vendor_show, NULL);
> +static struct kobj_attribute efi_attr_runtime =
> + __ATTR(runtime, 0400, runtime_show, NULL);
> +static struct kobj_attribute efi_attr_config_table =
> + __ATTR(config_table, 0400, config_table_show, NULL);
> +
> static struct attribute *efi_subsys_attrs[] = {
> &efi_attr_systab.attr,
> NULL, /* maybe more in the future? */
> @@ -123,21 +151,58 @@ static int __init efisubsys_init(void)
>
> error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
> if (error) {
> - pr_err("efi: Sysfs attribute export failed with error %d.\n",
> - error);
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_systab.attr.name, error);
> goto err_unregister;
> }
>
> + if (efi.fw_vendor != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_fw_vendor.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_fw_vendor.attr.name, error);
> + goto err_remove_group;
> + }
> + }
> +
> + if (efi.runtime != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_runtime.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_runtime.attr.name, error);
> + goto err_remove_fw_vendor;
> + }
> + }
> +
> + if (efi.config_table != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj,
> + &efi_attr_config_table.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_config_table.attr.name, error);
> + goto err_remove_runtime;
> + }
> + }
You don't need to do this "if SOMETHING then create the file", just use
the "is_visible" attribute in the group to do this as a callback to
determine this when the group is registered.
That should clean up this logic a bunch.
thanks,
greg k-h
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <gregkh@linuxfoundation.org>
To: dyoung@redhat.com
Cc: linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org,
x86@kernel.org, mjg59@srcf.ucam.org, hpa@zytor.com,
James.Bottomley@HansenPartnership.com, vgoyal@redhat.com,
ebiederm@xmission.com, horms@verge.net.au,
kexec@lists.infradead.org, bp@alien8.de, matt@console-pimps.org,
toshi.kani@hp.com
Subject: Re: [patch 5/9 v3] efi: export more efi table variable to sysfs
Date: Thu, 21 Nov 2013 08:42:24 -0800 [thread overview]
Message-ID: <20131121164224.GA15083@kroah.com> (raw)
In-Reply-To: <20131121061754.887381332@dhcp-16-126.nay.redhat.com>
On Thu, Nov 21, 2013 at 02:17:09PM +0800, dyoung@redhat.com wrote:
> Export fw_vendor, runtime and config tables physical
> addresses to /sys/firmware/efi/systab becaue kexec
> kernel will need them.
>
> >From EFI spec these 3 variables will be updated to
> virtual address after entering virtual mode. But
> kernel startup code will need the physical address.
>
> changelog:
> Greg: add standalone sysfs files instead of add lines to systab
> Document them as testing ABI
>
> Signed-off-by: Dave Young <dyoung@redhat.com>
> ---
> Documentation/ABI/testing/sysfs-firmware-efi | 26 +++++++++
> arch/x86/platform/efi/efi.c | 4 +
> drivers/firmware/efi/efi.c | 71 +++++++++++++++++++++++++--
> include/linux/efi.h | 3 +
> 4 files changed, 101 insertions(+), 3 deletions(-)
>
> --- efi.orig/drivers/firmware/efi/efi.c
> +++ efi/drivers/firmware/efi/efi.c
> @@ -32,6 +32,9 @@ struct efi __read_mostly efi = {
> .hcdp = EFI_INVALID_TABLE_ADDR,
> .uga = EFI_INVALID_TABLE_ADDR,
> .uv_systab = EFI_INVALID_TABLE_ADDR,
> + .fw_vendor = EFI_INVALID_TABLE_ADDR,
> + .runtime = EFI_INVALID_TABLE_ADDR,
> + .config_table = EFI_INVALID_TABLE_ADDR,
> };
> EXPORT_SYMBOL(efi);
>
> @@ -71,6 +74,31 @@ static ssize_t systab_show(struct kobjec
> static struct kobj_attribute efi_attr_systab =
> __ATTR(systab, 0400, systab_show, NULL);
>
> +static ssize_t fw_vendor_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.fw_vendor);
> +}
> +
> +static ssize_t runtime_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.runtime);
> +}
> +
> +static ssize_t config_table_show(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", efi.config_table);
> +}
> +
> +static struct kobj_attribute efi_attr_fw_vendor =
> + __ATTR(fw_vendor, 0400, fw_vendor_show, NULL);
> +static struct kobj_attribute efi_attr_runtime =
> + __ATTR(runtime, 0400, runtime_show, NULL);
> +static struct kobj_attribute efi_attr_config_table =
> + __ATTR(config_table, 0400, config_table_show, NULL);
> +
> static struct attribute *efi_subsys_attrs[] = {
> &efi_attr_systab.attr,
> NULL, /* maybe more in the future? */
> @@ -123,21 +151,58 @@ static int __init efisubsys_init(void)
>
> error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
> if (error) {
> - pr_err("efi: Sysfs attribute export failed with error %d.\n",
> - error);
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_systab.attr.name, error);
> goto err_unregister;
> }
>
> + if (efi.fw_vendor != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_fw_vendor.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_fw_vendor.attr.name, error);
> + goto err_remove_group;
> + }
> + }
> +
> + if (efi.runtime != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj, &efi_attr_runtime.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_runtime.attr.name, error);
> + goto err_remove_fw_vendor;
> + }
> + }
> +
> + if (efi.config_table != EFI_INVALID_TABLE_ADDR) {
> + error = sysfs_create_file(efi_kobj,
> + &efi_attr_config_table.attr);
> + if (error) {
> + pr_err("efi: Sysfs attribute %s export failed with error %d.\n",
> + efi_attr_config_table.attr.name, error);
> + goto err_remove_runtime;
> + }
> + }
You don't need to do this "if SOMETHING then create the file", just use
the "is_visible" attribute in the group to do this as a callback to
determine this when the group is registered.
That should clean up this logic a bunch.
thanks,
greg k-h
next prev parent reply other threads:[~2013-11-21 16:42 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-21 6:17 [patch 0/9 v3] kexec kernel efi runtime support dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 6:17 ` [patch 1/9 v3] efi: remove unused variables in __map_region dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 15:54 ` Borislav Petkov
2013-11-21 15:54 ` Borislav Petkov
2013-11-21 15:54 ` Borislav Petkov
2013-11-21 6:17 ` [patch 2/9 v3] efi: add a wrapper function efi_map_region_fixed dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 16:39 ` Borislav Petkov
2013-11-21 16:39 ` Borislav Petkov
2013-11-21 16:39 ` Borislav Petkov
2013-11-22 2:59 ` Dave Young
2013-11-22 2:59 ` Dave Young
2013-11-22 2:59 ` Dave Young
2013-11-21 6:17 ` [patch 3/9 v3] efi: reserve boot service fix dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 6:17 ` [patch 4/9 v3] efi: cleanup efi_enter_virtual_mode function dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 16:49 ` Borislav Petkov
2013-11-21 16:49 ` Borislav Petkov
2013-11-22 2:54 ` Dave Young
2013-11-22 2:54 ` Dave Young
2013-11-22 2:54 ` Dave Young
2013-11-21 6:17 ` [patch 5/9 v3] efi: export more efi table variable to sysfs dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 16:42 ` Greg KH [this message]
2013-11-21 16:42 ` Greg KH
2013-11-21 16:42 ` Greg KH
2013-11-22 2:51 ` Dave Young
2013-11-22 2:51 ` Dave Young
2013-11-22 2:51 ` Dave Young
2013-11-21 16:57 ` Borislav Petkov
2013-11-21 16:57 ` Borislav Petkov
2013-11-21 16:57 ` Borislav Petkov
2013-11-22 2:48 ` Dave Young
2013-11-22 2:48 ` Dave Young
2013-11-22 2:48 ` Dave Young
2013-11-23 13:15 ` Borislav Petkov
2013-11-23 13:15 ` Borislav Petkov
2013-11-23 13:15 ` Borislav Petkov
2013-11-25 5:28 ` Dave Young
2013-11-25 5:28 ` Dave Young
2013-11-25 5:28 ` Dave Young
2013-11-21 6:17 ` [patch 6/9 v3] efi: export efi runtime memory mapping " dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 6:17 ` [patch 7/9 v3] efi: passing kexec necessary efi data via setup_data dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 6:17 ` [patch 8/9 v3] x86: add xloadflags bit for efi runtime support on kexec dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 6:17 ` [patch 9/9 v3] x86: export x86 boot_params to sysfs dyoung
2013-11-21 6:17 ` dyoung
2013-11-21 6:17 ` dyoung-H+wXaHxf7aLQT0dZR+AlfA
2013-11-21 16:45 ` Greg KH
2013-11-21 16:45 ` Greg KH
2013-11-21 16:45 ` Greg KH
2013-11-22 2:45 ` Dave Young
2013-11-22 2:45 ` Dave Young
2013-11-22 2:45 ` Dave Young
2013-11-21 6:52 ` [patch 0/9 v3] kexec kernel efi runtime support Dave Young
2013-11-21 6:52 ` Dave Young
2013-11-21 6:52 ` Dave Young
2013-11-22 22:29 ` Toshi Kani
2013-11-22 22:29 ` Toshi Kani
2013-11-22 22:29 ` Toshi Kani
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=20131121164224.GA15083@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=bp@alien8.de \
--cc=dyoung@redhat.com \
--cc=ebiederm@xmission.com \
--cc=horms@verge.net.au \
--cc=hpa@zytor.com \
--cc=kexec@lists.infradead.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matt@console-pimps.org \
--cc=mjg59@srcf.ucam.org \
--cc=toshi.kani@hp.com \
--cc=vgoyal@redhat.com \
--cc=x86@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.