[pve-devel] r6398 - pve-kernel-2.6.32/trunk
svn-commits at proxmox.com
svn-commits at proxmox.com
Wed Aug 3 07:15:53 CEST 2011
Author: dietmar
Date: 2011-08-03 07:15:53 +0200 (Wed, 03 Aug 2011)
New Revision: 6398
Added:
pve-kernel-2.6.32/trunk/e1000e-1.4.4.tar.gz
pve-kernel-2.6.32/trunk/revert-2.6.32.40-kvm-clock-fixes.patch
Removed:
pve-kernel-2.6.32/trunk/e1000e-1.3.17.tar.gz
Modified:
pve-kernel-2.6.32/trunk/Makefile
pve-kernel-2.6.32/trunk/changelog.Debian
Log:
* update e1000e to 1.4.4
* revert buggy kvm clock changes introduced by 2.6.32.40 patch
Modified: pve-kernel-2.6.32/trunk/Makefile
===================================================================
--- pve-kernel-2.6.32/trunk/Makefile 2011-08-02 12:19:22 UTC (rev 6397)
+++ pve-kernel-2.6.32/trunk/Makefile 2011-08-03 05:15:53 UTC (rev 6398)
@@ -1,7 +1,7 @@
RELEASE=1.8
KERNEL_VER=2.6.32
-PKGREL=35
+PKGREL=36
# alsp include priv firmware into the fw package fwlist-2.6.32-PREV-pve
KREL=5
@@ -26,7 +26,7 @@
AOEDIR=aoe6-73
AOESRC=${AOEDIR}.tar.gz
-E1000EDIR=e1000e-1.3.17
+E1000EDIR=e1000e-1.4.4
E1000ESRC=${E1000EDIR}.tar.gz
IGBDIR=igb-3.0.22
@@ -147,6 +147,7 @@
rm -rf ${KERNEL_SRC}
tar xf ${KERNEL_SRC_TAR}
zcat ${KERNEL_DEB_DIFF}|patch -p1 -d ${KERNEL_SRC}
+ cd ${KERNEL_SRC}; patch -p1 <../revert-2.6.32.40-kvm-clock-fixes.patch
./applydebpatches.pl ${KERNEL_SRC} ${KERNEL_DEB_REL}
cd ${KERNEL_SRC}; patch -p1 <../fix-register-corruption-in-pvclock-scale-delta.patch
#cd ${KERNEL_SRC}; patch -p1 <../use-init-task-credential.patch
Modified: pve-kernel-2.6.32/trunk/changelog.Debian
===================================================================
--- pve-kernel-2.6.32/trunk/changelog.Debian 2011-08-02 12:19:22 UTC (rev 6397)
+++ pve-kernel-2.6.32/trunk/changelog.Debian 2011-08-03 05:15:53 UTC (rev 6398)
@@ -1,3 +1,11 @@
+pve-kernel-2.6.32 (2.6.32-36) unstable; urgency=low
+
+ * update e1000e to 1.4.4
+
+ * revert buggy kvm clock changes introduced by 2.6.32.40 patch
+
+ -- Proxmox Support Team <support at proxmox.com> Wed, 03 Aug 2011 06:52:49 +0200
+
pve-kernel-2.6.32 (2.6.32-35) unstable; urgency=low
* fix register corruption in pvclock_scale_delta
Deleted: pve-kernel-2.6.32/trunk/e1000e-1.3.17.tar.gz
===================================================================
(Binary files differ)
Added: pve-kernel-2.6.32/trunk/e1000e-1.4.4.tar.gz
===================================================================
(Binary files differ)
Property changes on: pve-kernel-2.6.32/trunk/e1000e-1.4.4.tar.gz
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: pve-kernel-2.6.32/trunk/revert-2.6.32.40-kvm-clock-fixes.patch
===================================================================
--- pve-kernel-2.6.32/trunk/revert-2.6.32.40-kvm-clock-fixes.patch (rev 0)
+++ pve-kernel-2.6.32/trunk/revert-2.6.32.40-kvm-clock-fixes.patch 2011-08-03 05:15:53 UTC (rev 6398)
@@ -0,0 +1,177 @@
+--- linux-2.6-2.6.32/debian/patches/bugfix/all/stable/2.6.32.40.patch.org 2011-08-03 07:03:24.000000000 +0200
++++ linux-2.6-2.6.32/debian/patches/bugfix/all/stable/2.6.32.40.patch 2011-08-03 07:09:29.000000000 +0200
+@@ -217,67 +217,6 @@
+
+ all-installed := $(extra-installed) $(hostprogs-installed) $(wrapper-installed) $(dts-installed)
+
+-diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
+-index 600807b..08bc2ff 100644
+---- a/arch/x86/include/asm/kvm_host.h
+-+++ b/arch/x86/include/asm/kvm_host.h
+-@@ -357,6 +357,9 @@ struct kvm_vcpu_arch {
+- struct page *time_page;
+-
+- bool singlestep; /* guest is single stepped by KVM */
+-+ u64 last_guest_tsc;
+-+ u64 last_kernel_ns;
+-+
+- bool nmi_pending;
+- bool nmi_injected;
+-
+-diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
+-index daaacab..982aa32 100644
+---- a/arch/x86/include/asm/pvclock.h
+-+++ b/arch/x86/include/asm/pvclock.h
+-@@ -12,4 +12,42 @@ void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
+- struct timespec *ts);
+- void pvclock_resume(void);
+-
+-+/*
+-+ * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
+-+ * yielding a 64-bit result.
+-+ */
+-+static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
+-+{
+-+ u64 product;
+-+#ifdef __i386__
+-+ u32 tmp1, tmp2;
+-+#endif
+-+
+-+ if (shift < 0)
+-+ delta >>= -shift;
+-+ else
+-+ delta <<= shift;
+-+
+-+#ifdef __i386__
+-+ __asm__ (
+-+ "mul %5 ; "
+-+ "mov %4,%%eax ; "
+-+ "mov %%edx,%4 ; "
+-+ "mul %5 ; "
+-+ "xor %5,%5 ; "
+-+ "add %4,%%eax ; "
+-+ "adc %5,%%edx ; "
+-+ : "=A" (product), "=r" (tmp1), "=r" (tmp2)
+-+ : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) );
+-+#elif defined(__x86_64__)
+-+ __asm__ (
+-+ "mul %%rdx ; shrd $32,%%rdx,%%rax"
+-+ : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) );
+-+#else
+-+#error implement me!
+-+#endif
+-+
+-+ return product;
+-+}
+-+
+- #endif /* _ASM_X86_PVCLOCK_H */
+ diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
+ index f893f73..8f9c307 100644
+ --- a/arch/x86/kernel/cpu/amd.c
+@@ -291,106 +230,6 @@
+ AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0xff, 0xf));
+
+
+-diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
+-index b12fe8d..929047c 100644
+---- a/arch/x86/kernel/pvclock.c
+-+++ b/arch/x86/kernel/pvclock.c
+-@@ -74,7 +74,8 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift)
+- static u64 pvclock_get_nsec_offset(struct pvclock_shadow_time *shadow)
+- {
+- u64 delta = native_read_tsc() - shadow->tsc_timestamp;
+-- return scale_delta(delta, shadow->tsc_to_nsec_mul, shadow->tsc_shift);
+-+ return pvclock_scale_delta(delta, shadow->tsc_to_nsec_mul,
+-+ shadow->tsc_shift);
+- }
+-
+- /*
+-diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
+-index b2c02a2..df1cefb 100644
+---- a/arch/x86/kvm/x86.c
+-+++ b/arch/x86/kvm/x86.c
+-@@ -47,6 +47,7 @@
+- #include <asm/desc.h>
+- #include <asm/mtrr.h>
+- #include <asm/mce.h>
+-+#include <asm/pvclock.h>
+-
+- #define MAX_IO_MSRS 256
+- #define CR0_RESERVED_BITS \
+-@@ -633,6 +634,8 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
+- struct kvm_vcpu_arch *vcpu = &v->arch;
+- void *shared_kaddr;
+- unsigned long this_tsc_khz;
+-+ s64 kernel_ns, max_kernel_ns;
+-+ u64 tsc_timestamp;
+-
+- if ((!vcpu->time_page))
+- return;
+-@@ -646,15 +649,52 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
+-
+- /* Keep irq disabled to prevent changes to the clock */
+- local_irq_save(flags);
+-- kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp);
+-+ kvm_get_msr(v, MSR_IA32_TSC, &tsc_timestamp);
+- ktime_get_ts(&ts);
+- monotonic_to_bootbased(&ts);
+-+ kernel_ns = timespec_to_ns(&ts);
+- local_irq_restore(flags);
+-
+-+ /*
+-+ * Time as measured by the TSC may go backwards when resetting the base
+-+ * tsc_timestamp. The reason for this is that the TSC resolution is
+-+ * higher than the resolution of the other clock scales. Thus, many
+-+ * possible measurments of the TSC correspond to one measurement of any
+-+ * other clock, and so a spread of values is possible. This is not a
+-+ * problem for the computation of the nanosecond clock; with TSC rates
+-+ * around 1GHZ, there can only be a few cycles which correspond to one
+-+ * nanosecond value, and any path through this code will inevitably
+-+ * take longer than that. However, with the kernel_ns value itself,
+-+ * the precision may be much lower, down to HZ granularity. If the
+-+ * first sampling of TSC against kernel_ns ends in the low part of the
+-+ * range, and the second in the high end of the range, we can get:
+-+ *
+-+ * (TSC - offset_low) * S + kns_old > (TSC - offset_high) * S + kns_new
+-+ *
+-+ * As the sampling errors potentially range in the thousands of cycles,
+-+ * it is possible such a time value has already been observed by the
+-+ * guest. To protect against this, we must compute the system time as
+-+ * observed by the guest and ensure the new system time is greater.
+-+ */
+-+ max_kernel_ns = 0;
+-+ if (vcpu->hv_clock.tsc_timestamp && vcpu->last_guest_tsc) {
+-+ max_kernel_ns = vcpu->last_guest_tsc -
+-+ vcpu->hv_clock.tsc_timestamp;
+-+ max_kernel_ns = pvclock_scale_delta(max_kernel_ns,
+-+ vcpu->hv_clock.tsc_to_system_mul,
+-+ vcpu->hv_clock.tsc_shift);
+-+ max_kernel_ns += vcpu->last_kernel_ns;
+-+ }
+-+
+-+ if (max_kernel_ns > kernel_ns)
+-+ kernel_ns = max_kernel_ns;
+-+
+- /* 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) + v->kvm->arch.kvmclock_offset;
+-+ vcpu->hv_clock.tsc_timestamp = tsc_timestamp;
+-+ vcpu->hv_clock.system_time = kernel_ns + v->kvm->arch.kvmclock_offset;
+-+ vcpu->last_kernel_ns = kernel_ns;
+-+ vcpu->last_guest_tsc = tsc_timestamp;
+-
+- /*
+- * The interface expects us to write an even number signaling that the
+-@@ -3695,6 +3735,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
+- kvm_x86_ops->prepare_guest_switch(vcpu);
+- kvm_load_guest_fpu(vcpu);
+-
+-+ kvm_get_msr(vcpu, MSR_IA32_TSC, &vcpu->arch.last_guest_tsc);
+-+
+- local_irq_disable();
+-
+- clear_bit(KVM_REQ_KICK, &vcpu->requests);
+ diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
+ index 8a6d81a..bb9c5ea 100644
+ --- a/block/blk-sysfs.c
Property changes on: pve-kernel-2.6.32/trunk/revert-2.6.32.40-kvm-clock-fixes.patch
___________________________________________________________________
Added: svn:mergeinfo
+
More information about the pve-devel
mailing list