Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1175053 > unrolled thread

Re: [PATCH] sched: fix BUG in preempt_notifier

Started byWanpeng Li <wanpeng.li@hotmail.com>
First post2015-07-01 09:50 +0200
Last post2015-07-02 03:00 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH] sched: fix BUG in preempt_notifier Wanpeng Li <wanpeng.li@hotmail.com> - 2015-07-01 09:50 +0200
    Re:Re: [PATCH] sched: fix BUG in preempt_notifier cfme_admin <cfme_admin@163.com> - 2015-07-02 03:00 +0200

#1175053 — Re: [PATCH] sched: fix BUG in preempt_notifier

FromWanpeng Li <wanpeng.li@hotmail.com>
Date2015-07-01 09:50 +0200
SubjectRe: [PATCH] sched: fix BUG in preempt_notifier
Message-ID<pHkWo-2ey-43@gated-at.bofh.it>

On 7/1/15 2:33 PM, Lidong Chen wrote:
> Signed-off-by: Lidong Chen <cfme_admin@163.com>

Subject: sched,kvm: Fix KVM preempt_notifier usage

The preempt-notifier API needs to sleep with the addition of the
static_key, we do however need to hold off preemption while modifying
the preempt notifier list, otherwise a preemption could observe an
inconsistent list state.

There is no reason to have preemption disabled in the caller,
registering a preempt notifier is a purely task local affair.

Therefore move the preempt_disable into the functions and change the
callers to a preemptible context.

Cc: Gleb Natapov<gleb@kernel.org>
Fixes: 1cde2930e154 ("sched/preempt: Add static_key() to preempt_notifiers")
Reported-and-Tested-by: Pontus Fuchs<pontus.fuchs@gmail.com>
Signed-off-by: Peter Zijlstra (Intel)<peterz@infradead.org>


If this commit in tip tree fix your bug?

Regards,
Wanpeng Li

