* [PATCH v4] ofdisk: add sas disks to the device list
@ 2015-11-11 13:14 Paulo Flabiano Smorigo
2015-11-11 17:28 ` Andrei Borzenkov
2015-11-11 20:01 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 2 replies; 4+ messages in thread
From: Paulo Flabiano Smorigo @ 2015-11-11 13:14 UTC (permalink / raw)
To: The development of GNU GRUB; +Cc: Paulo Flabiano Smorigo
Same patch with the fix.
---
grub-core/disk/ieee1275/ofdisk.c | 75 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
index 297f058..ef290bc 100644
--- a/grub-core/disk/ieee1275/ofdisk.c
+++ b/grub-core/disk/ieee1275/ofdisk.c
@@ -260,6 +260,81 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
grub_free (buf);
return;
}
+ else if (grub_strcmp (alias->type, "sas_ioa") == 0)
+ {
+ /* The method returns the number of disks and a table where
+ * each ID is 64-bit long. Example of sas paths:
+ * /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800
+ * /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800
+ * /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */
+
+ struct sas_children
+ {
+ struct grub_ieee1275_common_hdr common;
+ grub_ieee1275_cell_t method;
+ grub_ieee1275_cell_t ihandle;
+ grub_ieee1275_cell_t max;
+ grub_ieee1275_cell_t table;
+ grub_ieee1275_cell_t catch_result;
+ grub_ieee1275_cell_t nentries;
+ }
+ args;
+ char *buf, *bufptr, *table;
+ unsigned i;
+ grub_uint16_t table_size;
+ grub_ieee1275_ihandle_t ihandle;
+
+ buf = grub_malloc (grub_strlen (alias->path) + 32);
+ if (!buf)
+ return;
+ bufptr = grub_stpcpy (buf, alias->path);
+
+ /* Power machines documentation specify 672 as maximum SAS disks in
+ one system. Using a slightly larger value to be safe. */
+ table_size = 768;
+ table = grub_malloc (table_size * sizeof (grub_uint64_t));
+
+ if (!table)
+ {
+ grub_free (buf);
+ return;
+ }
+
+ if (grub_ieee1275_open (alias->path, &ihandle))
+ {
+ grub_free (buf);
+ grub_free (table);
+ return;
+ }
+
+ INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2);
+ args.method = (grub_ieee1275_cell_t) "get-sas-children";
+ args.ihandle = ihandle;
+ args.max = table_size;
+ args.table = (grub_ieee1275_cell_t) table;
+ args.catch_result = 0;
+ args.nentries = 0;
+
+ if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
+ {
+ grub_ieee1275_close (ihandle);
+ grub_free (table);
+ grub_free (buf);
+ return;
+ }
+
+ grub_uint64_t *ptr;
+ for (i = 0; i < args.nentries; i++)
+ {
+ ptr = (grub_uint64_t *) (table + sizeof (grub_uint64_t) * i);
+ grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, *ptr);
+ dev_iterate_real (buf, buf);
+ }
+
+ grub_ieee1275_close (ihandle);
+ grub_free (table);
+ grub_free (buf);
+ }
if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
&& grub_strcmp (alias->type, "block") == 0)
--
2.1.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v4] ofdisk: add sas disks to the device list
2015-11-11 13:14 [PATCH v4] ofdisk: add sas disks to the device list Paulo Flabiano Smorigo
@ 2015-11-11 17:28 ` Andrei Borzenkov
2015-11-11 17:34 ` Paulo Flabiano Smorigo
2015-11-11 20:01 ` Vladimir 'φ-coder/phcoder' Serbinenko
1 sibling, 1 reply; 4+ messages in thread
From: Andrei Borzenkov @ 2015-11-11 17:28 UTC (permalink / raw)
To: grub-devel
11.11.2015 16:14, Paulo Flabiano Smorigo пишет:
> Same patch with the fix.
> ---
> grub-core/disk/ieee1275/ofdisk.c | 75 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
>
> diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
> index 297f058..ef290bc 100644
> --- a/grub-core/disk/ieee1275/ofdisk.c
> +++ b/grub-core/disk/ieee1275/ofdisk.c
> @@ -260,6 +260,81 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
> grub_free (buf);
> return;
> }
> + else if (grub_strcmp (alias->type, "sas_ioa") == 0)
> + {
> + /* The method returns the number of disks and a table where
> + * each ID is 64-bit long. Example of sas paths:
> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800
> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800
> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */
> +
> + struct sas_children
> + {
> + struct grub_ieee1275_common_hdr common;
> + grub_ieee1275_cell_t method;
> + grub_ieee1275_cell_t ihandle;
> + grub_ieee1275_cell_t max;
> + grub_ieee1275_cell_t table;
> + grub_ieee1275_cell_t catch_result;
> + grub_ieee1275_cell_t nentries;
> + }
> + args;
> + char *buf, *bufptr, *table;
> + unsigned i;
> + grub_uint16_t table_size;
> + grub_ieee1275_ihandle_t ihandle;
> +
> + buf = grub_malloc (grub_strlen (alias->path) + 32);
Actually I liked previous version more :) Magic hidden constants are
always error prone.
> + if (!buf)
> + return;
> + bufptr = grub_stpcpy (buf, alias->path);
> +
> + /* Power machines documentation specify 672 as maximum SAS disks in
> + one system. Using a slightly larger value to be safe. */
> + table_size = 768;
> + table = grub_malloc (table_size * sizeof (grub_uint64_t));
> +
> + if (!table)
> + {
> + grub_free (buf);
> + return;
> + }
> +
> + if (grub_ieee1275_open (alias->path, &ihandle))
> + {
> + grub_free (buf);
> + grub_free (table);
> + return;
> + }
> +
> + INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2);
> + args.method = (grub_ieee1275_cell_t) "get-sas-children";
> + args.ihandle = ihandle;
> + args.max = table_size;
> + args.table = (grub_ieee1275_cell_t) table;
> + args.catch_result = 0;
> + args.nentries = 0;
> +
> + if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
> + {
> + grub_ieee1275_close (ihandle);
> + grub_free (table);
> + grub_free (buf);
> + return;
> + }
> +
> + grub_uint64_t *ptr;
> + for (i = 0; i < args.nentries; i++)
> + {
> + ptr = (grub_uint64_t *) (table + sizeof (grub_uint64_t) * i);
> + grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, *ptr);
What about
grub_snprintf (bufptr, sizeof ("/disk@7766554433221100"), ... )
> + dev_iterate_real (buf, buf);
> + }
> +
> + grub_ieee1275_close (ihandle);
> + grub_free (table);
> + grub_free (buf);
> + }
>
> if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
> && grub_strcmp (alias->type, "block") == 0)
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] ofdisk: add sas disks to the device list
2015-11-11 17:28 ` Andrei Borzenkov
@ 2015-11-11 17:34 ` Paulo Flabiano Smorigo
0 siblings, 0 replies; 4+ messages in thread
From: Paulo Flabiano Smorigo @ 2015-11-11 17:34 UTC (permalink / raw)
To: The development of GNU GRUB
Yes, that could be an option. phcoder, can I commit using andrei's approach?
--
P. F. Smorigo
On Wed, Nov 11, 2015 at 3:28 PM, Andrei Borzenkov <arvidjaar@gmail.com> wrote:
> 11.11.2015 16:14, Paulo Flabiano Smorigo пишет:
>
>> Same patch with the fix.
>> ---
>> grub-core/disk/ieee1275/ofdisk.c | 75
>> ++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 75 insertions(+)
>>
>> diff --git a/grub-core/disk/ieee1275/ofdisk.c
>> b/grub-core/disk/ieee1275/ofdisk.c
>> index 297f058..ef290bc 100644
>> --- a/grub-core/disk/ieee1275/ofdisk.c
>> +++ b/grub-core/disk/ieee1275/ofdisk.c
>> @@ -260,6 +260,81 @@ dev_iterate (const struct grub_ieee1275_devalias
>> *alias)
>> grub_free (buf);
>> return;
>> }
>> + else if (grub_strcmp (alias->type, "sas_ioa") == 0)
>> + {
>> + /* The method returns the number of disks and a table where
>> + * each ID is 64-bit long. Example of sas paths:
>> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800
>> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800
>> + * /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */
>> +
>> + struct sas_children
>> + {
>> + struct grub_ieee1275_common_hdr common;
>> + grub_ieee1275_cell_t method;
>> + grub_ieee1275_cell_t ihandle;
>> + grub_ieee1275_cell_t max;
>> + grub_ieee1275_cell_t table;
>> + grub_ieee1275_cell_t catch_result;
>> + grub_ieee1275_cell_t nentries;
>> + }
>> + args;
>> + char *buf, *bufptr, *table;
>> + unsigned i;
>> + grub_uint16_t table_size;
>> + grub_ieee1275_ihandle_t ihandle;
>> +
>> + buf = grub_malloc (grub_strlen (alias->path) + 32);
>
>
> Actually I liked previous version more :) Magic hidden constants are always
> error prone.
>
>
>> + if (!buf)
>> + return;
>> + bufptr = grub_stpcpy (buf, alias->path);
>> +
>> + /* Power machines documentation specify 672 as maximum SAS disks in
>> + one system. Using a slightly larger value to be safe. */
>> + table_size = 768;
>> + table = grub_malloc (table_size * sizeof (grub_uint64_t));
>> +
>> + if (!table)
>> + {
>> + grub_free (buf);
>> + return;
>> + }
>> +
>> + if (grub_ieee1275_open (alias->path, &ihandle))
>> + {
>> + grub_free (buf);
>> + grub_free (table);
>> + return;
>> + }
>> +
>> + INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2);
>> + args.method = (grub_ieee1275_cell_t) "get-sas-children";
>> + args.ihandle = ihandle;
>> + args.max = table_size;
>> + args.table = (grub_ieee1275_cell_t) table;
>> + args.catch_result = 0;
>> + args.nentries = 0;
>> +
>> + if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
>> + {
>> + grub_ieee1275_close (ihandle);
>> + grub_free (table);
>> + grub_free (buf);
>> + return;
>> + }
>> +
>> + grub_uint64_t *ptr;
>> + for (i = 0; i < args.nentries; i++)
>> + {
>> + ptr = (grub_uint64_t *) (table + sizeof (grub_uint64_t) * i);
>> + grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, *ptr);
>
>
> What about
>
> grub_snprintf (bufptr, sizeof ("/disk@7766554433221100"), ... )
>
>> + dev_iterate_real (buf, buf);
>> + }
>> +
>> + grub_ieee1275_close (ihandle);
>> + grub_free (table);
>> + grub_free (buf);
>> + }
>>
>> if (!grub_ieee1275_test_flag
>> (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
>> && grub_strcmp (alias->type, "block") == 0)
>>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] ofdisk: add sas disks to the device list
2015-11-11 13:14 [PATCH v4] ofdisk: add sas disks to the device list Paulo Flabiano Smorigo
2015-11-11 17:28 ` Andrei Borzenkov
@ 2015-11-11 20:01 ` Vladimir 'φ-coder/phcoder' Serbinenko
1 sibling, 0 replies; 4+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2015-11-11 20:01 UTC (permalink / raw)
To: The development of GNU GRUB; +Cc: Paulo Flabiano Smorigo
[-- Attachment #1: Type: text/plain, Size: 313 bytes --]
On 11.11.2015 14:14, Paulo Flabiano Smorigo wrote:
> + ptr = (grub_uint64_t *) (table + sizeof (grub_uint64_t) * i);
> + grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, *ptr);
Please declare table as being grub_uint64_t * and then just use
table[i]. This code violates cast-align
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-11-11 20:01 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-11 13:14 [PATCH v4] ofdisk: add sas disks to the device list Paulo Flabiano Smorigo
2015-11-11 17:28 ` Andrei Borzenkov
2015-11-11 17:34 ` Paulo Flabiano Smorigo
2015-11-11 20:01 ` Vladimir 'φ-coder/phcoder' Serbinenko
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.