[powerpc/powerpc64,ppc64el] Backport more KVM patches from 3.17. Enable
KVM_BOOK3S_64_HV, KVM_BOOK3S_64_PR and KVM_XICS, but keep KVM_BOOK3S_64 disabled for now as it would trigger an ABI change (Partially addresses: #761656). usb/gadget: Enable USB_NET2280 as module svn path=/dists/sid/linux/; revision=21849
This commit is contained in:
parent
83eeb618bc
commit
718b0facc8
|
@ -12,6 +12,12 @@ linux (3.16.2-4) UNRELEASED; urgency=medium
|
|||
[ Ian Campbell ]
|
||||
* [armhf] Enable support for Exynos5 systems. (Closes: #759291)
|
||||
|
||||
[ Aurelien Jarno ]
|
||||
* [powerpc/powerpc64,ppc64el] Backport more KVM patches from 3.17. Enable
|
||||
KVM_BOOK3S_64_HV, KVM_BOOK3S_64_PR and KVM_XICS, but keep KVM_BOOK3S_64
|
||||
disabled for now as it would trigger an ABI change (Partially addresses:
|
||||
#761656).
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sat, 13 Sep 2014 22:28:05 +0100
|
||||
|
||||
linux (3.16.2-3) unstable; urgency=medium
|
||||
|
@ -39,7 +45,7 @@ linux (3.16.2-3) unstable; urgency=medium
|
|||
* media/pci/cx23885: Enable MEDIA_ALTERA_CI as module
|
||||
* sound/usb: Enable SND_USB_HIFACE, SND_BCD2000 as modules
|
||||
* usb/misc: Enable USB_EHSET_TEST_FIXTURE as module
|
||||
* usb/gadget: Enable USB_NET2280 as module
|
||||
usb/gadget: Enable USB_NET2280 as module
|
||||
* leds: Enable LEDS_TRIGGER_CPU as built-in and LEDS_TRIGGER_ONESHOT,
|
||||
LEDS_TRIGGER_GPIO, LEDS_TRIGGER_TRANSIENT, LEDS_TRIGGER_CAMERA as modules
|
||||
* uio: Enable UIO_MF624 as module
|
||||
|
|
|
@ -12,6 +12,14 @@ CONFIG_SCHED_SMT=y
|
|||
CONFIG_CMDLINE="console=hvsi0 console=hvc0 console=ttyS0,9600 console=tty0"
|
||||
CONFIG_KERNEL_START=0xc000000000000000
|
||||
|
||||
##
|
||||
## file: arch/powerpc/kvm/Kconfig
|
||||
##
|
||||
# CONFIG_KVM_BOOK3S_64 is not set
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_KVM_BOOK3S_64_PR=m
|
||||
CONFIG_KVM_XICS=y
|
||||
|
||||
##
|
||||
## file: arch/powerpc/platforms/Kconfig
|
||||
##
|
||||
|
|
231
debian/patches/features/powerpc/KVM-Move-more-code-under-CONFIG_HAVE_KVM_IRQFD.patch
vendored
Normal file
231
debian/patches/features/powerpc/KVM-Move-more-code-under-CONFIG_HAVE_KVM_IRQFD.patch
vendored
Normal file
|
@ -0,0 +1,231 @@
|
|||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Wed, 6 Aug 2014 14:24:45 +0200
|
||||
Subject: KVM: Move more code under CONFIG_HAVE_KVM_IRQFD
|
||||
Origin: https://git.kernel.org/linus/c77dcacb397519b6ade8f08201a4a90a7f4f751e
|
||||
|
||||
Commits e4d57e1ee1ab (KVM: Move irq notifier implementation into
|
||||
eventfd.c, 2014-06-30) included the irq notifier code unconditionally
|
||||
in eventfd.c, while it was under CONFIG_HAVE_KVM_IRQCHIP before.
|
||||
|
||||
Similarly, commit 297e21053a52 (KVM: Give IRQFD its own separate enabling
|
||||
Kconfig option, 2014-06-30) moved code from CONFIG_HAVE_IRQ_ROUTING
|
||||
to CONFIG_HAVE_KVM_IRQFD but forgot to move the pieces that used to be
|
||||
under CONFIG_HAVE_KVM_IRQCHIP.
|
||||
|
||||
Together, this broke compilation without CONFIG_KVM_XICS. Fix by adding
|
||||
or changing the #ifdefs so that they point at CONFIG_HAVE_KVM_IRQFD.
|
||||
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
---
|
||||
include/linux/kvm_host.h | 2 +
|
||||
include/trace/events/kvm.h | 8 +--
|
||||
virt/kvm/eventfd.c | 122 ++++++++++++++++++++++-----------------------
|
||||
virt/kvm/kvm_main.c | 2 +
|
||||
4 files changed, 69 insertions(+), 65 deletions(-)
|
||||
|
||||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
|
||||
index 8593d2e..a4c33b3 100644
|
||||
--- a/include/linux/kvm_host.h
|
||||
+++ b/include/linux/kvm_host.h
|
||||
@@ -388,6 +388,8 @@ struct kvm {
|
||||
*/
|
||||
struct kvm_irq_routing_table __rcu *irq_routing;
|
||||
struct hlist_head mask_notifier_list;
|
||||
+#endif
|
||||
+#ifdef CONFIG_HAVE_KVM_IRQFD
|
||||
struct hlist_head irq_ack_notifier_list;
|
||||
#endif
|
||||
|
||||
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h
|
||||
index 131a0bd..908925a 100644
|
||||
--- a/include/trace/events/kvm.h
|
||||
+++ b/include/trace/events/kvm.h
|
||||
@@ -37,7 +37,7 @@ TRACE_EVENT(kvm_userspace_exit,
|
||||
__entry->errno < 0 ? -__entry->errno : __entry->reason)
|
||||
);
|
||||
|
||||
-#if defined(CONFIG_HAVE_KVM_IRQCHIP)
|
||||
+#if defined(CONFIG_HAVE_KVM_IRQFD)
|
||||
TRACE_EVENT(kvm_set_irq,
|
||||
TP_PROTO(unsigned int gsi, int level, int irq_source_id),
|
||||
TP_ARGS(gsi, level, irq_source_id),
|
||||
@@ -57,7 +57,7 @@ TRACE_EVENT(kvm_set_irq,
|
||||
TP_printk("gsi %u level %d source %d",
|
||||
__entry->gsi, __entry->level, __entry->irq_source_id)
|
||||
);
|
||||
-#endif
|
||||
+#endif /* defined(CONFIG_HAVE_KVM_IRQFD) */
|
||||
|
||||
#if defined(__KVM_HAVE_IOAPIC)
|
||||
#define kvm_deliver_mode \
|
||||
@@ -124,7 +124,7 @@ TRACE_EVENT(kvm_msi_set_irq,
|
||||
|
||||
#endif /* defined(__KVM_HAVE_IOAPIC) */
|
||||
|
||||
-#if defined(CONFIG_HAVE_KVM_IRQCHIP)
|
||||
+#if defined(CONFIG_HAVE_KVM_IRQFD)
|
||||
|
||||
TRACE_EVENT(kvm_ack_irq,
|
||||
TP_PROTO(unsigned int irqchip, unsigned int pin),
|
||||
@@ -149,7 +149,7 @@ TRACE_EVENT(kvm_ack_irq,
|
||||
#endif
|
||||
);
|
||||
|
||||
-#endif /* defined(CONFIG_HAVE_KVM_IRQCHIP) */
|
||||
+#endif /* defined(CONFIG_HAVE_KVM_IRQFD) */
|
||||
|
||||
|
||||
|
||||
diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
|
||||
index f5f6154..3c5981c 100644
|
||||
--- a/virt/kvm/eventfd.c
|
||||
+++ b/virt/kvm/eventfd.c
|
||||
@@ -445,6 +445,67 @@ out:
|
||||
kfree(irqfd);
|
||||
return ret;
|
||||
}
|
||||
+
|
||||
+bool kvm_irq_has_notifier(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
||||
+{
|
||||
+ struct kvm_irq_ack_notifier *kian;
|
||||
+ int gsi, idx;
|
||||
+
|
||||
+ idx = srcu_read_lock(&kvm->irq_srcu);
|
||||
+ gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
|
||||
+ if (gsi != -1)
|
||||
+ hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
||||
+ link)
|
||||
+ if (kian->gsi == gsi) {
|
||||
+ srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(kvm_irq_has_notifier);
|
||||
+
|
||||
+void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
||||
+{
|
||||
+ struct kvm_irq_ack_notifier *kian;
|
||||
+ int gsi, idx;
|
||||
+
|
||||
+ trace_kvm_ack_irq(irqchip, pin);
|
||||
+
|
||||
+ idx = srcu_read_lock(&kvm->irq_srcu);
|
||||
+ gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
|
||||
+ if (gsi != -1)
|
||||
+ hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
||||
+ link)
|
||||
+ if (kian->gsi == gsi)
|
||||
+ kian->irq_acked(kian);
|
||||
+ srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
+}
|
||||
+
|
||||
+void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
||||
+ struct kvm_irq_ack_notifier *kian)
|
||||
+{
|
||||
+ mutex_lock(&kvm->irq_lock);
|
||||
+ hlist_add_head_rcu(&kian->link, &kvm->irq_ack_notifier_list);
|
||||
+ mutex_unlock(&kvm->irq_lock);
|
||||
+#ifdef __KVM_HAVE_IOAPIC
|
||||
+ kvm_vcpu_request_scan_ioapic(kvm);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
|
||||
+ struct kvm_irq_ack_notifier *kian)
|
||||
+{
|
||||
+ mutex_lock(&kvm->irq_lock);
|
||||
+ hlist_del_init_rcu(&kian->link);
|
||||
+ mutex_unlock(&kvm->irq_lock);
|
||||
+ synchronize_srcu(&kvm->irq_srcu);
|
||||
+#ifdef __KVM_HAVE_IOAPIC
|
||||
+ kvm_vcpu_request_scan_ioapic(kvm);
|
||||
+#endif
|
||||
+}
|
||||
#endif
|
||||
|
||||
void
|
||||
@@ -867,64 +928,3 @@ kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args)
|
||||
|
||||
return kvm_assign_ioeventfd(kvm, args);
|
||||
}
|
||||
-
|
||||
-bool kvm_irq_has_notifier(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
||||
-{
|
||||
- struct kvm_irq_ack_notifier *kian;
|
||||
- int gsi, idx;
|
||||
-
|
||||
- idx = srcu_read_lock(&kvm->irq_srcu);
|
||||
- gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
|
||||
- if (gsi != -1)
|
||||
- hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
||||
- link)
|
||||
- if (kian->gsi == gsi) {
|
||||
- srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-EXPORT_SYMBOL_GPL(kvm_irq_has_notifier);
|
||||
-
|
||||
-void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
||||
-{
|
||||
- struct kvm_irq_ack_notifier *kian;
|
||||
- int gsi, idx;
|
||||
-
|
||||
- trace_kvm_ack_irq(irqchip, pin);
|
||||
-
|
||||
- idx = srcu_read_lock(&kvm->irq_srcu);
|
||||
- gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
|
||||
- if (gsi != -1)
|
||||
- hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
||||
- link)
|
||||
- if (kian->gsi == gsi)
|
||||
- kian->irq_acked(kian);
|
||||
- srcu_read_unlock(&kvm->irq_srcu, idx);
|
||||
-}
|
||||
-
|
||||
-void kvm_register_irq_ack_notifier(struct kvm *kvm,
|
||||
- struct kvm_irq_ack_notifier *kian)
|
||||
-{
|
||||
- mutex_lock(&kvm->irq_lock);
|
||||
- hlist_add_head_rcu(&kian->link, &kvm->irq_ack_notifier_list);
|
||||
- mutex_unlock(&kvm->irq_lock);
|
||||
-#ifdef __KVM_HAVE_IOAPIC
|
||||
- kvm_vcpu_request_scan_ioapic(kvm);
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
-void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
|
||||
- struct kvm_irq_ack_notifier *kian)
|
||||
-{
|
||||
- mutex_lock(&kvm->irq_lock);
|
||||
- hlist_del_init_rcu(&kian->link);
|
||||
- mutex_unlock(&kvm->irq_lock);
|
||||
- synchronize_srcu(&kvm->irq_srcu);
|
||||
-#ifdef __KVM_HAVE_IOAPIC
|
||||
- kvm_vcpu_request_scan_ioapic(kvm);
|
||||
-#endif
|
||||
-}
|
||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||
index a69a623..33712fb 100644
|
||||
--- a/virt/kvm/kvm_main.c
|
||||
+++ b/virt/kvm/kvm_main.c
|
||||
@@ -465,6 +465,8 @@ static struct kvm *kvm_create_vm(unsigned long type)
|
||||
|
||||
#ifdef CONFIG_HAVE_KVM_IRQCHIP
|
||||
INIT_HLIST_HEAD(&kvm->mask_notifier_list);
|
||||
+#endif
|
||||
+#ifdef CONFIG_HAVE_KVM_IRQFD
|
||||
INIT_HLIST_HEAD(&kvm->irq_ack_notifier_list);
|
||||
#endif
|
||||
|
||||
--
|
||||
2.0.0
|
||||
|
42
debian/patches/features/powerpc/KVM-PPC-Book3S-Move-vcore-definition-to-end-of-kvm_a.patch
vendored
Normal file
42
debian/patches/features/powerpc/KVM-PPC-Book3S-Move-vcore-definition-to-end-of-kvm_a.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From: Alexander Graf <agraf@suse.de>
|
||||
Date: Fri, 4 Jul 2014 12:52:51 +0200
|
||||
Subject: KVM: PPC: Book3S: Move vcore definition to end of kvm_arch struct
|
||||
Origin: https://git.kernel.org/linus/1287cb3fa85cd4a0d18402f6a23e1d4c6a9d7b8b
|
||||
|
||||
When building KVM with a lot of vcores (NR_CPUS is big), we can potentially
|
||||
get out of the ld immediate range for dereferences inside that struct.
|
||||
|
||||
Move the array to the end of our kvm_arch struct. This fixes compilation
|
||||
issues with NR_CPUS=2048 for me.
|
||||
|
||||
Signed-off-by: Alexander Graf <agraf@suse.de>
|
||||
---
|
||||
arch/powerpc/include/asm/kvm_host.h | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
|
||||
index faf2f0e..855ba4d 100644
|
||||
--- a/arch/powerpc/include/asm/kvm_host.h
|
||||
+++ b/arch/powerpc/include/asm/kvm_host.h
|
||||
@@ -255,7 +255,6 @@ struct kvm_arch {
|
||||
atomic_t hpte_mod_interest;
|
||||
spinlock_t slot_phys_lock;
|
||||
cpumask_t need_tlb_flush;
|
||||
- struct kvmppc_vcore *vcores[KVM_MAX_VCORES];
|
||||
int hpt_cma_alloc;
|
||||
#endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */
|
||||
#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
|
||||
@@ -273,6 +272,10 @@ struct kvm_arch {
|
||||
struct kvmppc_xics *xics;
|
||||
#endif
|
||||
struct kvmppc_ops *kvm_ops;
|
||||
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
+ /* This array can grow quite large, keep it at the end */
|
||||
+ struct kvmppc_vcore *vcores[KVM_MAX_VCORES];
|
||||
+#endif
|
||||
};
|
||||
|
||||
/*
|
||||
--
|
||||
2.0.0
|
||||
|
|
@ -84,6 +84,7 @@ features/powerpc/KVM-PPC-Book3S-HV-Access-host-lppaca-and-shadow-slb-.patch
|
|||
features/powerpc/KVM-PPC-Book3S-HV-Access-XICS-in-BE.patch
|
||||
features/powerpc/KVM-PPC-Book3S-HV-Fix-ABIv2-on-LE.patch
|
||||
features/powerpc/KVM-PPC-Book3S-HV-Enable-for-little-endian-hosts.patch
|
||||
features/powerpc/KVM-PPC-Book3S-Move-vcore-definition-to-end-of-kvm_a.patch
|
||||
features/powerpc/KVM-Rename-and-add-argument-to-check_extension.patch
|
||||
features/powerpc/KVM-Allow-KVM_CHECK_EXTENSION-on-the-vm-fd.patch
|
||||
features/powerpc/KVM-Don-t-keep-reference-to-irq-routing-table-in-irq.patch
|
||||
|
@ -92,6 +93,7 @@ features/powerpc/KVM-Move-all-accesses-to-kvm-irq_routing-into-irqchi.patch
|
|||
features/powerpc/KVM-Move-irq-notifier-implementation-into-eventfd.c.patch
|
||||
features/powerpc/KVM-Give-IRQFD-its-own-separate-enabling-Kconfig-opt.patch
|
||||
features/powerpc/KVM-PPC-Enable-IRQFD-support-for-the-XICS-interrupt-.patch
|
||||
features/powerpc/KVM-Move-more-code-under-CONFIG_HAVE_KVM_IRQFD.patch
|
||||
features/powerpc/deb-pkg-add-support-for-powerpc-little-endian.patch
|
||||
features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||
features/x86/x86-make-x32-syscall-support-conditional.patch
|
||||
|
|
Loading…
Reference in New Issue