]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Mon, 1 Feb 2010 21:42:42 +0000 (13:42 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 1 Feb 2010 21:42:42 +0000 (13:42 -0800)
queue-2.6.32/kvm-allow-userspace-to-adjust-kvmclock-offset.patch [new file with mode: 0644]
queue-2.6.32/oprofile-x86-add-xeon-7500-series-support.patch [new file with mode: 0644]
queue-2.6.32/oprofile-x86-fix-crash-when-profiling-more-than-28-events.patch [new file with mode: 0644]
queue-2.6.32/series

diff --git a/queue-2.6.32/kvm-allow-userspace-to-adjust-kvmclock-offset.patch b/queue-2.6.32/kvm-allow-userspace-to-adjust-kvmclock-offset.patch
new file mode 100644 (file)
index 0000000..5296786
--- /dev/null
@@ -0,0 +1,195 @@
+From mtosatti@redhat.com  Mon Feb  1 13:35:13 2010
+From: Marcelo Tosatti <mtosatti@redhat.com>
+Date: Mon, 1 Feb 2010 16:54:05 -0200
+Subject: KVM: allow userspace to adjust kvmclock offset
+To: Alexander Graf <agraf@suse.de>, Greg KH <gregkh@suse.de>
+Cc: Avi Kivity <avi@redhat.com>, KVM list <kvm@vger.kernel.org>
+Message-ID: <20100201185405.GB5381@amt.cnet>
+Content-Disposition: inline
+
+From: Glauber Costa <glommer@redhat.com>
+
+(cherry picked from afbcf7ab8d1bc8c2d04792f6d9e786e0adeb328d)
+
+When we migrate a kvm guest that uses pvclock between two hosts, we may
+suffer a large skew. This is because there can be significant differences
+between the monotonic clock of the hosts involved. When a new host with
+a much larger monotonic time starts running the guest, the view of time
+will be significantly impacted.
+
+Situation is much worse when we do the opposite, and migrate to a host with
+a smaller monotonic clock.
+
+This proposed ioctl will allow userspace to inform us what is the monotonic
+clock value in the source host, so we can keep the time skew short, and
+more importantly, never goes backwards. Userspace may also need to trigger
+the current data, since from the first migration onwards, it won't be
+reflected by a simple call to clock_gettime() anymore.
+
+[marcelo: future-proof abi with a flags field]
+[jan: fix KVM_GET_CLOCK by clearing flags field instead of checking it]
+
+Signed-off-by: Glauber Costa <glommer@redhat.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/kvm/api.txt       |   36 ++++++++++++++++++++++++++++++++++
+ arch/x86/include/asm/kvm_host.h |    1 
+ arch/x86/kvm/x86.c              |   42 +++++++++++++++++++++++++++++++++++++++-
+ include/linux/kvm.h             |    9 ++++++++
+ 4 files changed, 87 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/kvm_host.h
++++ b/arch/x86/include/asm/kvm_host.h
+@@ -412,6 +412,7 @@ struct kvm_arch{
+       unsigned long irq_sources_bitmap;
+       unsigned long irq_states[KVM_IOAPIC_NUM_PINS];
+       u64 vm_init_tsc;
++      s64 kvmclock_offset;
+ };
+ struct kvm_vm_stat {
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -680,7 +680,8 @@ static void kvm_write_guest_time(struct 
+       /* With all the info we got, fill in the values */
+       vcpu->hv_clock.system_time = ts.tv_nsec +
+-                                   (NSEC_PER_SEC * (u64)ts.tv_sec);
++                                   (NSEC_PER_SEC * (u64)ts.tv_sec) + v->kvm->arch.kvmclock_offset;
++
+       /*
+        * The interface expects us to write an even number signaling that the
+        * update is finished. Since the guest won't see the intermediate
+@@ -1227,6 +1228,7 @@ int kvm_dev_ioctl_check_extension(long e
+       case KVM_CAP_PIT2:
+       case KVM_CAP_PIT_STATE2:
+       case KVM_CAP_SET_IDENTITY_MAP_ADDR:
++      case KVM_CAP_ADJUST_CLOCK:
+               r = 1;
+               break;
+       case KVM_CAP_COALESCED_MMIO:
+@@ -2424,6 +2426,44 @@ long kvm_arch_vm_ioctl(struct file *filp
+               r = 0;
+               break;
+       }
++      case KVM_SET_CLOCK: {
++              struct timespec now;
++              struct kvm_clock_data user_ns;
++              u64 now_ns;
++              s64 delta;
++
++              r = -EFAULT;
++              if (copy_from_user(&user_ns, argp, sizeof(user_ns)))
++                      goto out;
++
++              r = -EINVAL;
++              if (user_ns.flags)
++                      goto out;
++
++              r = 0;
++              ktime_get_ts(&now);
++              now_ns = timespec_to_ns(&now);
++              delta = user_ns.clock - now_ns;
++              kvm->arch.kvmclock_offset = delta;
++              break;
++      }
++      case KVM_GET_CLOCK: {
++              struct timespec now;
++              struct kvm_clock_data user_ns;
++              u64 now_ns;
++
++              ktime_get_ts(&now);
++              now_ns = timespec_to_ns(&now);
++              user_ns.clock = kvm->arch.kvmclock_offset + now_ns;
++              user_ns.flags = 0;
++
++              r = -EFAULT;
++              if (copy_to_user(argp, &user_ns, sizeof(user_ns)))
++                      goto out;
++              r = 0;
++              break;
++      }
++
+       default:
+               ;
+       }
+--- a/Documentation/kvm/api.txt
++++ b/Documentation/kvm/api.txt
+@@ -593,6 +593,42 @@ struct kvm_irqchip {
+       } chip;
+ };
++4.27 KVM_GET_CLOCK
++
++Capability: KVM_CAP_ADJUST_CLOCK
++Architectures: x86
++Type: vm ioctl
++Parameters: struct kvm_clock_data (out)
++Returns: 0 on success, -1 on error
++
++Gets the current timestamp of kvmclock as seen by the current guest. In
++conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
++such as migration.
++
++struct kvm_clock_data {
++      __u64 clock;  /* kvmclock current value */
++      __u32 flags;
++      __u32 pad[9];
++};
++
++4.28 KVM_SET_CLOCK
++
++Capability: KVM_CAP_ADJUST_CLOCK
++Architectures: x86
++Type: vm ioctl
++Parameters: struct kvm_clock_data (in)
++Returns: 0 on success, -1 on error
++
++Sets the current timestamp of kvmclock to the valued specific in its parameter.
++In conjunction with KVM_GET_CLOCK, it is used to ensure monotonicity on scenarios
++such as migration.
++
++struct kvm_clock_data {
++      __u64 clock;  /* kvmclock current value */
++      __u32 flags;
++      __u32 pad[9];
++};
++
+ 5. The kvm_run structure
+ Application code obtains a pointer to the kvm_run structure by
+--- a/include/linux/kvm.h
++++ b/include/linux/kvm.h
+@@ -439,6 +439,7 @@ struct kvm_ioeventfd {
+ #endif
+ #define KVM_CAP_IOEVENTFD 36
+ #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
++#define KVM_CAP_ADJUST_CLOCK 39
+ #ifdef KVM_CAP_IRQ_ROUTING
+@@ -501,6 +502,12 @@ struct kvm_irqfd {
+       __u8  pad[20];
+ };
++struct kvm_clock_data {
++      __u64 clock;
++      __u32 flags;
++      __u32 pad[9];
++};
++
+ /*
+  * ioctls for VM fds
+  */
+@@ -550,6 +557,8 @@ struct kvm_irqfd {
+ #define KVM_CREATE_PIT2                  _IOW(KVMIO, 0x77, struct kvm_pit_config)
+ #define KVM_SET_BOOT_CPU_ID        _IO(KVMIO, 0x78)
+ #define KVM_IOEVENTFD             _IOW(KVMIO, 0x79, struct kvm_ioeventfd)
++#define KVM_SET_CLOCK             _IOW(KVMIO, 0x7b, struct kvm_clock_data)
++#define KVM_GET_CLOCK             _IOR(KVMIO, 0x7c, struct kvm_clock_data)
+ /*
+  * ioctls for vcpu fds
diff --git a/queue-2.6.32/oprofile-x86-add-xeon-7500-series-support.patch b/queue-2.6.32/oprofile-x86-add-xeon-7500-series-support.patch
new file mode 100644 (file)
index 0000000..1df8781
--- /dev/null
@@ -0,0 +1,28 @@
+From e83e452b0692c9c13372540deb88a77d4ae2553d Mon Sep 17 00:00:00 2001
+From: Andi Kleen <andi@firstfloor.org>
+Date: Thu, 21 Jan 2010 23:26:27 +0100
+Subject: oprofile/x86: add Xeon 7500 series support
+
+From: Andi Kleen <andi@firstfloor.org>
+
+commit e83e452b0692c9c13372540deb88a77d4ae2553d upstream.
+
+Add Xeon 7500 series support to oprofile.
+
+Straight forward: it's the same as Core i7, so just detect
+the model number. No user space changes needed.
+
+Signed-off-by: Andi Kleen <ak@linux.intel.com>
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+--- a/arch/x86/oprofile/nmi_int.c
++++ b/arch/x86/oprofile/nmi_int.c
+@@ -598,6 +598,7 @@ static int __init ppro_init(char **cpu_type)
+       case 15: case 23:
+               *cpu_type = "i386/core_2";
+               break;
++      case 0x2e:
+       case 26:
+               spec = &op_arch_perfmon_spec;
+               *cpu_type = "i386/core_i7";
diff --git a/queue-2.6.32/oprofile-x86-fix-crash-when-profiling-more-than-28-events.patch b/queue-2.6.32/oprofile-x86-fix-crash-when-profiling-more-than-28-events.patch
new file mode 100644 (file)
index 0000000..acbd34b
--- /dev/null
@@ -0,0 +1,31 @@
+From d8cc108f4fab42b380c6b3f3356f99e8dd5372e2 Mon Sep 17 00:00:00 2001
+From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+Date: Mon, 18 Jan 2010 11:25:36 -0600
+Subject: oprofile/x86: fix crash when profiling more than 28 events
+
+From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+commit d8cc108f4fab42b380c6b3f3356f99e8dd5372e2 upstream.
+
+With multiplexing enabled oprofile crashs when profiling more than 28
+events. This patch fixes this.
+
+Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/oprofile/nmi_int.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/oprofile/nmi_int.c
++++ b/arch/x86/oprofile/nmi_int.c
+@@ -222,7 +222,7 @@ static void nmi_cpu_switch(void *dummy)
+       /* move to next set */
+       si += model->num_counters;
+-      if ((si > model->num_virt_counters) || (counter_config[si].count == 0))
++      if ((si >= model->num_virt_counters) || (counter_config[si].count == 0))
+               per_cpu(switch_index, cpu) = 0;
+       else
+               per_cpu(switch_index, cpu) = si;
index 93fcad3ed296f6d0e1b6bbf401e30f5488928353..3de3c6833317fb2c2ead42778c85bc1bfd52f125 100644 (file)
@@ -46,3 +46,6 @@ sky2-fix-oops-in-sky2_xmit_frame-after-tx-timeout.patch
 net-restore-ip-source-validation.patch
 af_packet-don-t-use-skb-after-dev_queue_xmit.patch
 ax25-netrom-rose-fix-timer-oopses.patch
+kvm-allow-userspace-to-adjust-kvmclock-offset.patch
+oprofile-x86-add-xeon-7500-series-support.patch
+oprofile-x86-fix-crash-when-profiling-more-than-28-events.patch