On 02/21/2018 04:36 AM, Bharata B Rao wrote:
> Memory addtion and removal by count and indexed-count methods
> temporarily mark the LMBs that are being added/removed by a special
> flag value DRMEM_LMB_RESERVED. Accessing flags value directly at
> a few places without proper accessor method is causing two unexpected
> side-effects:
> 
> - DRMEM_LMB_RESERVED bit is becoming part of the flags word of
>   drconf_cell_v2 entries in ibm,dynamic-memory-v2 DT property.
> - This results in extra drconf_cell entries in ibm,dynamic-memory-v2.
>   For example if 1G memory is added, it leads to one entry for 3 LMBs
>   and 1 separate entry for the last LMB. All the 4 LMBs should be
>   defined by one entry here.
> 
> Fix this by always accessing the flags by its accessor method
> drmem_lmb_flags().
> 
> Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com>

Reviewed-by: Nathan Fontenot <nf...@linux.vnet.ibm.com>

> ---
>  arch/powerpc/mm/drmem.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/powerpc/mm/drmem.c b/arch/powerpc/mm/drmem.c
> index 916844f..3f18036 100644
> --- a/arch/powerpc/mm/drmem.c
> +++ b/arch/powerpc/mm/drmem.c
> @@ -98,7 +98,7 @@ static void init_drconf_v2_cell(struct of_drconf_cell_v2 
> *dr_cell,
>       dr_cell->base_addr = cpu_to_be64(lmb->base_addr);
>       dr_cell->drc_index = cpu_to_be32(lmb->drc_index);
>       dr_cell->aa_index = cpu_to_be32(lmb->aa_index);
> -     dr_cell->flags = cpu_to_be32(lmb->flags);
> +     dr_cell->flags = cpu_to_be32(drmem_lmb_flags(lmb));
>  }
> 
>  static int drmem_update_dt_v2(struct device_node *memory,
> @@ -121,7 +121,7 @@ static int drmem_update_dt_v2(struct device_node *memory,
>               }
> 
>               if (prev_lmb->aa_index != lmb->aa_index ||
> -                 prev_lmb->flags != lmb->flags)
> +                 drmem_lmb_flags(prev_lmb) != drmem_lmb_flags(lmb))
>                       lmb_sets++;
> 
>               prev_lmb = lmb;
> @@ -150,7 +150,7 @@ static int drmem_update_dt_v2(struct device_node *memory,
>               }
> 
>               if (prev_lmb->aa_index != lmb->aa_index ||
> -                 prev_lmb->flags != lmb->flags) {
> +                 drmem_lmb_flags(prev_lmb) != drmem_lmb_flags(lmb)) {
>                       /* end of one set, start of another */
>                       dr_cell->seq_lmbs = cpu_to_be32(seq_lmbs);
>                       dr_cell++;
> 

Reply via email to