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>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200224145643.998293311@linutronix.de
 
                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))\
                }                                       \
 _out:                                                  \
                rcu_read_unlock();                      \
-               preempt_enable();                       \
+               migrate_enable();                       \
                _ret;                                   \
         })
 
                u32 ret;                                \
                u32 _ret = 1;                           \
                u32 _cn = 0;                            \
-               preempt_disable();                      \
+               migrate_disable();                      \
                rcu_read_lock();                        \
                _array = rcu_dereference(array);        \
                _item = &_array->items[0];              \
                        _item++;                        \
                }                                       \
                rcu_read_unlock();                      \
-               preempt_enable();                       \
+               migrate_enable();                       \
                if (_ret)                               \
                        _ret = (_cn ? NET_XMIT_CN : NET_XMIT_SUCCESS);  \
                else                                    \
 
        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)
 {
 {
        u32 res;
 
-       preempt_disable();
+       migrate_disable();
        res = __bpf_prog_run_save_cb(prog, skb);
-       preempt_enable();
+       migrate_enable();
        return res;
 }