diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-21 23:19:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-21 23:19:38 -0400 |
commit | 865d872280c848dc78b060088171724c3fb98bbb (patch) | |
tree | 17590f7da0f0dab34ac21b6e1cd1e7dcf26ed6ba | |
parent | f0d8690ad443069b26df43a1be09c0f14a928eb9 (diff) | |
parent | 77bb3dfdc0d554befad58fdefbc41be5bc3ed38a (diff) |
Merge tag 'for-linus-4.1b-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull two xen bugfixes from David Vrabel:
- fix ARM build regression.
- fix VIRQ_CONSOLE related oops.
* tag 'for-linus-4.1b-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
xen/events: don't bind non-percpu VIRQs with percpu chip
xen/arm: Define xen_arch_suspend()
-rw-r--r-- | arch/arm/xen/enlighten.c | 1 | ||||
-rw-r--r-- | drivers/tty/hvc/hvc_xen.c | 2 | ||||
-rw-r--r-- | drivers/xen/events/events_base.c | 12 | ||||
-rw-r--r-- | include/xen/events.h | 2 |
4 files changed, 11 insertions, 6 deletions
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 224081ccc92f..7d0f07020c80 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c | |||
@@ -272,6 +272,7 @@ void xen_arch_pre_suspend(void) { } | |||
272 | void xen_arch_post_suspend(int suspend_cancelled) { } | 272 | void xen_arch_post_suspend(int suspend_cancelled) { } |
273 | void xen_timer_resume(void) { } | 273 | void xen_timer_resume(void) { } |
274 | void xen_arch_resume(void) { } | 274 | void xen_arch_resume(void) { } |
275 | void xen_arch_suspend(void) { } | ||
275 | 276 | ||
276 | 277 | ||
277 | /* In the hypervisor.S file. */ | 278 | /* In the hypervisor.S file. */ |
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c index 5bab1c684bb1..7a3d146a5f0e 100644 --- a/drivers/tty/hvc/hvc_xen.c +++ b/drivers/tty/hvc/hvc_xen.c | |||
@@ -289,7 +289,7 @@ static int xen_initial_domain_console_init(void) | |||
289 | return -ENOMEM; | 289 | return -ENOMEM; |
290 | } | 290 | } |
291 | 291 | ||
292 | info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0); | 292 | info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0, false); |
293 | info->vtermno = HVC_COOKIE; | 293 | info->vtermno = HVC_COOKIE; |
294 | 294 | ||
295 | spin_lock(&xencons_lock); | 295 | spin_lock(&xencons_lock); |
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 2b8553bd8715..38387950490e 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c | |||
@@ -957,7 +957,7 @@ unsigned xen_evtchn_nr_channels(void) | |||
957 | } | 957 | } |
958 | EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels); | 958 | EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels); |
959 | 959 | ||
960 | int bind_virq_to_irq(unsigned int virq, unsigned int cpu) | 960 | int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu) |
961 | { | 961 | { |
962 | struct evtchn_bind_virq bind_virq; | 962 | struct evtchn_bind_virq bind_virq; |
963 | int evtchn, irq, ret; | 963 | int evtchn, irq, ret; |
@@ -971,8 +971,12 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu) | |||
971 | if (irq < 0) | 971 | if (irq < 0) |
972 | goto out; | 972 | goto out; |
973 | 973 | ||
974 | irq_set_chip_and_handler_name(irq, &xen_percpu_chip, | 974 | if (percpu) |
975 | handle_percpu_irq, "virq"); | 975 | irq_set_chip_and_handler_name(irq, &xen_percpu_chip, |
976 | handle_percpu_irq, "virq"); | ||
977 | else | ||
978 | irq_set_chip_and_handler_name(irq, &xen_dynamic_chip, | ||
979 | handle_edge_irq, "virq"); | ||
976 | 980 | ||
977 | bind_virq.virq = virq; | 981 | bind_virq.virq = virq; |
978 | bind_virq.vcpu = cpu; | 982 | bind_virq.vcpu = cpu; |
@@ -1062,7 +1066,7 @@ int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, | |||
1062 | { | 1066 | { |
1063 | int irq, retval; | 1067 | int irq, retval; |
1064 | 1068 | ||
1065 | irq = bind_virq_to_irq(virq, cpu); | 1069 | irq = bind_virq_to_irq(virq, cpu, irqflags & IRQF_PERCPU); |
1066 | if (irq < 0) | 1070 | if (irq < 0) |
1067 | return irq; | 1071 | return irq; |
1068 | retval = request_irq(irq, handler, irqflags, devname, dev_id); | 1072 | retval = request_irq(irq, handler, irqflags, devname, dev_id); |
diff --git a/include/xen/events.h b/include/xen/events.h index 5321cd9636e6..7d95fdf9cf3e 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -17,7 +17,7 @@ int bind_evtchn_to_irqhandler(unsigned int evtchn, | |||
17 | irq_handler_t handler, | 17 | irq_handler_t handler, |
18 | unsigned long irqflags, const char *devname, | 18 | unsigned long irqflags, const char *devname, |
19 | void *dev_id); | 19 | void *dev_id); |
20 | int bind_virq_to_irq(unsigned int virq, unsigned int cpu); | 20 | int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu); |
21 | int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, | 21 | int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, |
22 | irq_handler_t handler, | 22 | irq_handler_t handler, |
23 | unsigned long irqflags, const char *devname, | 23 | unsigned long irqflags, const char *devname, |