[Skiboot] [PATCH] hdata: Make sure reserved node name starts with "ibm, "
Vasant Hegde
hegdevasant at linux.vnet.ibm.com
Tue Jun 26 21:56:24 AEST 2018
On 06/25/2018 08:03 AM, Oliver wrote:
> On Sat, Jun 23, 2018 at 4:23 PM, Vasant Hegde
> <hegdevasant at linux.vnet.ibm.com> wrote:
>> HDAT does not use consistent label format for reserved memory label.
>> Few starts with "ibm," while few other starts with component name.
>>
>> Lets make sure all the reserved node name starts with "ibm,".
>>
>> Reported-by: Pridhiviraj Paidipeddi <ppaidipe at linux.vnet.ibm.com>
>> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
>> ---
>> @Stewart,
>> This fixes https://github.com/open-power/boston-openpower/issues/675
>>
>> -Vasant
>>
>> hdata/memory.c | 18 ++++++++++++++----
>> 1 file changed, 14 insertions(+), 4 deletions(-)
>>
>> diff --git a/hdata/memory.c b/hdata/memory.c
>> index ecce881d1..c0c30066e 100644
>> --- a/hdata/memory.c
>> +++ b/hdata/memory.c
>> @@ -27,6 +27,8 @@
>> #include "spira.h"
>> #include "hdata.h"
>
>> +#define FW_RESERVE_NODE_PREFIX "ibm,"
>> +
>
> Is this really better than just using the string literal?
Yeah. I can make it string literal.
>
>> struct HDIF_ram_area_id {
>> __be16 id;
>> #define RAM_AREA_INSTALLED 0x8000
>> @@ -595,7 +597,7 @@ static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)
>> const struct msvpd_hb_reserved_mem *hb_resv_mem;
>> u64 start_addr, end_addr, label_size;
>> struct dt_node *node;
>> - int count, i;
>> + int count, i, label_offset;
>> char *label;
>>
>> /*
>> @@ -643,11 +645,19 @@ static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)
>> if (label_size > 64)
>> label_size = 64;
>>
>> - label = malloc(label_size+1);
>> + /* Accommodate "ibm," */
>> + label_offset = 0;
>> + label = malloc(label_size + strlen(FW_RESERVE_NODE_PREFIX) + 1);
>
> Come to think of it we could probably eliminate the malloc()ed label
> in favour of a stack allocated array. The HDAT labels are only 64
> bytes and that's not much more than a bare stack frame.
Yeah. We can avoid malloc here. will fix it in v2.
>
>> assert(label);
>>
>> - memcpy(label, hb_resv_mem->label, label_size);
>> - label[label_size] = '\0';
>> + /* Add "ibm," to reserved node name */
>> + if (strncasecmp(hb_resv_mem->label, "ibm", 3)) {
>> + memcpy(label, FW_RESERVE_NODE_PREFIX,
>> + strlen(FW_RESERVE_NODE_PREFIX));
>> + label_offset = strlen(FW_RESERVE_NODE_PREFIX);
>
> Using strncat() or even snprintf() would probably be clearer
Ok.
>
>> + }
>> + memcpy(label + label_offset, hb_resv_mem->label, label_size);
>> + label[label_size + label_offset] = '\0';
>
> I'd put the name canonicalization into add_hb_reserve_node() rather
> than here. Opal-prd uses the ibm,prd-label property to find reserved
> regions that are exported by hostboot so the label needs to be left
> unchanged here.
Oh yeah. I missed prd-label issue. I do not wanted to change `trace-area` stuff.
Hence I fixed it here.
Are we fine with converting "trace-area" label to "ibm,trace-area" ? if so I can
move this
fix to add_hb_reserve_node().
-Vasant
More information about the Skiboot
mailing list