> ---
>   kernel/sched/core.c | 25 ++++---------------------
>   1 file changed, 4 insertions(+), 21 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index b803e1b..4a5a964 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -2318,15 +2318,12 @@ void wake_up_new_task(struct task_struct *p)
>   
>   #ifdef CONFIG_PREEMPT_NOTIFIERS
>   
> -static struct static_key preempt_notifier_key = STATIC_KEY_INIT_FALSE;
> -
>   /**
>    * preempt_notifier_register - tell me when current is being preempted & rescheduled
>    * @notifier: notifier struct to register
>    */
>   void preempt_notifier_register(struct preempt_notifier *notifier)
>   {
> -	static_key_slow_inc(&preempt_notifier_key);
>   	hlist_add_head(&notifier->link, &current->preempt_notifiers);
>   }
>   EXPORT_SYMBOL_GPL(preempt_notifier_register);
> @@ -2340,11 +2337,10 @@ EXPORT_SYMBOL_GPL(preempt_notifier_register);
>   void preempt_notifier_unregister(struct preempt_notifier *notifier)
>   {
>   	hlist_del(&notifier->link);
> -	static_key_slow_dec(&preempt_notifier_key);
>   }
>   EXPORT_SYMBOL_GPL(preempt_notifier_unregister);
>   
> -static void __fire_sched_in_preempt_notifiers(struct task_struct *curr)
> +static void fire_sched_in_preempt_notifiers(struct task_struct *curr)
>   {
>   	struct preempt_notifier *notifier;
>   
> @@ -2352,14 +2348,9 @@ static void __fire_sched_in_preempt_notifiers(struct task_struct *curr)
>   		notifier->ops->sched_in(notifier, raw_smp_processor_id());
>   }
>   
> -static __always_inline void fire_sched_in_preempt_notifiers(struct task_struct *curr)
> -{
> -	if (static_key_false(&preempt_notifier_key))
> -		__fire_sched_in_preempt_notifiers(curr);
> -}
>   
>   static void
> -__fire_sched_out_preempt_notifiers(struct task_struct *curr,
> +fire_sched_out_preempt_notifiers(struct task_struct *curr,
>   				   struct task_struct *next)
>   {
>   	struct preempt_notifier *notifier;
> @@ -2368,21 +2359,13 @@ __fire_sched_out_preempt_notifiers(struct task_struct *curr,
>   		notifier->ops->sched_out(notifier, next);
>   }
>   
> -static __always_inline void
> -fire_sched_out_preempt_notifiers(struct task_struct *curr,
> -				 struct task_struct *next)
> -{
> -	if (static_key_false(&preempt_notifier_key))
> -		__fire_sched_out_preempt_notifiers(curr, next);
> -}
> -
>   #else /* !CONFIG_PREEMPT_NOTIFIERS */
>   
> -static inline void fire_sched_in_preempt_notifiers(struct task_struct *curr)
> +static void fire_sched_in_preempt_notifiers(struct task_struct *curr)
>   {
>   }
>   
> -static inline void
> +static void
>   fire_sched_out_preempt_notifiers(struct task_struct *curr,
>   				 struct task_struct *next)
>   {

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1175639

Fromcfme_admin <cfme_admin@163.com>
Date2015-07-02 03:00 +0200
Message-ID<pHB18-41K-5@gated-at.bofh.it>
In reply to#1175053
VGhpcyBpcyBhIGJldHRlciB3YXkgdG8gc29sdmUgdGhpcyBidWcuClRoYW5rcy4gCgpBdCAyMDE1
LTA3LTAxIDE1OjQxOjI4LCAiV2FucGVuZyBMaSIgPHdhbnBlbmcubGlAaG90bWFpbC5jb20+IHdy
b3RlOgo+Cj4KPk9uIDcvMS8xNSAyOjMzIFBNLCBMaWRvbmcgQ2hlbiB3cm90ZToKPj4gU2lnbmVk
LW9mZi1ieTogTGlkb25nIENoZW4gPGNmbWVfYWRtaW5AMTYzLmNvbT4KPgo+U3ViamVjdDogc2No
ZWQsa3ZtOiBGaXggS1ZNIHByZWVtcHRfbm90aWZpZXIgdXNhZ2UKPgo+VGhlIHByZWVtcHQtbm90
aWZpZXIgQVBJIG5lZWRzIHRvIHNsZWVwIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZQo+c3RhdGlj
X2tleSwgd2UgZG8gaG93ZXZlciBuZWVkIHRvIGhvbGQgb2ZmIHByZWVtcHRpb24gd2hpbGUgbW9k
aWZ5aW5nCj50aGUgcHJlZW1wdCBub3RpZmllciBsaXN0LCBvdGhlcndpc2UgYSBwcmVlbXB0aW9u
IGNvdWxkIG9ic2VydmUgYW4KPmluY29uc2lzdGVudCBsaXN0IHN0YXRlLgo+Cj5UaGVyZSBpcyBu
byByZWFzb24gdG8gaGF2ZSBwcmVlbXB0aW9uIGRpc2FibGVkIGluIHRoZSBjYWxsZXIsCj5yZWdp
c3RlcmluZyBhIHByZWVtcHQgbm90aWZpZXIgaXMgYSBwdXJlbHkgdGFzayBsb2NhbCBhZmZhaXIu
Cj4KPlRoZXJlZm9yZSBtb3ZlIHRoZSBwcmVlbXB0X2Rpc2FibGUgaW50byB0aGUgZnVuY3Rpb25z
IGFuZCBjaGFuZ2UgdGhlCj5jYWxsZXJzIHRvIGEgcHJlZW1wdGlibGUgY29udGV4dC4KPgo+Q2M6
IEdsZWIgTmF0YXBvdjxnbGViQGtlcm5lbC5vcmc+Cj5GaXhlczogMWNkZTI5MzBlMTU0ICgic2No
ZWQvcHJlZW1wdDogQWRkIHN0YXRpY19rZXkoKSB0byBwcmVlbXB0X25vdGlmaWVycyIpCj5SZXBv
cnRlZC1hbmQtVGVzdGVkLWJ5OiBQb250dXMgRnVjaHM8cG9udHVzLmZ1Y2hzQGdtYWlsLmNvbT4K
PlNpZ25lZC1vZmYtYnk6IFBldGVyIFppamxzdHJhIChJbnRlbCk8cGV0ZXJ6QGluZnJhZGVhZC5v
cmc+Cj4KPgo+SWYgdGhpcyBjb21taXQgaW4gdGlwIHRyZWUgZml4IHlvdXIgYnVnPwo+Cj5SZWdh
cmRzLAo+V2FucGVuZyBMaQo+Cj4+IC0tLQo+PiAgIGtlcm5lbC9zY2hlZC9jb3JlLmMgfCAyNSAr
KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+ICAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9u
cygrKSwgMjEgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29y
ZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwo+PiBpbmRleCBiODAzZTFiLi40YTVhOTY0IDEwMDY0
NAo+PiAtLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCj4+ICsrKyBiL2tlcm5lbC9zY2hlZC9jb3Jl
LmMKPj4gQEAgLTIzMTgsMTUgKzIzMTgsMTIgQEAgdm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVj
dCB0YXNrX3N0cnVjdCAqcCkKPj4gICAKPj4gICAjaWZkZWYgQ09ORklHX1BSRUVNUFRfTk9USUZJ
RVJTCj4+ICAgCj4+IC1zdGF0aWMgc3RydWN0IHN0YXRpY19rZXkgcHJlZW1wdF9ub3RpZmllcl9r
ZXkgPSBTVEFUSUNfS0VZX0lOSVRfRkFMU0U7Cj4+IC0KPj4gICAvKioKPj4gICAgKiBwcmVlbXB0
X25vdGlmaWVyX3JlZ2lzdGVyIC0gdGVsbCBtZSB3aGVuIGN1cnJlbnQgaXMgYmVpbmcgcHJlZW1w
dGVkICYgcmVzY2hlZHVsZWQKPj4gICAgKiBAbm90aWZpZXI6IG5vdGlmaWVyIHN0cnVjdCB0byBy
ZWdpc3Rlcgo+PiAgICAqLwo+PiAgIHZvaWQgcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlcihzdHJ1
Y3QgcHJlZW1wdF9ub3RpZmllciAqbm90aWZpZXIpCj4+ICAgewo+PiAtCXN0YXRpY19rZXlfc2xv
d19pbmMoJnByZWVtcHRfbm90aWZpZXJfa2V5KTsKPj4gICAJaGxpc3RfYWRkX2hlYWQoJm5vdGlm
aWVyLT5saW5rLCAmY3VycmVudC0+cHJlZW1wdF9ub3RpZmllcnMpOwo+PiAgIH0KPj4gICBFWFBP
UlRfU1lNQk9MX0dQTChwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyKTsKPj4gQEAgLTIzNDAsMTEg
KzIzMzcsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHJlZW1wdF9ub3RpZmllcl9yZWdpc3Rlcik7
Cj4+ICAgdm9pZCBwcmVlbXB0X25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IHByZWVtcHRfbm90
aWZpZXIgKm5vdGlmaWVyKQo+PiAgIHsKPj4gICAJaGxpc3RfZGVsKCZub3RpZmllci0+bGluayk7
Cj4+IC0Jc3RhdGljX2tleV9zbG93X2RlYygmcHJlZW1wdF9ub3RpZmllcl9rZXkpOwo+PiAgIH0K
Pj4gICBFWFBPUlRfU1lNQk9MX0dQTChwcmVlbXB0X25vdGlmaWVyX3VucmVnaXN0ZXIpOwo+PiAg
IAo+PiAtc3RhdGljIHZvaWQgX19maXJlX3NjaGVkX2luX3ByZWVtcHRfbm90aWZpZXJzKHN0cnVj
dCB0YXNrX3N0cnVjdCAqY3VycikKPj4gK3N0YXRpYyB2b2lkIGZpcmVfc2NoZWRfaW5fcHJlZW1w
dF9ub3RpZmllcnMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQo+PiAgIHsKPj4gICAJc3RydWN0
IHByZWVtcHRfbm90aWZpZXIgKm5vdGlmaWVyOwo+PiAgIAo+PiBAQCAtMjM1MiwxNCArMjM0OCw5
IEBAIHN0YXRpYyB2b2lkIF9fZmlyZV9zY2hlZF9pbl9wcmVlbXB0X25vdGlmaWVycyhzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKmN1cnIpCj4+ICAgCQlub3RpZmllci0+b3BzLT5zY2hlZF9pbihub3RpZmll
ciwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Cj4+ICAgfQo+PiAgIAo+PiAtc3RhdGljIF9fYWx3
YXlzX2lubGluZSB2b2lkIGZpcmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoc3RydWN0IHRh
c2tfc3RydWN0ICpjdXJyKQo+PiAtewo+PiAtCWlmIChzdGF0aWNfa2V5X2ZhbHNlKCZwcmVlbXB0
X25vdGlmaWVyX2tleSkpCj4+IC0JCV9fZmlyZV9zY2hlZF9pbl9wcmVlbXB0X25vdGlmaWVycyhj
dXJyKTsKPj4gLX0KPj4gICAKPj4gICBzdGF0aWMgdm9pZAo+PiAtX19maXJlX3NjaGVkX291dF9w
cmVlbXB0X25vdGlmaWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCj4+ICtmaXJlX3NjaGVk
X291dF9wcmVlbXB0X25vdGlmaWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCj4+ICAgCQkJ
CSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKPj4gICB7Cj4+ICAgCXN0cnVjdCBwcmVlbXB0
X25vdGlmaWVyICpub3RpZmllcjsKPj4gQEAgLTIzNjgsMjEgKzIzNTksMTMgQEAgX19maXJlX3Nj
aGVkX291dF9wcmVlbXB0X25vdGlmaWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCj4+ICAg
CQlub3RpZmllci0+b3BzLT5zY2hlZF9vdXQobm90aWZpZXIsIG5leHQpOwo+PiAgIH0KPj4gICAK
Pj4gLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAo+PiAtZmlyZV9zY2hlZF9vdXRfcHJlZW1w
dF9ub3RpZmllcnMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAo+PiAtCQkJCSBzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKm5leHQpCj4+IC17Cj4+IC0JaWYgKHN0YXRpY19rZXlfZmFsc2UoJnByZWVtcHRf
bm90aWZpZXJfa2V5KSkKPj4gLQkJX19maXJlX3NjaGVkX291dF9wcmVlbXB0X25vdGlmaWVycyhj
dXJyLCBuZXh0KTsKPj4gLX0KPj4gLQo+PiAgICNlbHNlIC8qICFDT05GSUdfUFJFRU1QVF9OT1RJ
RklFUlMgKi8KPj4gICAKPj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBmaXJlX3NjaGVkX2luX3ByZWVt
cHRfbm90aWZpZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKPj4gK3N0YXRpYyB2b2lkIGZp
cmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQo+
PiAgIHsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgaW5saW5lIHZvaWQKPj4gK3N0YXRpYyB2b2lk
Cj4+ICAgZmlyZV9zY2hlZF9vdXRfcHJlZW1wdF9ub3RpZmllcnMoc3RydWN0IHRhc2tfc3RydWN0
ICpjdXJyLAo+PiAgIAkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQo+PiAgIHsKPgo=
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web