|
@@ -2449,7 +2449,8 @@ redo:
|
|
do {
|
|
do {
|
|
tid = this_cpu_read(s->cpu_slab->tid);
|
|
tid = this_cpu_read(s->cpu_slab->tid);
|
|
c = raw_cpu_ptr(s->cpu_slab);
|
|
c = raw_cpu_ptr(s->cpu_slab);
|
|
- } while (IS_ENABLED(CONFIG_PREEMPT) && unlikely(tid != c->tid));
|
|
|
|
|
|
+ } while (IS_ENABLED(CONFIG_PREEMPT) &&
|
|
|
|
+ unlikely(tid != READ_ONCE(c->tid)));
|
|
|
|
|
|
/*
|
|
/*
|
|
* Irqless object alloc/free algorithm used here depends on sequence
|
|
* Irqless object alloc/free algorithm used here depends on sequence
|
|
@@ -2718,7 +2719,8 @@ redo:
|
|
do {
|
|
do {
|
|
tid = this_cpu_read(s->cpu_slab->tid);
|
|
tid = this_cpu_read(s->cpu_slab->tid);
|
|
c = raw_cpu_ptr(s->cpu_slab);
|
|
c = raw_cpu_ptr(s->cpu_slab);
|
|
- } while (IS_ENABLED(CONFIG_PREEMPT) && unlikely(tid != c->tid));
|
|
|
|
|
|
+ } while (IS_ENABLED(CONFIG_PREEMPT) &&
|
|
|
|
+ unlikely(tid != READ_ONCE(c->tid)));
|
|
|
|
|
|
/* Same with comment on barrier() in slab_alloc_node() */
|
|
/* Same with comment on barrier() in slab_alloc_node() */
|
|
barrier();
|
|
barrier();
|