On Wed, 25 Sep 2019 11:31:30 +0530 Aravinda Prasad <aravi...@linux.vnet.ibm.com> wrote:
> > > On Wednesday 25 September 2019 07:00 AM, David Gibson wrote: > > On Wed, Sep 18, 2019 at 01:42:34PM +0530, Aravinda Prasad wrote: > >> Upon a machine check exception (MCE) in a guest address space, > >> KVM causes a guest exit to enable QEMU to build and pass the > >> error to the guest in the PAPR defined rtas error log format. > >> > >> This patch builds the rtas error log, copies it to the rtas_addr > >> and then invokes the guest registered machine check handler. The > >> handler in the guest takes suitable action(s) depending on the type > >> and criticality of the error. For example, if an error is > >> unrecoverable memory corruption in an application inside the > >> guest, then the guest kernel sends a SIGBUS to the application. > >> For recoverable errors, the guest performs recovery actions and > >> logs the error. > >> > >> Signed-off-by: Aravinda Prasad <aravi...@linux.vnet.ibm.com> [...] > >> + > >> +static void spapr_mce_dispatch_elog(PowerPCCPU *cpu, bool recovered) > >> +{ > >> + SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine()); > >> + CPUState *cs = CPU(cpu); > >> + uint64_t rtas_addr; > >> + CPUPPCState *env = &cpu->env; > >> + PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); > >> + target_ulong msr = 0; > >> + struct rtas_error_log log; > >> + struct mc_extended_log *ext_elog; > >> + uint32_t summary; > >> + > >> + /* > >> + * Properly set bits in MSR before we invoke the handler. > >> + * SRR0/1, DAR and DSISR are properly set by KVM > >> + */ > >> + if (!(*pcc->interrupts_big_endian)(cpu)) { > >> + msr |= (1ULL << MSR_LE); > >> + } > >> + > >> + if (env->msr & (1ULL << MSR_SF)) { > >> + msr |= (1ULL << MSR_SF); > >> + } > >> + > >> + msr |= (1ULL << MSR_ME); > >> + > >> + ext_elog = g_malloc0(sizeof(*ext_elog)); > > > > g_new0() is preferred for this sort of thing. > > I feel g_malloc0() is used to allocate extended logs in other places in > this file, so I think g_malloc0() should be fine. Please let me know. > CODING_STYLE indeed promotes the use of g_new0() but it accepts the g_malloc(sizeof(*foo)) syntax: Declarations like .. code-block:: c T *v = g_malloc(sizeof(*v)) are acceptable, though.