Mahesh Jagannath Salgaonkar <mah...@linux.ibm.com> writes: > On 12/8/20 4:16 PM, Ganesh wrote: >> >> On 12/8/20 4:01 PM, Michael Ellerman wrote: >>> Ganesh Goudar <ganes...@linux.ibm.com> writes: >>>> diff --git a/arch/powerpc/include/asm/paca.h >>>> b/arch/powerpc/include/asm/paca.h >>>> index 9454d29ff4b4..4769954efa7d 100644 >>>> --- a/arch/powerpc/include/asm/paca.h >>>> +++ b/arch/powerpc/include/asm/paca.h >>>> @@ -273,6 +274,17 @@ struct paca_struct { >>>> #ifdef CONFIG_MMIOWB >>>> struct mmiowb_state mmiowb_state; >>>> #endif >>>> +#ifdef CONFIG_PPC_BOOK3S_64 >>>> + int mce_nest_count; >>>> + struct machine_check_event mce_event[MAX_MC_EVT]; >>>> + /* Queue for delayed MCE events. */ >>>> + int mce_queue_count; >>>> + struct machine_check_event mce_event_queue[MAX_MC_EVT]; >>>> + >>>> + /* Queue for delayed MCE UE events. */ >>>> + int mce_ue_count; >>>> + struct machine_check_event mce_ue_event_queue[MAX_MC_EVT]; >>>> +#endif /* CONFIG_PPC_BOOK3S_64 */ >>>> } ____cacheline_aligned; >>> How much does this expand the paca by? >> >> Size of paca is 4480 bytes, these add up another 2160 bytes, so expands >> it by 48%. > > Should we dynamically allocate the array sizes early as similar to that > of paca->mce_faulty_slbs so that we don't bump up paca size ?
Yeah I think that would be preferable. That way those allocations can be normal node-local allocations on bare metal, or when using radix. (Or even on KVM). In fact what we probably want is a separate struct for all the MCE related data, eg something like: struct mce_stuff { int nest_count; /* Queue for delayed MCE events. */ int queue_count; /* Queue for delayed MCE UE events. */ int mce_ue_count; struct machine_check_event events[MAX_MC_EVT]; struct machine_check_event event_queue[MAX_MC_EVT]; struct machine_check_event ue_event_queue[MAX_MC_EVT]; }; And then you allocate one of those per CPU, inside the RMO for pseries with hash, and node-local otherwise. cheers