Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 615112 Details for
Bug 859223
grub2 must support IBM client architecture (CAS) reboot
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
IBM CAS reboot implementation patch using pjones's guideline
ibm_cas_reboot_support.patch (text/plain), 5.98 KB, created by
IBM Bug Proxy
on 2012-09-20 20:21:55 UTC
(
hide
)
Description:
IBM CAS reboot implementation patch using pjones's guideline
Filename:
MIME Type:
Creator:
IBM Bug Proxy
Created:
2012-09-20 20:21:55 UTC
Size:
5.98 KB
patch
obsolete
>From be9ee2df83a927d49184026154dd8d5039a8b664 Mon Sep 17 00:00:00 2001 >From: Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com> >Date: Thu, 20 Sep 2012 18:07:39 -0300 >Subject: [PATCH] IBM client architecture (CAS) reboot support > >This is an implementation of IBM client architecture (CAS) reboot for GRUB. > >There are cases where the POWER firmware must reboot in order to support >specific features requested by a kernel. The kernel calls >ibm,client-architecture-support and it may either return or reboot with the new >feature set. eg: > >Calling ibm,client-architecture-support.../ >Elapsed time since release of system processors: 70959 mins 50 secs >Welcome to GRUB! > >Instead of return to the GRUB menu, it will check if the flag for CAS reboot is >set. If so, grub will automatically boot the last booted kernel using the same >parameters >--- > grub-core/kern/ieee1275/openfw.c | 63 ++++++++++++++++++++++++++++++++++++++ > grub-core/normal/main.c | 19 ++++++++++++ > grub-core/script/execute.c | 7 +++++ > include/grub/ieee1275/ieee1275.h | 2 ++ > 4 files changed, 91 insertions(+) > >diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c >index 40abaa3..c2b1bdf 100644 >--- a/grub-core/kern/ieee1275/openfw.c >+++ b/grub-core/kern/ieee1275/openfw.c >@@ -523,3 +523,66 @@ grub_ieee1275_canonicalise_devname (const char *path) > return NULL; > } > >+/* Check if it's a CAS reboot. If so, set the script to be executed. */ >+int >+grub_ieee1275_cas_reboot (char *script) >+{ >+ grub_uint32_t ibm_ca_support_reboot; >+ grub_uint32_t ibm_fw_nbr_reboots; >+ char property_value[10]; >+ grub_ssize_t actual; >+ grub_ieee1275_ihandle_t options; >+ >+ if (grub_ieee1275_finddevice ("/options", &options) < 0) >+ return -1; >+ >+ /* Check two properties, one is enough to get cas reboot value */ >+ ibm_ca_support_reboot = 0; >+ if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, >+ "ibm,client-architecture-support-reboot", >+ &ibm_ca_support_reboot, >+ sizeof (ibm_ca_support_reboot), >+ &actual) >= 0) >+ grub_dprintf("ieee1275", "ibm,client-architecture-support-reboot: %u\n", >+ ibm_ca_support_reboot); >+ >+ ibm_fw_nbr_reboots = 0; >+ if (grub_ieee1275_get_property (options, "ibm,fw-nbr-reboots", >+ property_value, sizeof (property_value), >+ &actual) >= 0) >+ { >+ property_value[sizeof (property_value) - 1] = 0; >+ ibm_fw_nbr_reboots = (grub_uint8_t) grub_strtoul (property_value, 0, 10); >+ grub_dprintf("ieee1275", "ibm,fw-nbr-reboots: %u\n", ibm_fw_nbr_reboots); >+ } >+ >+ if (ibm_ca_support_reboot || ibm_fw_nbr_reboots) >+ { >+ if (! grub_ieee1275_get_property_length (options, "boot-last-label", &actual)) >+ { >+ if (actual > 1024) >+ script = grub_realloc (script, actual + 1); >+ grub_ieee1275_get_property (options, "boot-last-label", script, actual, >+ &actual); >+ return 0; >+ } >+ } >+ >+ grub_ieee1275_set_boot_last_label (""); >+ >+ return -1; >+} >+ >+int grub_ieee1275_set_boot_last_label (const char *text) >+{ >+ grub_ieee1275_ihandle_t options; >+ grub_ssize_t actual; >+ >+ grub_dprintf("ieee1275", "set boot_last_label (size: %u)\n", grub_strlen(text)); >+ if (! grub_ieee1275_finddevice ("/options", &options) && >+ options != (grub_ieee1275_ihandle_t) -1) >+ grub_ieee1275_set_property (options, "boot-last-label", text, >+ grub_strlen (text), &actual); >+ return 0; >+} >+ >diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c >index 39bb734..aa0b3e5 100644 >--- a/grub-core/normal/main.c >+++ b/grub-core/normal/main.c >@@ -32,6 +32,9 @@ > #include <grub/i18n.h> > #include <grub/charset.h> > #include <grub/script_sh.h> >+#ifdef GRUB_MACHINE_IEEE1275 >+#include <grub/ieee1275/ieee1275.h> >+#endif > > GRUB_MOD_LICENSE ("GPLv3+"); > >@@ -296,6 +299,22 @@ grub_normal_execute (const char *config, int nested, int batch) > { > menu = read_config_file (config); > >+#ifdef GRUB_MACHINE_IEEE1275 >+ int boot; >+ boot = 0; >+ char *script; >+ script = grub_malloc (1024); >+ if (! grub_ieee1275_cas_reboot (script)) >+ { >+ char *dummy[1] = { NULL }; >+ if (! grub_script_execute_sourcecode (script, 0, dummy)) >+ boot = 1; >+ } >+ grub_free (script); >+ if (boot) >+ grub_command_execute ("boot", 0, 0); >+#endif >+ > /* Ignore any error. */ > grub_errno = GRUB_ERR_NONE; > } >diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c >index b5e6eb0..4397540 100644 >--- a/grub-core/script/execute.c >+++ b/grub-core/script/execute.c >@@ -27,6 +27,9 @@ > #include <grub/normal.h> > #include <grub/extcmd.h> > #include <grub/i18n.h> >+#ifdef GRUB_MACHINE_IEEE1275 >+#include <grub/ieee1275/ieee1275.h> >+#endif > > /* Max digits for a char is 3 (0xFF is 255), similarly for an int it > is sizeof (int) * 3, and one extra for a possible -ve sign. */ >@@ -820,6 +823,10 @@ grub_script_execute_sourcecode (const char *source, int argc, char **args) > old_scope = scope; > scope = &new_scope; > >+#ifdef GRUB_MACHINE_IEEE1275 >+ grub_ieee1275_set_boot_last_label (source); >+#endif >+ > while (source) > { > char *line; >diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h >index 38a75fd..416a544 100644 >--- a/include/grub/ieee1275/ieee1275.h >+++ b/include/grub/ieee1275/ieee1275.h >@@ -208,5 +208,7 @@ int EXPORT_FUNC(grub_ieee1275_devices_iterate) (int (*hook) > char *EXPORT_FUNC(grub_ieee1275_get_aliasdevname) (const char *path); > char *EXPORT_FUNC(grub_ieee1275_canonicalise_devname) (const char *path); > char *EXPORT_FUNC(grub_ieee1275_get_device_type) (const char *path); >+int EXPORT_FUNC(grub_ieee1275_cas_reboot) (char *script); >+int EXPORT_FUNC(grub_ieee1275_set_boot_last_label) (const char *text); > > #endif /* ! GRUB_IEEE1275_HEADER */ >-- >1.7.10.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 859223
: 615112