Message ID | 1537524123-9578-13-git-send-email-paulus@ozlabs.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: PPC: Book3S HV: Nested HV virtualization | expand |
On Fri, Sep 21, 2018 at 08:01:43PM +1000, Paul Mackerras wrote: > This will reduce the number of instances where we require ifdefs in > code which needs to call a hypercall on a pseries platform or do > something different on a powernv platform. > > Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Wouldn't it make more sense for these to BUG_ON() or at least WARN_ON() before returning H_FUNCTION, since calling a hypercall on a non pseries platform is definitely a kernel bug? > --- > arch/powerpc/include/asm/hvcall.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h > index a0b17f9..cc9fe87 100644 > --- a/arch/powerpc/include/asm/hvcall.h > +++ b/arch/powerpc/include/asm/hvcall.h > @@ -362,6 +362,7 @@ > #ifndef __ASSEMBLY__ > #include <linux/types.h> > > +#ifdef CONFIG_PPC_PSERIES > /** > * plpar_hcall_norets: - Make a pseries hypervisor call with no return arguments > * @opcode: The hypervisor call to make. > @@ -411,6 +412,27 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); > long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...); > long plpar_hcall9_raw(unsigned long opcode, unsigned long *retbuf, ...); > > +#else /* CONFIG_PPC_PSERIES */ > +static inline long plpar_hcall_norets(unsigned long opcode, ...) > +{ return H_FUNCTION; } > + > +#define PLPAR_HCALL_BUFSIZE 4 > +static inline long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...) > +{ return H_FUNCTION; } > + > +static inline long plpar_hcall_raw(unsigned long opcode, > + unsigned long *retbuf, ...) > +{ return H_FUNCTION; } > + > +#define PLPAR_HCALL9_BUFSIZE 9 > +static inline long plpar_hcall9(unsigned long opcode, > + unsigned long *retbuf, ...) > +{ return H_FUNCTION; } > +static inline long plpar_hcall9_raw(unsigned long opcode, > + unsigned long *retbuf, ...) > +{ return H_FUNCTION; } > +#endif /* CONFIG_PPC_PSERIES */ > + > struct hvcall_mpp_data { > unsigned long entitled_mem; > unsigned long mapped_mem;
On Wed, Sep 26, 2018 at 01:30:40PM +1000, David Gibson wrote: > On Fri, Sep 21, 2018 at 08:01:43PM +1000, Paul Mackerras wrote: > > This will reduce the number of instances where we require ifdefs in > > code which needs to call a hypercall on a pseries platform or do > > something different on a powernv platform. > > > > Signed-off-by: Paul Mackerras <paulus@ozlabs.org> > > Wouldn't it make more sense for these to BUG_ON() or at least > WARN_ON() before returning H_FUNCTION, since calling a hypercall on a > non pseries platform is definitely a kernel bug? Not BUG_ON, since at this level we have no indication that the kernel can't continue executing without whatever it was that it expected the hcall to do. I could come at a WARN_ON (or WARN_ON_ONCE) -- I'll talk to mpe and see what he thinks. Paul.
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index a0b17f9..cc9fe87 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h @@ -362,6 +362,7 @@ #ifndef __ASSEMBLY__ #include <linux/types.h> +#ifdef CONFIG_PPC_PSERIES /** * plpar_hcall_norets: - Make a pseries hypervisor call with no return arguments * @opcode: The hypervisor call to make. @@ -411,6 +412,27 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...); long plpar_hcall9_raw(unsigned long opcode, unsigned long *retbuf, ...); +#else /* CONFIG_PPC_PSERIES */ +static inline long plpar_hcall_norets(unsigned long opcode, ...) +{ return H_FUNCTION; } + +#define PLPAR_HCALL_BUFSIZE 4 +static inline long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...) +{ return H_FUNCTION; } + +static inline long plpar_hcall_raw(unsigned long opcode, + unsigned long *retbuf, ...) +{ return H_FUNCTION; } + +#define PLPAR_HCALL9_BUFSIZE 9 +static inline long plpar_hcall9(unsigned long opcode, + unsigned long *retbuf, ...) +{ return H_FUNCTION; } +static inline long plpar_hcall9_raw(unsigned long opcode, + unsigned long *retbuf, ...) +{ return H_FUNCTION; } +#endif /* CONFIG_PPC_PSERIES */ + struct hvcall_mpp_data { unsigned long entitled_mem; unsigned long mapped_mem;
This will reduce the number of instances where we require ifdefs in code which needs to call a hypercall on a pseries platform or do something different on a powernv platform. Signed-off-by: Paul Mackerras <paulus@ozlabs.org> --- arch/powerpc/include/asm/hvcall.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)