aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-05-21 23:19:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-05-21 23:19:38 -0400
commit865d872280c848dc78b060088171724c3fb98bbb (patch)
tree17590f7da0f0dab34ac21b6e1cd1e7dcf26ed6ba
parentf0d8690ad443069b26df43a1be09c0f14a928eb9 (diff)
parent77bb3dfdc0d554befad58fdefbc41be5bc3ed38a (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.c1
-rw-r--r--drivers/tty/hvc/hvc_xen.c2
-rw-r--r--drivers/xen/events/events_base.c12
-rw-r--r--include/xen/events.h2
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) { }
272void xen_arch_post_suspend(int suspend_cancelled) { } 272void xen_arch_post_suspend(int suspend_cancelled) { }
273void xen_timer_resume(void) { } 273void xen_timer_resume(void) { }
274void xen_arch_resume(void) { } 274void xen_arch_resume(void) { }
275void 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}
958EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels); 958EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels);
959 959
960int bind_virq_to_irq(unsigned int virq, unsigned int cpu) 960int 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);
20int bind_virq_to_irq(unsigned int virq, unsigned int cpu); 20int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu);
21int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, 21int 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,