diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-06-10 16:27:46 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-06-10 16:27:46 -0400 |
| commit | 50e6f8511a6b6a61611dae36794b5400cdc80ea1 (patch) | |
| tree | 07a73ce25a630f4a749215d0068612e0425e09e3 | |
| parent | 30f5f739266dc83c5512c0b496a1e93651668baa (diff) | |
| parent | b2c75c446ae72387916e2caf6e6dca815b6e5e6e (diff) | |
Merge tag 'stable/for-linus-3.10-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
Pull xen fixes from Konrad Rzeszutek Wilk:
"Two bug-fixes for regressions:
- xen/tmem stopped working after a certain combination of
modprobe/swapon was used
- cpu online/offlining would trigger WARN_ON."
* tag 'stable/for-linus-3.10-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
xen/tmem: Don't over-write tmem_frontswap_poolid after tmem_frontswap_init set it.
xen/smp: Fixup NOHZ per cpu data when onlining an offline CPU.
| -rw-r--r-- | arch/x86/xen/smp.c | 8 | ||||
| -rw-r--r-- | drivers/xen/tmem.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index fb44426fe931..d99cae8147d1 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/irq_work.h> | 19 | #include <linux/irq_work.h> |
| 20 | #include <linux/tick.h> | ||
| 20 | 21 | ||
| 21 | #include <asm/paravirt.h> | 22 | #include <asm/paravirt.h> |
| 22 | #include <asm/desc.h> | 23 | #include <asm/desc.h> |
| @@ -447,6 +448,13 @@ static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */ | |||
| 447 | play_dead_common(); | 448 | play_dead_common(); |
| 448 | HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); | 449 | HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); |
| 449 | cpu_bringup(); | 450 | cpu_bringup(); |
| 451 | /* | ||
| 452 | * commit 4b0c0f294 (tick: Cleanup NOHZ per cpu data on cpu down) | ||
| 453 | * clears certain data that the cpu_idle loop (which called us | ||
| 454 | * and that we return from) expects. The only way to get that | ||
| 455 | * data back is to call: | ||
| 456 | */ | ||
| 457 | tick_nohz_idle_enter(); | ||
| 450 | } | 458 | } |
| 451 | 459 | ||
| 452 | #else /* !CONFIG_HOTPLUG_CPU */ | 460 | #else /* !CONFIG_HOTPLUG_CPU */ |
diff --git a/drivers/xen/tmem.c b/drivers/xen/tmem.c index cc072c66c766..0f0493c63371 100644 --- a/drivers/xen/tmem.c +++ b/drivers/xen/tmem.c | |||
| @@ -379,10 +379,10 @@ static int xen_tmem_init(void) | |||
| 379 | #ifdef CONFIG_FRONTSWAP | 379 | #ifdef CONFIG_FRONTSWAP |
| 380 | if (tmem_enabled && frontswap) { | 380 | if (tmem_enabled && frontswap) { |
| 381 | char *s = ""; | 381 | char *s = ""; |
| 382 | struct frontswap_ops *old_ops = | 382 | struct frontswap_ops *old_ops; |
| 383 | frontswap_register_ops(&tmem_frontswap_ops); | ||
| 384 | 383 | ||
| 385 | tmem_frontswap_poolid = -1; | 384 | tmem_frontswap_poolid = -1; |
| 385 | old_ops = frontswap_register_ops(&tmem_frontswap_ops); | ||
| 386 | if (IS_ERR(old_ops) || old_ops) { | 386 | if (IS_ERR(old_ops) || old_ops) { |
| 387 | if (IS_ERR(old_ops)) | 387 | if (IS_ERR(old_ops)) |
| 388 | return PTR_ERR(old_ops); | 388 | return PTR_ERR(old_ops); |
