lkml.org 
[lkml]   [2020]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch V3 15/22] bpf: Use migrate_disable/enable in array macros and cgroup/lirc code.
    From: David Miller <davem@davemloft.net>

    Replace the preemption disable/enable with migrate_disable/enable() to
    reflect the actual requirement and to allow PREEMPT_RT to substitute it
    with an actual migration disable mechanism which does not disable
    preemption.

    Including the code paths that go via __bpf_prog_run_save_cb().

    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

    ---
    include/linux/bpf.h | 8 ++++----
    include/linux/filter.h | 5 +++--
    2 files changed, 7 insertions(+), 6 deletions(-)

    --- a/include/linux/bpf.h
    +++ b/include/linux/bpf.h
    @@ -885,7 +885,7 @@ int bpf_prog_array_copy(struct bpf_prog_
    struct bpf_prog *_prog; \
    struct bpf_prog_array *_array; \
    u32 _ret = 1; \
    - preempt_disable(); \
    + migrate_disable(); \
    rcu_read_lock(); \
    _array = rcu_dereference(array); \
    if (unlikely(check_non_null && !_array))\
    @@ -898,7 +898,7 @@ int bpf_prog_array_copy(struct bpf_prog_
    } \
    _out: \
    rcu_read_unlock(); \
    - preempt_enable(); \
    + migrate_enable(); \
    _ret; \
    })

    @@ -932,7 +932,7 @@ int bpf_prog_array_copy(struct bpf_prog_
    u32 ret; \
    u32 _ret = 1; \
    u32 _cn = 0; \
    - preempt_disable(); \
    + migrate_disable(); \
    rcu_read_lock(); \
    _array = rcu_dereference(array); \
    _item = &_array->items[0]; \
    @@ -944,7 +944,7 @@ int bpf_prog_array_copy(struct bpf_prog_
    _item++; \
    } \
    rcu_read_unlock(); \
    - preempt_enable(); \
    + migrate_enable(); \
    if (_ret) \
    _ret = (_cn ? NET_XMIT_CN : NET_XMIT_SUCCESS); \
    else \
    --- a/include/linux/filter.h
    +++ b/include/linux/filter.h
    @@ -677,6 +677,7 @@ static inline u8 *bpf_skb_cb(struct sk_b
    return qdisc_skb_cb(skb)->data;
    }

    +/* Must be invoked with migration disabled */
    static inline u32 __bpf_prog_run_save_cb(const struct bpf_prog *prog,
    struct sk_buff *skb)
    {
    @@ -702,9 +703,9 @@ static inline u32 bpf_prog_run_save_cb(c
    {
    u32 res;

    - preempt_disable();
    + migrate_disable();
    res = __bpf_prog_run_save_cb(prog, skb);
    - preempt_enable();
    + migrate_enable();
    return res;
    }

    \
     
     \ /
      Last update: 2020-02-24 16:05    [W:4.242 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site