lkml.org 
[lkml]   [2016]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 5/9] x86/paravirt: Add _safe to the read_msr and write_msr PV hooks
    Date
    These hooks match the _safe variants, so name them accordingly.
    This will make room for unsafe PV hooks.

    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    ---
    arch/x86/include/asm/paravirt.h | 33 +++++++++++++++++----------------
    arch/x86/include/asm/paravirt_types.h | 8 ++++----
    arch/x86/kernel/paravirt.c | 4 ++--
    arch/x86/xen/enlighten.c | 4 ++--
    4 files changed, 25 insertions(+), 24 deletions(-)

    diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
    index f6192502149e..2e49228ed9a3 100644
    --- a/arch/x86/include/asm/paravirt.h
    +++ b/arch/x86/include/asm/paravirt.h
    @@ -129,34 +129,35 @@ static inline void wbinvd(void)

    #define get_kernel_rpl() (pv_info.kernel_rpl)

    -static inline u64 paravirt_read_msr(unsigned msr, int *err)
    +static inline u64 paravirt_read_msr_safe(unsigned msr, int *err)
    {
    - return PVOP_CALL2(u64, pv_cpu_ops.read_msr, msr, err);
    + return PVOP_CALL2(u64, pv_cpu_ops.read_msr_safe, msr, err);
    }

    -static inline int paravirt_write_msr(unsigned msr, unsigned low, unsigned high)
    +static inline int paravirt_write_msr_safe(unsigned msr,
    + unsigned low, unsigned high)
    {
    - return PVOP_CALL3(int, pv_cpu_ops.write_msr, msr, low, high);
    + return PVOP_CALL3(int, pv_cpu_ops.write_msr_safe, msr, low, high);
    }

    /* These should all do BUG_ON(_err), but our headers are too tangled. */
    #define rdmsr(msr, val1, val2) \
    do { \
    int _err; \
    - u64 _l = paravirt_read_msr(msr, &_err); \
    + u64 _l = paravirt_read_msr_safe(msr, &_err); \
    val1 = (u32)_l; \
    val2 = _l >> 32; \
    } while (0)

    #define wrmsr(msr, val1, val2) \
    do { \
    - paravirt_write_msr(msr, val1, val2); \
    + paravirt_write_msr_safe(msr, val1, val2); \
    } while (0)

    #define rdmsrl(msr, val) \
    do { \
    int _err; \
    - val = paravirt_read_msr(msr, &_err); \
    + val = paravirt_read_msr_safe(msr, &_err); \
    } while (0)

    static inline void wrmsrl(unsigned msr, u64 val)
    @@ -164,23 +165,23 @@ static inline void wrmsrl(unsigned msr, u64 val)
    wrmsr(msr, (u32)val, (u32)(val>>32));
    }

    -#define wrmsr_safe(msr, a, b) paravirt_write_msr(msr, a, b)
    +#define wrmsr_safe(msr, a, b) paravirt_write_msr_safe(msr, a, b)

    /* rdmsr with exception handling */
    -#define rdmsr_safe(msr, a, b) \
    -({ \
    - int _err; \
    - u64 _l = paravirt_read_msr(msr, &_err); \
    - (*a) = (u32)_l; \
    - (*b) = _l >> 32; \
    - _err; \
    +#define rdmsr_safe(msr, a, b) \
    +({ \
    + int _err; \
    + u64 _l = paravirt_read_msr_safe(msr, &_err); \
    + (*a) = (u32)_l; \
    + (*b) = _l >> 32; \
    + _err; \
    })

    static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
    {
    int err;

    - *p = paravirt_read_msr(msr, &err);
    + *p = paravirt_read_msr_safe(msr, &err);
    return err;
    }

    diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
    index 77db5616a473..5a06cccd36f0 100644
    --- a/arch/x86/include/asm/paravirt_types.h
    +++ b/arch/x86/include/asm/paravirt_types.h
    @@ -155,10 +155,10 @@ struct pv_cpu_ops {
    void (*cpuid)(unsigned int *eax, unsigned int *ebx,
    unsigned int *ecx, unsigned int *edx);

    - /* MSR, PMC and TSR operations.
    - err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */
    - u64 (*read_msr)(unsigned int msr, int *err);
    - int (*write_msr)(unsigned int msr, unsigned low, unsigned high);
    + /* MSR operations.
    + err = 0/-EIO. wrmsr returns 0/-EIO. */
    + u64 (*read_msr_safe)(unsigned int msr, int *err);
    + int (*write_msr_safe)(unsigned int msr, unsigned low, unsigned high);

    u64 (*read_pmc)(int counter);

    diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
    index f08ac28b8136..8aad95478ae5 100644
    --- a/arch/x86/kernel/paravirt.c
    +++ b/arch/x86/kernel/paravirt.c
    @@ -339,8 +339,8 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
    .write_cr8 = native_write_cr8,
    #endif
    .wbinvd = native_wbinvd,
    - .read_msr = native_read_msr_safe,
    - .write_msr = native_write_msr_safe,
    + .read_msr_safe = native_read_msr_safe,
    + .write_msr_safe = native_write_msr_safe,
    .read_pmc = native_read_pmc,
    .load_tr_desc = native_load_tr_desc,
    .set_ldt = native_set_ldt,
    diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
    index d09e4c9d7cc5..ff2df20d0067 100644
    --- a/arch/x86/xen/enlighten.c
    +++ b/arch/x86/xen/enlighten.c
    @@ -1222,8 +1222,8 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {

    .wbinvd = native_wbinvd,

    - .read_msr = xen_read_msr_safe,
    - .write_msr = xen_write_msr_safe,
    + .read_msr_safe = xen_read_msr_safe,
    + .write_msr_safe = xen_write_msr_safe,

    .read_pmc = xen_read_pmc,

    --
    2.5.5
    \
     
     \ /
      Last update: 2016-04-02 16:41    [W:5.442 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site