[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