Message ID | 5177FF10.4000508@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
Hi Nathan, On Wed, 24 Apr 2013 10:49:36 -0500 Nathan Fontenot <nfont@linux.vnet.ibm.com> wrote: > > @@ -134,6 +134,7 @@ > char *prop_data; > char *rtas_buf; > int update_properties_token; > + u32 vd; > > update_properties_token = rtas_token("ibm,update-properties"); > if (update_properties_token == RTAS_UNKNOWN_SERVICE) > @@ -160,13 +161,24 @@ > > prop_data = rtas_buf + sizeof(*upwa); > > - for (i = 0; i < upwa->nprops; i++) { > + /* The first element of the buffer is the path of the node > + * being updated in the form of a 8 byte string length ^^^^ "bit" ? > + * followed by the string. Skip past this to get to the > + * properties being updated. > + */ > + vd = *prop_data++; > + prop_data += vd;
Index: powerpc/arch/powerpc/platforms/pseries/mobility.c =================================================================== --- powerpc.orig/arch/powerpc/platforms/pseries/mobility.c 2013-04-23 13:22:05.000000000 -0500 +++ powerpc/arch/powerpc/platforms/pseries/mobility.c 2013-04-23 13:39:36.000000000 -0500 @@ -134,6 +134,7 @@ char *prop_data; char *rtas_buf; int update_properties_token; + u32 vd; update_properties_token = rtas_token("ibm,update-properties"); if (update_properties_token == RTAS_UNKNOWN_SERVICE) @@ -160,13 +161,24 @@ prop_data = rtas_buf + sizeof(*upwa); - for (i = 0; i < upwa->nprops; i++) { + /* The first element of the buffer is the path of the node + * being updated in the form of a 8 byte string length + * followed by the string. Skip past this to get to the + * properties being updated. + */ + vd = *prop_data++; + prop_data += vd; + + /* The path we skipped over is counted as one of the elements + * returned so start counting at one. + */ + for (i = 1; i < upwa->nprops; i++) { char *prop_name; - u32 vd; - prop_name = prop_data + 1; + prop_name = prop_data; prop_data += strlen(prop_name) + 1; - vd = *prop_data++; + vd = *(u32 *)prop_data; + prop_data += sizeof(vd); switch (vd) { case 0x00000000:
Correct parsing of the buffer returned from ibm,update-properties. The first element is a length and the path to the property which is slightly different from the list of properties in the buffer so we need to specifically handle this. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> --- arch/powerpc/platforms/pseries/mobility.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)