lkml.org 
[lkml]   [2019]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/22] x86/fpu: Make __raw_xsave_addr() use feature number instead of mask
    Date
    Most users of __raw_xsave_addr() use a feature number, shift it to a
    mask and then __raw_xsave_addr() shifts it back to the feature number.

    Make __raw_xsave_addr() use the feature number as an argument.

    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    ---
    arch/x86/kernel/fpu/xstate.c | 22 +++++++++++-----------
    1 file changed, 11 insertions(+), 11 deletions(-)

    diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
    index 914d9886c6ee8..0e759a032c1c7 100644
    --- a/arch/x86/kernel/fpu/xstate.c
    +++ b/arch/x86/kernel/fpu/xstate.c
    @@ -805,20 +805,18 @@ void fpu__resume_cpu(void)
    }

    /*
    - * Given an xstate feature mask, calculate where in the xsave
    + * Given an xstate feature nr, calculate where in the xsave
    * buffer the state is. Callers should ensure that the buffer
    * is valid.
    */
    -static void *__raw_xsave_addr(struct xregs_state *xsave, int xstate_feature_mask)
    +static void *__raw_xsave_addr(struct xregs_state *xsave, int xfeature_nr)
    {
    - int feature_nr = fls64(xstate_feature_mask) - 1;
    -
    - if (!xfeature_enabled(feature_nr)) {
    + if (!xfeature_enabled(xfeature_nr)) {
    WARN_ON_FPU(1);
    return NULL;
    }

    - return (void *)xsave + xstate_comp_offsets[feature_nr];
    + return (void *)xsave + xstate_comp_offsets[xfeature_nr];
    }
    /*
    * Given the xsave area and a state inside, this function returns the
    @@ -840,6 +838,7 @@ static void *__raw_xsave_addr(struct xregs_state *xsave, int xstate_feature_mask
    */
    void *get_xsave_addr(struct xregs_state *xsave, int xstate_feature)
    {
    + int xfeature_nr;
    /*
    * Do we even *have* xsave state?
    */
    @@ -867,7 +866,8 @@ void *get_xsave_addr(struct xregs_state *xsave, int xstate_feature)
    if (!(xsave->header.xfeatures & xstate_feature))
    return NULL;

    - return __raw_xsave_addr(xsave, xstate_feature);
    + xfeature_nr = fls64(xstate_feature) - 1;
    + return __raw_xsave_addr(xsave, xfeature_nr);
    }
    EXPORT_SYMBOL_GPL(get_xsave_addr);

    @@ -1014,7 +1014,7 @@ int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int of
    * Copy only in-use xstates:
    */
    if ((header.xfeatures >> i) & 1) {
    - void *src = __raw_xsave_addr(xsave, 1 << i);
    + void *src = __raw_xsave_addr(xsave, i);

    offset = xstate_offsets[i];
    size = xstate_sizes[i];
    @@ -1100,7 +1100,7 @@ int copy_xstate_to_user(void __user *ubuf, struct xregs_state *xsave, unsigned i
    * Copy only in-use xstates:
    */
    if ((header.xfeatures >> i) & 1) {
    - void *src = __raw_xsave_addr(xsave, 1 << i);
    + void *src = __raw_xsave_addr(xsave, i);

    offset = xstate_offsets[i];
    size = xstate_sizes[i];
    @@ -1157,7 +1157,7 @@ int copy_kernel_to_xstate(struct xregs_state *xsave, const void *kbuf)
    u64 mask = ((u64)1 << i);

    if (hdr.xfeatures & mask) {
    - void *dst = __raw_xsave_addr(xsave, 1 << i);
    + void *dst = __raw_xsave_addr(xsave, i);

    offset = xstate_offsets[i];
    size = xstate_sizes[i];
    @@ -1211,7 +1211,7 @@ int copy_user_to_xstate(struct xregs_state *xsave, const void __user *ubuf)
    u64 mask = ((u64)1 << i);

    if (hdr.xfeatures & mask) {
    - void *dst = __raw_xsave_addr(xsave, 1 << i);
    + void *dst = __raw_xsave_addr(xsave, i);

    offset = xstate_offsets[i];
    size = xstate_sizes[i];
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-01-09 12:51    [W:4.196 / U:0.532 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site