• Tyrel Datwyler's avatar
    powerpc/pseries: Fix of_read_drc_info_cell() to point at next record · c5e76fa0
    Tyrel Datwyler authored
    The expectation is that when calling of_read_drc_info_cell()
    repeatedly to parse multiple drc-info records that the in/out curval
    parameter points at the start of the next record on return. However,
    the current behavior has curval still pointing at the final value of
    the record just parsed. The result of which is that if the
    ibm,drc-info property contains multiple properties the parsed value
    of the drc_type for any record after the first has the power_domain
    value of the previous record appended to the type string.
    
    eg: observed the following 0xffffffff prepended to PHB
    
      drc-info: type: \xff\xff\xff\xffPHB, prefix: PHB , index_start: 0x20000001
      drc-info: suffix_start: 1, sequential_elems: 3072, sequential_inc: 1
      drc-info: power-domain: 0xffffffff, last_index: 0x20000c00
    
    In practice PHBs are the only type of connector in the ibm,drc-info
    property that has multiple records. So, it breaks PHB hotplug, but by
    chance not PCI, CPU, slot, or memory because they happen to only ever
    be a single record.
    
    Fix by incrementing curval past the power_domain value to point at
    drc_type string of next record.
    
    Fixes: e83636ac ("pseries/drc-info: Search DRC properties for CPU indexes")
    Signed-off-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
    Acked-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200307024547.5748-1-tyreld@linux.ibm.com
    c5e76fa0
of_helpers.c 2.38 KB