qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [Qemu-devel] [PATCH v4 09/17] spapr_events: event-scan RT


From: David Gibson
Subject: Re: [Qemu-ppc] [Qemu-devel] [PATCH v4 09/17] spapr_events: event-scan RTAS interface
Date: Mon, 19 Jan 2015 15:34:30 +1100
User-agent: Mutt/1.5.23 (2014-03-12)

On Tue, Dec 23, 2014 at 06:30:23AM -0600, Michael Roth wrote:
> From: Tyrel Datwyler <address@hidden>
> 
> We don't actually rely on this interface to surface hotplug events, and
> instead rely on the similar-but-interrupt-driven check-exception RTAS
> interface used for EPOW events. However, the existence of this interface
> is needed to ensure guest kernels initialize the event-reporting
> interfaces which will in turn be used by userspace tools to handle these
> events, so we implement this interface as a stub.

I dislike the idea of implementing a stub only, since if we do fully
implement it someday, the guest won't have an easy way of determining
if it has a real implementation or the stub.

> Signed-off-by: Tyrel Datwyler <address@hidden>
> Signed-off-by: Michael Roth <address@hidden>
> ---
>  hw/ppc/spapr.c         | 1 +
>  hw/ppc/spapr_events.c  | 9 +++++++++
>  include/hw/ppc/spapr.h | 2 ++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 1bc5773..a611616 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -541,6 +541,7 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
>          refpoints, sizeof(refpoints))));
>  
>      _FDT((fdt_property_cell(fdt, "rtas-error-log-max", RTAS_ERROR_LOG_MAX)));
> +    _FDT((fdt_property_cell(fdt, "rtas-event-scan-rate", 
> RTAS_EVENT_SCAN_RATE)));

It'd be nice if a comment or the commit message described the units of
this property.

>      /*
>       * According to PAPR, rtas ibm,os-term does not guarantee a return
> diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
> index ebbf3a4..434a75d 100644
> --- a/hw/ppc/spapr_events.c
> +++ b/hw/ppc/spapr_events.c
> @@ -445,6 +445,14 @@ static void check_exception(PowerPCCPU *cpu, 
> sPAPREnvironment *spapr,
>      }
>  }
>  
> +static void event_scan(PowerPCCPU *cpu, sPAPREnvironment *spapr,
> +                            uint32_t token, uint32_t nargs,
> +                            target_ulong args,
> +                            uint32_t nret, target_ulong rets)
> +{

You should at least validate nargs and nret.

> +    rtas_st(rets, 0, 1); /* no error events found */
> +}
> +
>  void spapr_events_init(sPAPREnvironment *spapr)
>  {
>      spapr->check_exception_irq = xics_alloc(spapr->icp, 0, 0, false);
> @@ -452,4 +460,5 @@ void spapr_events_init(sPAPREnvironment *spapr)
>      qemu_register_powerdown_notifier(&spapr->epow_notifier);
>      spapr_rtas_register(RTAS_CHECK_EXCEPTION, "check-exception",
>                          check_exception);
> +    spapr_rtas_register(RTAS_EVENT_SCAN, "event-scan", event_scan);
>  }
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 4d50e74..973193d 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -453,6 +453,8 @@ int spapr_rtas_device_tree_setup(void *fdt, hwaddr 
> rtas_addr,
>  
>  #define RTAS_ERROR_LOG_MAX      2048
>  
> +#define RTAS_EVENT_SCAN_RATE    1
> +
>  typedef struct sPAPRTCETable sPAPRTCETable;
>  
>  #define TYPE_SPAPR_TCE_TABLE "spapr-tce-table"

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: pgpZKoQfdG4NR.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]