rpms/kernel/devel drm-god-shut-up-about-edid-already.patch, NONE, 1.1.2.2 drm-rv710-ucode-fix.patch, NONE, 1.1.2.2 linux-2.6-ksm-fix-munlock.patch, NONE, 1.1.2.2 linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch, NONE, 1.1.2.2 linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch, NONE, 1.1.2.2 linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch, NONE, 1.1.2.2 linux-2.6-xen-stack-protector-fix.patch, NONE, 1.1.2.2 lirc-2.6.31.patch, NONE, 1.2.2.2 patch-2.6.31-rc8-git2.bz2.sign, NONE, 1.1.2.2 patch-2.6.31-rc8.bz2.sign, NONE, 1.1.2.2 v4l-dvb-fix-cx25840-firmware-loading.patch, NONE, 1.1.2.2 .cvsignore, 1.1014.2.28, 1.1014.2.29 config-generic, 1.238.6.36, 1.238.6.37 config-x86-generic, 1.68.6.19, 1.68.6.20 drm-intel-next.patch, 1.4.6.6, 1.4.6.7 drm-intel-pm.patch, 1.4.2.2, 1.4.2.3 hdpvr-ir-enable.patch, 1.2.2.2, 1.2.2.3 kernel.spec, 1.1294.2.60, 1.1294.2.61 linux-2.6-ksm-kvm.patch, 1.2.6.2, 1.2.6.3 linux-2.6-ksm.patch, 1.2.6.2, 1.2.6.3 sources, 1.976.2.29, 1.976.2.30 upstream, 1.888.2.28, 1.888.2.29 xen.pvops.patch, 1.1.2.37, 1.1.2.38 allow-disabling-ima.diff, 1.2.2.2, NONE linux-2.6.31-lirc.patch, 1.2.2.5, NONE lirc_streamzap-buffer-rework.patch, 1.1.2.2, NONE patch-2.6.31-rc7-git4.bz2.sign, 1.1.4.2, NONE patch-2.6.31-rc7.bz2.sign, 1.1.2.2, NONE xen-fb-probe-fix.patch, 1.1.6.2, NONE

myoung myoung at fedoraproject.org
Thu Sep 3 20:02:48 UTC 2009


Author: myoung

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv29138

Modified Files:
      Tag: private-myoung-dom0-branch
	.cvsignore config-generic config-x86-generic 
	drm-intel-next.patch drm-intel-pm.patch hdpvr-ir-enable.patch 
	kernel.spec linux-2.6-ksm-kvm.patch linux-2.6-ksm.patch 
	sources upstream xen.pvops.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	drm-god-shut-up-about-edid-already.patch 
	drm-rv710-ucode-fix.patch linux-2.6-ksm-fix-munlock.patch 
	linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch 
	linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch 
	linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch 
	linux-2.6-xen-stack-protector-fix.patch lirc-2.6.31.patch 
	patch-2.6.31-rc8-git2.bz2.sign patch-2.6.31-rc8.bz2.sign 
	v4l-dvb-fix-cx25840-firmware-loading.patch 
Removed Files:
      Tag: private-myoung-dom0-branch
	allow-disabling-ima.diff linux-2.6.31-lirc.patch 
	lirc_streamzap-buffer-rework.patch 
	patch-2.6.31-rc7-git4.bz2.sign patch-2.6.31-rc7.bz2.sign 
	xen-fb-probe-fix.patch 
Log Message:
Update pvops patch to try stack protector on i686 again


drm-god-shut-up-about-edid-already.patch:
 drm_edid.c |    3 ---
 1 file changed, 3 deletions(-)

--- NEW FILE drm-god-shut-up-about-edid-already.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_edid.c.jx linux-2.6.30.noarch/drivers/gpu/drm/drm_edid.c
--- linux-2.6.30.noarch/drivers/gpu/drm/drm_edid.c.jx	2009-09-01 17:06:43.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_edid.c	2009-09-01 17:10:28.000000000 -0400
@@ -630,7 +630,6 @@ int drm_do_probe_ddc_edid(struct i2c_ada
 	if (i2c_transfer(adapter, msgs, 2) == 2)
 		return 0;
 
-	dev_info(&adapter->dev, "unable to read EDID block.\n");
 	return -1;
 }
 EXPORT_SYMBOL(drm_do_probe_ddc_edid);
@@ -643,8 +642,6 @@ static int drm_ddc_read_edid(struct drm_
 
 	ret = drm_do_probe_ddc_edid(adapter, buf, len);
 	if (ret != 0) {
-		dev_info(&connector->dev->pdev->dev, "%s: no EDID data\n",
-			 drm_get_connector_name(connector));
 		goto end;
 	}
 	if (!edid_is_valid((struct edid *)buf)) {

drm-rv710-ucode-fix.patch:
 rv770.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE drm-rv710-ucode-fix.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/rv770.c.jx linux-2.6.30.noarch/drivers/gpu/drm/radeon/rv770.c
--- linux-2.6.30.noarch/drivers/gpu/drm/radeon/rv770.c.jx	2009-08-27 14:45:25.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/rv770.c	2009-08-27 14:54:30.000000000 -0400
@@ -282,6 +282,7 @@ static int rv770_cp_load_microcode(struc
 		for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
 			WREG32(CP_ME_RAM_DATA, RV710_cp_microcode[i]);
 		WREG32(CP_ME_RAM_WADDR, 0);
+		break;
 	default:
 		DRM_ERROR("Unknown chipset for RV7XX microcode\n");
 		return -1;

linux-2.6-ksm-fix-munlock.patch:
 include/linux/ksm.h |   11 ++++-------
 kernel/fork.c       |    1 +
 mm/ksm.c            |    5 +----
 mm/memory.c         |    4 ++--
 mm/mmap.c           |    7 -------
 5 files changed, 8 insertions(+), 20 deletions(-)

--- NEW FILE linux-2.6-ksm-fix-munlock.patch ---
From: Andrea Arcangeli <aarcange at redhat.com>

Allowing page faults triggered by drivers tracking the mm during
exit_mmap with mm_users already zero is asking for troubles. And we
can't stop page faults from happening during exit_mmap or munlock fails
(munlock also better stop triggering page faults with mm_users zero).

ksm_exit if there are rmap_items still chained on this mm slot, will
take mmap_sem write side so preventing ksm to keep working on a mm while
exit_mmap runs. And ksm will bail out as soon as it notices that
mm_users is already zero thanks to the ksm_test_exit checks. So that
when a task is killed by OOM killer or the user, ksm will not
indefinitely prevent it to run exit_mmap and release its memory. 

Signed-off-by: Andrea Arcangeli <aarcange at redhat.com>
---

diff --git a/include/linux/ksm.h b/include/linux/ksm.h
index 2d64ff3..0e26de6 100644
--- a/include/linux/ksm.h
+++ b/include/linux/ksm.h
@@ -18,8 +18,7 @@ struct mmu_gather;
 int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
 		unsigned long end, int advice, unsigned long *vm_flags);
 int __ksm_enter(struct mm_struct *mm);
-void __ksm_exit(struct mm_struct *mm,
-		struct mmu_gather **tlbp, unsigned long end);
+void __ksm_exit(struct mm_struct *mm);
 
 static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm)
 {
@@ -41,11 +40,10 @@ static inline bool ksm_test_exit(struct mm_struct *mm)
 	return atomic_read(&mm->mm_users) == 0;
 }
 
-static inline void ksm_exit(struct mm_struct *mm,
-			    struct mmu_gather **tlbp, unsigned long end)
+static inline void ksm_exit(struct mm_struct *mm)
 {
 	if (test_bit(MMF_VM_MERGEABLE, &mm->flags))
-		__ksm_exit(mm, tlbp, end);
+		__ksm_exit(mm);
 }
 
 /*
@@ -86,8 +84,7 @@ static inline bool ksm_test_exit(struct mm_struct *mm)
 	return 0;
 }
 
-static inline void ksm_exit(struct mm_struct *mm,
-			    struct mmu_gather **tlbp, unsigned long end)
+static inline void ksm_exit(struct mm_struct *mm)
 {
 }
 
diff --git a/kernel/fork.c b/kernel/fork.c
index 9a16c21..6f93809 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -515,6 +515,7 @@ void mmput(struct mm_struct *mm)
 
 	if (atomic_dec_and_test(&mm->mm_users)) {
 		exit_aio(mm);
+		ksm_exit(mm);
 		exit_mmap(mm);
 		set_mm_exe_file(mm, NULL);
 		if (!list_empty(&mm->mmlist)) {
diff --git a/mm/ksm.c b/mm/ksm.c
index d03627f..329ebe9 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1428,8 +1428,7 @@ int __ksm_enter(struct mm_struct *mm)
 	return 0;
 }
 
-void __ksm_exit(struct mm_struct *mm,
-		struct mmu_gather **tlbp, unsigned long end)
+void __ksm_exit(struct mm_struct *mm)
 {
 	struct mm_slot *mm_slot;
 	int easy_to_free = 0;
@@ -1462,10 +1461,8 @@ void __ksm_exit(struct mm_struct *mm,
 		clear_bit(MMF_VM_MERGEABLE, &mm->flags);
 		mmdrop(mm);
 	} else if (mm_slot) {
-		tlb_finish_mmu(*tlbp, 0, end);
 		down_write(&mm->mmap_sem);
 		up_write(&mm->mmap_sem);
-		*tlbp = tlb_gather_mmu(mm, 1);
 	}
 }
 
diff --git a/mm/memory.c b/mm/memory.c
index 4a2c60d..025431e 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2603,7 +2603,7 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
 	entry = maybe_mkwrite(pte_mkdirty(entry), vma);
 
 	page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-	if (!pte_none(*page_table) || ksm_test_exit(mm))
+	if (!pte_none(*page_table))
 		goto release;
 
 	inc_mm_counter(mm, anon_rss);
@@ -2753,7 +2753,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
 	 * handle that later.
 	 */
 	/* Only go through if we didn't race with anybody else... */
-	if (likely(pte_same(*page_table, orig_pte) && !ksm_test_exit(mm))) {
+	if (likely(pte_same(*page_table, orig_pte))) {
 		flush_icache_page(vma, page);
 		entry = mk_pte(page, vma->vm_page_prot);
 		if (flags & FAULT_FLAG_WRITE)
diff --git a/mm/mmap.c b/mm/mmap.c
index 1b0a709..f3f2a22 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2111,13 +2111,6 @@ void exit_mmap(struct mm_struct *mm)
 	end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL);
 	vm_unacct_memory(nr_accounted);
 
-	/*
-	 * For KSM to handle OOM without deadlock when it's breaking COW in a
-	 * likely victim of the OOM killer, we must serialize with ksm_exit()
-	 * after freeing mm's pages but before freeing its page tables.
-	 */
-	ksm_exit(mm, &tlb, end);
-
 	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
 	tlb_finish_mmu(tlb, 0, end);
 

linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch:
 kvm.c |    7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

--- NEW FILE linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch ---
Date:  Tue, 25 Aug 2009 01:13:10 -0300
From: Marcelo Tosatti <mtosatti at redhat.com>
To: Avi Kivity <avi at redhat.com>
Cc: kvm <kvm at vger.kernel.org>, Jeremy Fitzhardinge <jeremy at goop.org>
Subject: KVM pvmmu: do not batch pte updates from interrupt context


Commit b8bcfe997e4 made paravirt pte updates synchronous in interrupt
context.

Unfortunately the KVM pv mmu code caches the lazy/nonlazy mode
internally, so a pte update from interrupt context during a lazy mmu
operation can be batched while it should be performed synchronously.

https://bugzilla.redhat.com/show_bug.cgi?id=518022

Drop the internal mode variable and use paravirt_get_lazy_mode(), which
returns the correct state.

Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index c664d51..63b0ec8 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -34,7 +34,6 @@
 struct kvm_para_state {
 	u8 mmu_queue[MMU_QUEUE_SIZE];
 	int mmu_queue_len;
-	enum paravirt_lazy_mode mode;
 };
 
 static DEFINE_PER_CPU(struct kvm_para_state, para_state);
@@ -77,7 +76,7 @@ static void kvm_deferred_mmu_op(void *buffer, int len)
 {
 	struct kvm_para_state *state = kvm_para_state();
 
-	if (state->mode != PARAVIRT_LAZY_MMU) {
+	if (paravirt_get_lazy_mode() != PARAVIRT_LAZY_MMU) {
 		kvm_mmu_op(buffer, len);
 		return;
 	}
@@ -185,10 +184,7 @@ static void kvm_release_pt(unsigned long pfn)
 
 static void kvm_enter_lazy_mmu(void)
 {
-	struct kvm_para_state *state = kvm_para_state();
-
 	paravirt_enter_lazy_mmu();
-	state->mode = paravirt_get_lazy_mode();
 }
 
 static void kvm_leave_lazy_mmu(void)
@@ -197,7 +193,6 @@ static void kvm_leave_lazy_mmu(void)
 
 	mmu_queue_flush(state);
 	paravirt_leave_lazy_mmu();
-	state->mode = paravirt_get_lazy_mode();
 }
 
 static void __init paravirt_ops_setup(void)


linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch:
 include/asm/kvm_host.h |    1 +
 kvm/vmx.c              |    2 ++
 kvm/x86.c              |   14 +++++++++++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch ---
Date: Tue,  1 Sep 2009 12:03:25 +0300
From: Avi Kivity <avi at redhat.com>
To: Marcelo Tosatti <mtosatti at redhat.com>
Cc: kvm at vger.kernel.org
Subject: [PATCH] KVM: VMX: Check cpl before emulating debug register access

Debug registers may only be accessed from cpl 0.  Unfortunately, vmx will
code to emulate the instruction even though it was issued from guest
userspace, possibly leading to an unexpected trap later.

Cc: stable at kernel.org
Signed-off-by: Avi Kivity <avi at redhat.com>
---
 arch/x86/include/asm/kvm_host.h |    1 +
 arch/x86/kvm/vmx.c              |    2 ++
 arch/x86/kvm/x86.c              |   13 +++++++++++++
 3 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index a3f637f..6046e6f 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -621,6 +621,7 @@ void kvm_queue_exception(struct kvm_vcpu *vcpu, unsigned nr);
 void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code);
 void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2,
 			   u32 error_code);
+bool kvm_require_cpl(struct kvm_vcpu *vcpu, int required_cpl);
 
 int kvm_pic_set_irq(void *opaque, int irq, int level);
 
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 78101dd..05cd554 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -2931,6 +2931,8 @@ static int handle_dr(struct kvm_vcpu *vcpu)
 	unsigned long val;
 	int dr, reg;
 
+	if (!kvm_require_cpl(vcpu, 0))
+		return 1;
 	dr = vmcs_readl(GUEST_DR7);
 	if (dr & DR7_GD) {
 		/*
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 8b3a169..891234b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -223,6 +223,19 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code)
 EXPORT_SYMBOL_GPL(kvm_queue_exception_e);
 
 /*
+ * Checks if cpl <= required_cpl; if true, return true.  Otherwise queue
+ * a #GP and return false.
+ */
+bool kvm_require_cpl(struct kvm_vcpu *vcpu, int required_cpl)
+{
+	if (kvm_x86_ops->get_cpl(vcpu) <= required_cpl)
+		return true;
+	kvm_queue_exception_e(vcpu, GP_VECTOR, 0);
+	return false;
+}
+EXPORT_SYMBOL_GPL(kvm_require_cpl);
+
+/*
  * Load the pae pdptrs.  Return true is they are all valid.
  */
 int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3)
-- 
1.6.4.1


linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch:
 kvmclock.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

--- NEW FILE linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch ---
Date:  Mon, 31 Aug 2009 03:04:31 -0400
From: Glauber Costa <glommer at redhat.com>
To: kvm at vger.kernel.org
Cc: linux-kernel at vger.kernel.org, avi at redhat.com
Subject: [PATCH] use __pa_symbol to calculate the address of a C symbol.

The use of __pa() to calculate the address of a C-visible symbol
is wrong, and can lead to unpredictable results. See arch/x86/include/asm/page.h
for details.

It should be replaced with __pa_symbol(), that does the correct math here,
by taking relocations into account.

Signed-off-by: Glauber Costa <glommer at redhat.com>
---
 arch/x86/kernel/kvmclock.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 223af43..e5efcdc 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -50,8 +50,8 @@ static unsigned long kvm_get_wallclock(void)
 	struct timespec ts;
 	int low, high;
 
-	low = (int)__pa(&wall_clock);
-	high = ((u64)__pa(&wall_clock) >> 32);
+	low = (int)__pa_symbol(&wall_clock);
+	high = ((u64)__pa_symbol(&wall_clock) >> 32);
 	native_write_msr(MSR_KVM_WALL_CLOCK, low, high);
 
 	vcpu_time = &get_cpu_var(hv_clock);
-- 
1.6.2.2

linux-2.6-xen-stack-protector-fix.patch:
 arch/x86/mm/Makefile     |    4 +
 arch/x86/xen/Makefile    |    2 
 arch/x86/xen/enlighten.c |  133 +++++++++++++++++++++++++++++++++++++++--------
 arch/x86/xen/smp.c       |    1 
 drivers/xen/Makefile     |    3 +
 5 files changed, 123 insertions(+), 20 deletions(-)

--- NEW FILE linux-2.6-xen-stack-protector-fix.patch ---
>From 27512accbc440c1460b2df6024ed03fc40feff7d Mon Sep 17 00:00:00 2001
From: Jeremy Fitzhardinge <jeremy.fitzhardinge at citrix.com>
Date: Thu, 27 Aug 2009 12:46:35 -0700
Subject: [PATCH] xen: make -fstack-protector work under Xen

-fstack-protector uses a special per-cpu "stack canary" value.
gcc generates special code in each function to test the canary to make
sure that the function's stack hasn't been overrun.

On x86-64, this is simply an offset of %gs, which is the usual per-cpu
base segment register, so setting it up simply requires loading %gs's
base as normal.

On i386, the stack protector segment is %gs (rather than the usual kernel
percpu %fs segment register).  This requires setting up the full kernel
GDT and then loading %gs accordingly.  (We also need to make sure %fs is
initialized on secondary cpus too.)

To keep things consistent, we do the full GDT/segment register setup on
both architectures.

Because we need to avoid -fstack-protected code before setting up the GDT
and because there's no way to disable it on a per-function basis, several
files need to have stack-protector inhibited.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge at citrix.com>

diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index eefdeee..72bb3a2 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -1,6 +1,10 @@
 obj-y	:=  init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
 	    pat.o pgtable.o gup.o
 
+# Make sure __phys_addr has no stackprotector
+nostackp := $(call cc-option, -fno-stack-protector)
+CFLAGS_ioremap.o		:= $(nostackp)
+
 obj-$(CONFIG_SMP)		+= tlb.o
 
 obj-$(CONFIG_X86_32)		+= pgtable_32.o iomap_32.o
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
index 7410640..3bb4fc2 100644
--- a/arch/x86/xen/Makefile
+++ b/arch/x86/xen/Makefile
@@ -8,6 +8,7 @@ endif
 # Make sure early boot has no stackprotector
 nostackp := $(call cc-option, -fno-stack-protector)
 CFLAGS_enlighten.o		:= $(nostackp)
+CFLAGS_mmu.o			:= $(nostackp)
 
 obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
 			time.o xen-asm.o xen-asm_$(BITS).o \
@@ -16,3 +17,4 @@ obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
 obj-$(CONFIG_SMP)		+= smp.o
 obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
 obj-$(CONFIG_XEN_DEBUG_FS)	+= debugfs.o
+
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index e5b903b..596a7d7 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -51,6 +51,7 @@
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
 #include <asm/reboot.h>
+#include <asm/stackprotector.h>
 
 #include "xen-ops.h"
 #include "mmu.h"
@@ -339,18 +340,28 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
 	unsigned long frames[pages];
 	int f;
 
-	/* A GDT can be up to 64k in size, which corresponds to 8192
-	   8-byte entries, or 16 4k pages.. */
+	/* 
+	 * A GDT can be up to 64k in size, which corresponds to 8192
+	 * 8-byte entries, or 16 4k pages..
+	 */
 
 	BUG_ON(size > 65536);
 	BUG_ON(va & ~PAGE_MASK);
 
 	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
 		int level;
-		pte_t *ptep = lookup_address(va, &level);
+		pte_t *ptep;
 		unsigned long pfn, mfn;
 		void *virt;
 
+		/*
+		 * The GDT is per-cpu and is in the percpu data area.
+		 * That can be virtually mapped, so we need to do a
+		 * page-walk to get the underlying MFN for the
+		 * hypercall.  The page can also be in the kernel's
+		 * linear range, so we need to RO that mapping too.
+		 */
+		ptep = lookup_address(va, &level);
 		BUG_ON(ptep == NULL);
 
 		pfn = pte_pfn(*ptep);
@@ -367,6 +378,44 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
 		BUG();
 }
 
+/* 
+ * load_gdt for early boot, when the gdt is only mapped once
+ */
+static __init void xen_load_gdt_boot(const struct desc_ptr *dtr)
+{
+	unsigned long va = dtr->address;
+	unsigned int size = dtr->size + 1;
+	unsigned pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;
+	unsigned long frames[pages];
+	int f;
+
+	/* 
+	 * A GDT can be up to 64k in size, which corresponds to 8192
+	 * 8-byte entries, or 16 4k pages..
+	 */
+
+	BUG_ON(size > 65536);
+	BUG_ON(va & ~PAGE_MASK);
+
+	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
+		pte_t pte;
+		unsigned long pfn, mfn;
+
+		pfn = virt_to_pfn(va);
+		mfn = pfn_to_mfn(pfn);
+
+		pte = pfn_pte(pfn, PAGE_KERNEL_RO);
+
+		if (HYPERVISOR_update_va_mapping((unsigned long)va, pte, 0))
+			BUG();
+
+		frames[f] = mfn;
+	}
+
+	if (HYPERVISOR_set_gdt(frames, size / sizeof(struct desc_struct)))
+		BUG();
+}
+
 static void load_TLS_descriptor(struct thread_struct *t,
 				unsigned int cpu, unsigned int i)
 {
@@ -590,6 +639,29 @@ static void xen_write_gdt_entry(struct desc_struct *dt, int entry,
 	preempt_enable();
 }
 
+/* 
+ * Version of write_gdt_entry for use at early boot-time needed to
+ * update an entry as simply as possible.
+ */
+static __init void xen_write_gdt_entry_boot(struct desc_struct *dt, int entry,
+					    const void *desc, int type)
+{
+	switch (type) {
+	case DESC_LDT:
+	case DESC_TSS:
+		/* ignore */
+		break;
+
+	default: {
+		xmaddr_t maddr = virt_to_machine(&dt[entry]);
+
+		if (HYPERVISOR_update_descriptor(maddr.maddr, *(u64 *)desc))
+			dt[entry] = *(struct desc_struct *)desc;
+	}
+
+	}	
+}
+
 static void xen_load_sp0(struct tss_struct *tss,
 			 struct thread_struct *thread)
 {
@@ -974,6 +1046,23 @@ static const struct machine_ops __initdata xen_machine_ops = {
 	.emergency_restart = xen_emergency_restart,
 };
 
+/* 
+ * Set up the GDT and segment registers for -fstack-protector.  Until
+ * we do this, we have to be careful not to call any stack-protected
+ * function, which is most of the kernel.
+ */
+static void __init xen_setup_stackprotector(void)
+{
+	pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry_boot;
+	pv_cpu_ops.load_gdt = xen_load_gdt_boot;
+
+	setup_stack_canary_segment(0);
+	switch_to_new_gdt(0);
+
+	pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;       
+	pv_cpu_ops.load_gdt = xen_load_gdt;
+}
+
 /* First C function to be called on Xen boot */
 asmlinkage void __init xen_start_kernel(void)
 {
@@ -992,13 +1081,28 @@ asmlinkage void __init xen_start_kernel(void)
 	pv_apic_ops = xen_apic_ops;
 	pv_mmu_ops = xen_mmu_ops;
 
-#ifdef CONFIG_X86_64
-	/*
-	 * Setup percpu state.  We only need to do this for 64-bit
-	 * because 32-bit already has %fs set properly.
+	/* 
+	 * Set up some pagetable state before starting to set any ptes.
 	 */
-	load_percpu_segment(0);
-#endif
+
+	/* Prevent unwanted bits from being set in PTEs. */
+	__supported_pte_mask &= ~_PAGE_GLOBAL;
+	if (!xen_initial_domain())
+		__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
+
+	__supported_pte_mask |= _PAGE_IOMAP;
+
+	xen_setup_features();
+
+	/* Get mfn list */
+	if (!xen_feature(XENFEAT_auto_translated_physmap))
+		xen_build_dynamic_phys_to_machine();
+
+	/* 
+	 * Set up kernel GDT and segment registers, mainly so that
+	 * -fstack-protector code can be executed.
+	 */
+	xen_setup_stackprotector();
 
 	xen_init_irq_ops();
 	xen_init_cpuid_mask();
@@ -1010,8 +1114,6 @@ asmlinkage void __init xen_start_kernel(void)
 	set_xen_basic_apic_ops();
 #endif
 
-	xen_setup_features();
-
 	if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {
 		pv_mmu_ops.ptep_modify_prot_start = xen_ptep_modify_prot_start;
 		pv_mmu_ops.ptep_modify_prot_commit = xen_ptep_modify_prot_commit;
@@ -1028,17 +1130,8 @@ asmlinkage void __init xen_start_kernel(void)
 
 	xen_smp_init();
 
-	/* Get mfn list */
-	if (!xen_feature(XENFEAT_auto_translated_physmap))
-		xen_build_dynamic_phys_to_machine();
-
 	pgd = (pgd_t *)xen_start_info->pt_base;
 
-	/* Prevent unwanted bits from being set in PTEs. */
-	__supported_pte_mask &= ~_PAGE_GLOBAL;
-	if (!xen_initial_domain())
-		__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
-
 #ifdef CONFIG_X86_64
 	/* Work out if we support NX */
 	check_efer();
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index 429834e..fe03eee 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -236,6 +236,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
 	ctxt->user_regs.ss = __KERNEL_DS;
 #ifdef CONFIG_X86_32
 	ctxt->user_regs.fs = __KERNEL_PERCPU;
+	ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
 #else
 	ctxt->gs_base_kernel = per_cpu_offset(cpu);
 #endif
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index ec2a39b..7c28434 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -1,6 +1,9 @@
 obj-y	+= grant-table.o features.o events.o manage.o
 obj-y	+= xenbus/
 
+nostackp := $(call cc-option, -fno-stack-protector)
+CFLAGS_features.o			:= $(nostackp)
+
 obj-$(CONFIG_HOTPLUG_CPU)	+= cpu_hotplug.o
 obj-$(CONFIG_XEN_XENCOMM)	+= xencomm.o
 obj-$(CONFIG_XEN_BALLOON)	+= balloon.o

lirc-2.6.31.patch:
 MAINTAINERS                           |    9 
 drivers/input/Kconfig                 |    2 
 drivers/input/Makefile                |    2 
 drivers/input/lirc/Kconfig            |  119 +
 drivers/input/lirc/Makefile           |   21 
 drivers/input/lirc/lirc.h             |  100 +
 drivers/input/lirc/lirc_bt829.c       |  383 +++++
 drivers/input/lirc/lirc_dev.c         |  839 ++++++++++++
 drivers/input/lirc/lirc_dev.h         |  184 ++
 drivers/input/lirc/lirc_ene0100.c     |  644 +++++++++
 drivers/input/lirc/lirc_ene0100.h     |  169 ++
 drivers/input/lirc/lirc_i2c.c         |  537 +++++++
 drivers/input/lirc/lirc_igorplugusb.c |  556 ++++++++
 drivers/input/lirc/lirc_imon.c        | 2301 ++++++++++++++++++++++++++++++++++
 drivers/input/lirc/lirc_it87.c        |  986 ++++++++++++++
 drivers/input/lirc/lirc_it87.h        |  116 +
 drivers/input/lirc/lirc_ite8709.c     |  539 +++++++
 drivers/input/lirc/lirc_mceusb.c      | 1244 ++++++++++++++++++
 drivers/input/lirc/lirc_parallel.c    |  709 ++++++++++
 drivers/input/lirc/lirc_parallel.h    |   26 
 drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++
 drivers/input/lirc/lirc_serial.c      | 1316 +++++++++++++++++++
 drivers/input/lirc/lirc_sir.c         | 1283 ++++++++++++++++++
 drivers/input/lirc/lirc_streamzap.c   |  794 +++++++++++
 drivers/input/lirc/lirc_ttusbir.c     |  397 +++++
 drivers/input/lirc/lirc_zilog.c       | 1395 ++++++++++++++++++++
 26 files changed, 15602 insertions(+)

--- NEW FILE lirc-2.6.31.patch ---
Linux Infrared Remote Control drivers -- http://www.lirc.org

Last updated: Tuesday, September 01, 2009

>From http://git.wilsonet.com/linux-2.6-lirc.git/

Signed-off-by: Jarod Wilson <jarod at redhat.com>

---
 MAINTAINERS                           |    9 +
 drivers/input/Kconfig                 |    2 +
 drivers/input/Makefile                |    2 +
 drivers/input/lirc/Kconfig            |  119 ++
 drivers/input/lirc/Makefile           |   21 +
 drivers/input/lirc/lirc.h             |  100 ++
 drivers/input/lirc/lirc_bt829.c       |  383 ++++++
 drivers/input/lirc/lirc_dev.c         |  839 ++++++++++++
 drivers/input/lirc/lirc_dev.h         |  184 +++
 drivers/input/lirc/lirc_ene0100.c     |  644 +++++++++
 drivers/input/lirc/lirc_ene0100.h     |  169 +++
 drivers/input/lirc/lirc_i2c.c         |  537 ++++++++
 drivers/input/lirc/lirc_igorplugusb.c |  556 ++++++++
 drivers/input/lirc/lirc_imon.c        | 2301 +++++++++++++++++++++++++++++++++
 drivers/input/lirc/lirc_it87.c        |  986 ++++++++++++++
 drivers/input/lirc/lirc_it87.h        |  116 ++
 drivers/input/lirc/lirc_ite8709.c     |  539 ++++++++
 drivers/input/lirc/lirc_mceusb.c      | 1244 ++++++++++++++++++
 drivers/input/lirc/lirc_parallel.c    |  709 ++++++++++
 drivers/input/lirc/lirc_parallel.h    |   26 +
 drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++
 drivers/input/lirc/lirc_serial.c      | 1316 +++++++++++++++++++
 drivers/input/lirc/lirc_sir.c         | 1283 ++++++++++++++++++
 drivers/input/lirc/lirc_streamzap.c   |  794 ++++++++++++
 drivers/input/lirc/lirc_ttusbir.c     |  397 ++++++
 drivers/input/lirc/lirc_zilog.c       | 1395 ++++++++++++++++++++
 26 files changed, 15602 insertions(+), 0 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 8dca9d8..f25dc26 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3129,6 +3129,15 @@ W:	http://www.pasemi.com/
 L:	linuxppc-dev at ozlabs.org
 S:	Supported
 
+LINUX INFRARED REMOTE CONTROL DRIVERS (LIRC)
+P:	Jarod Wilson
+M:	jarod at redhat.com
+P:	Christoph Bartelmus
+M:	lirc at bartelmus.de
+W:	http://www.lirc.org/
+L:	lirc-list at lists.sourceforge.net
+S:	Maintained
+
 LINUX SECURITY MODULE (LSM) FRAMEWORK
 M:	Chris Wright <chrisw at sous-sol.org>
 L:	linux-security-module at vger.kernel.org
diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
index cd50c00..442f94f 100644
--- a/drivers/input/Kconfig
+++ b/drivers/input/Kconfig
@@ -170,6 +170,8 @@ source "drivers/input/tablet/Kconfig"
 
 source "drivers/input/touchscreen/Kconfig"
 
+source "drivers/input/lirc/Kconfig"
+
 source "drivers/input/misc/Kconfig"
 
 endif
diff --git a/drivers/input/Makefile b/drivers/input/Makefile
index 4c9c745..99e2b5e 100644
--- a/drivers/input/Makefile
+++ b/drivers/input/Makefile
@@ -25,3 +25,5 @@ obj-$(CONFIG_INPUT_MISC)	+= misc/
 obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 
 obj-$(CONFIG_XEN_KBDDEV_FRONTEND)	+= xen-kbdfront.o
+
+obj-$(CONFIG_INPUT_LIRC)       += lirc/
diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
new file mode 100644
index 0000000..ab13cfe
--- /dev/null
+++ b/drivers/input/lirc/Kconfig
@@ -0,0 +1,119 @@
+#
+# LIRC driver(s) configuration
+#
+menuconfig INPUT_LIRC
+	bool "Linux Infrared Remote Control IR receiver/transmitter drivers"
+	help
+	  Say Y here, and all supported Linux Infrared Remote Control IR and
+	  RF receiver and transmitter drivers will be displayed. When paired
+	  with a remote control and the lirc daemon, the receiver drivers
+	  allow control of your Linux system via remote control.
+
+if INPUT_LIRC
+
+config LIRC_DEV
+	tristate "LIRC device loadable module support"
+	help
+	  LIRC device loadable module support, required for most LIRC drivers
+
+config LIRC_BT829
+        tristate "BT829 based hardware"
+	depends on LIRC_DEV
+	help
+	  Driver for the IR interface on BT829-based hardware
+
+config LIRC_ENE0100
+	tristate "ENE KB3924/ENE0100 CIR Port Reciever"
+	depends on LIRC_DEV
+	help
+	  This is a driver for CIR port handled by ENE KB3924 embedded
+	  controller found on some notebooks.
+	  It appears on PNP list as ENE0100.
+
+config LIRC_I2C
+	tristate "I2C Based IR Receivers"
+	depends on LIRC_DEV
+	help
+	  Driver for I2C-based IR receivers, such as those commonly
+	  found onboard Hauppauge PVR-150/250/350 video capture cards
+
+config LIRC_IGORPLUGUSB
+	tristate "Igor Cesko's USB IR Receiver"
+	depends on LIRC_DEV && USB
+	help
+	  Driver for Igor Cesko's USB IR Receiver
+
+config LIRC_IMON
+	tristate "Soundgraph IMON Receiver"
+	depends on LIRC_DEV
+	help
+	  Driver for the Soundgraph IMON IR Receiver
+
+config LIRC_IT87
+	tristate "ITE IT87XX CIR Port Receiver"
+	depends on LIRC_DEV
+	help
+	  Driver for the ITE IT87xx IR Receiver
+
+config LIRC_ITE8709
+	tristate "ITE8709 CIR Port Receiver"
+	depends on LIRC_DEV && PNP
+	help
+	  Driver for the ITE8709 IR Receiver
+
+config LIRC_MCEUSB
+	tristate "Windows Media Center Ed. USB IR Transceiver"
+	depends on LIRC_DEV && USB
+	help
+	  Driver for Windows Media Center Ed. USB IR Transceivers
+
+config LIRC_PARALLEL
+	tristate "Homebrew Parallel Port Receiver"
+	depends on LIRC_DEV && !SMP
+	help
+	  Driver for Homebrew Parallel Port Receivers
+
+config LIRC_SASEM
+	tristate "Sasem USB IR Remote"
+	depends on LIRC_DEV
+	help
+	  Driver for the Sasem OnAir Remocon-V or Dign HV5 HTPC IR/VFD Module
+
+config LIRC_SERIAL
+	tristate "Homebrew Serial Port Receiver"
+	depends on LIRC_DEV
+	help
+	  Driver for Homebrew Serial Port Receivers
+
+config LIRC_SERIAL_TRANSMITTER
+	bool "Serial Port Transmitter"
+	default y
+	depends on LIRC_SERIAL
+	help
+	  Serial Port Transmitter support
+
+config LIRC_SIR
+	tristate "Built-in SIR IrDA port"
+	depends on LIRC_DEV
+	help
+	  Driver for the SIR IrDA port
+
+config LIRC_STREAMZAP
+	tristate "Streamzap PC Receiver"
+	depends on LIRC_DEV
+	help
+	  Driver for the Streamzap PC Receiver
+
+config LIRC_TTUSBIR
+	tristate "Technotrend USB IR Receiver"
+	depends on LIRC_DEV && USB
+	help
+	  Driver for the Technotrend USB IR Receiver
+
+config LIRC_ZILOG
[...15408 lines suppressed...]
+		ir->task = kthread_run(lirc_thread, ir, "lirc_zilog");
+		if (IS_ERR(ir->task)) {
+			ret = PTR_ERR(ir->task);
+			zilog_error("lirc_register_driver: cannot run "
+				    "poll thread %d\n", ret);
+			goto err;
+		}
+		wait_for_completion(&tn);
+		ir->t_notify = NULL;
+	}
+
+	/* initialise TX device */
+	memcpy(&ir->c_tx, &client_template, sizeof(struct i2c_client));
+	if (have_tx) {
+		/* I2C attach to device */
+		ir->c_tx.addr = 0x70;
+		strncpy(ir->c_tx.name, "Zilog/Hauppauge TX", I2C_NAME_SIZE);
+		ret = i2c_attach(&ir->c_tx, ir);
+		if (ret != 0)
+			goto err;
+	}
+
+	/* set lirc_dev stuff */
+	ir->l.code_length = 13;
+	ir->l.rbuf	  = &ir->buf;
+	ir->l.fops	= &lirc_fops;
+	ir->l.data	= ir;
+	ir->l.minor       = minor;
+	ir->l.sample_rate = 0;
+
+	/* register with lirc */
+	ir->l.minor = lirc_register_driver(&ir->l);
+	if (ir->l.minor < 0 || ir->l.minor >= MAX_IRCTL_DEVICES) {
+		zilog_error("ir_attach: \"minor\" must be between 0 and %d "
+			    "(%d)!\n", MAX_IRCTL_DEVICES-1, ir->l.minor);
+		ret = -EBADRQC;
+		goto err;
+	}
+
+	/* store this for getting back in open() later on */
+	ir_devices[ir->l.minor] = ir;
+
+	/*
+	 * if we have the tx device, load the 'firmware'.  We do this
+	 * after registering with lirc as otherwise hotplug seems to take
+	 * 10s to create the lirc device.
+	 */
+	if (have_tx) {
+		/* Special TX init */
+		ret = tx_init(ir);
+		if (ret != 0)
+			goto err;
+	}
+	return 0;
+
+err:
+	/* undo everything, hopefully... */
+	if (ir->c_rx.addr)
+		ir_remove(&ir->c_rx);
+	if (ir->c_tx.addr)
+		ir_remove(&ir->c_tx);
+	return ret;
+}
+
+static int ir_remove(struct i2c_client *client)
+{
+	struct IR *ir = i2c_get_clientdata(client);
+	mutex_lock(&ir->lock);
+
+	if (client == &ir->c_rx) {
+		DECLARE_COMPLETION(tn);
+		DECLARE_COMPLETION(tn2);
+
+		/* end up polling thread */
+		if (ir->task && !IS_ERR(ir->task)) {
+			ir->t_notify = &tn;
+			ir->t_notify2 = &tn2;
+			ir->shutdown = 1;
+			wake_up_process(ir->task);
+			complete(&tn2);
+			wait_for_completion(&tn);
+			ir->t_notify = NULL;
+			ir->t_notify2 = NULL;
+		}
+
+	} else {
+		mutex_unlock(&ir->lock);
+		zilog_error("%s: detached from something we didn't "
+			    "attach to\n", __func__);
+		return -ENODEV;
+	}
+
+	--ir->devs;
+	if (ir->devs < 0) {
+		mutex_unlock(&ir->lock);
+		zilog_error("%s: invalid device count\n", __func__);
+		return -ENODEV;
+	} else if (ir->devs == 0) {
+		/* unregister lirc driver */
+		if (ir->l.minor >= 0 && ir->l.minor < MAX_IRCTL_DEVICES) {
+			lirc_unregister_driver(ir->l.minor);
+			ir_devices[ir->l.minor] = NULL;
+		}
+
+		/* free memory */
+		lirc_buffer_free(&ir->buf);
+		mutex_unlock(&ir->lock);
+		kfree(ir);
+		return 0;
+	}
+	mutex_unlock(&ir->lock);
+	return 0;
+}
+
+static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+	struct i2c_adapter *adap = client->adapter;
+	char buf;
+
+	if (adap->id == I2C_HW_B_BT848 ||
+#ifdef I2C_HW_B_HDPVR
+	    adap->id == I2C_HW_B_HDPVR ||
+#endif
+	    adap->id == I2C_HW_B_CX2341X) {
+		int have_rx = 0, have_tx = 0;
+
+		/*
+		 * The external IR receiver is at i2c address 0x71.
+		 * The IR transmitter is at 0x70.
+		 */
+		client->addr = 0x70;
+
+		if (!disable_rx) {
+			if (i2c_master_recv(client, &buf, 1) == 1)
+				have_rx = 1;
+			dprintk("probe 0x70 @ %s: %s\n",
+				adap->name,
+				have_rx ? "yes" : "no");
+		}
+
+		if (!disable_tx) {
+			client->addr = 0x71;
+			if (i2c_master_recv(client, &buf, 1) == 1)
+				have_tx = 1;
+			dprintk("probe 0x71 @ %s: %s\n",
+				adap->name,
+				have_tx ? "yes" : "no");
+		}
+
+		if (have_rx || have_tx)
+			return ir_attach(adap, have_rx, have_tx);
+		else
+			zilog_error("%s: no devices found\n", adap->name);
+	}
+
+	return 0;
+}
+
+static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg)
+{
+	/* nothing */
+	return 0;
+}
+
+static int __init zilog_init(void)
+{
+	mutex_init(&tx_data_lock);
+	request_module("firmware_class");
+	i2c_add_driver(&driver);
+	return 0;
+}
+
+static void __exit zilog_exit(void)
+{
+	i2c_del_driver(&driver);
+	/* if loaded */
+	fw_unload();
+}
+
+module_init(zilog_init);
+module_exit(zilog_exit);
+
+MODULE_DESCRIPTION("Zilog/Hauppauge infrared transmitter driver (i2c stack)");
+MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, "
+	      "Ulrich Mueller, Stefan Jahn, Jerome Brock, Mark Weaver");
+MODULE_LICENSE("GPL");
+/* for compat with old name, which isn't all that accurate anymore */
+MODULE_ALIAS("lirc_pvr150");
+
+module_param(minor, int, 0444);
+MODULE_PARM_DESC(minor, "Preferred minor device number");
+
+module_param(debug, bool, 0644);
+MODULE_PARM_DESC(debug, "Enable debugging messages");
+
+module_param(disable_rx, bool, 0644);
+MODULE_PARM_DESC(disable_rx, "Disable the IR receiver device");
+
+module_param(disable_tx, bool, 0644);
+MODULE_PARM_DESC(disable_tx, "Disable the IR transmitter device");


--- NEW FILE patch-2.6.31-rc8-git2.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBKnRA2yGugalF9Dw4RAloiAJ9bTv62NKVqJomI1RZifqbpGJ+FYgCfQVBT
on7r6znNdTxyK09vneVQsdI=
=rRWa
-----END PGP SIGNATURE-----


--- NEW FILE patch-2.6.31-rc8.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBKlzPryGugalF9Dw4RArpYAJ4u8zU9zDifKaTMyyviHw/5C1V5xgCfdcz5
91kW/e8e04xUISC11nA0zd0=
=M4EK
-----END PGP SIGNATURE-----

v4l-dvb-fix-cx25840-firmware-loading.patch:
 cx25840-firmware.c |   37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

--- NEW FILE v4l-dvb-fix-cx25840-firmware-loading.patch ---
# HG changeset patch
# User Hans Verkuil <hverkuil at xs4all.nl>
# Date 1251752272 -7200
# Node ID 36a81289010d614758a64bd757ee37c8c154ad4b
# Parent  f69cb015dc77f8893f5018afff1e60f5b4ea50af
cx25840: fix determining the firmware name

From: Hans Verkuil <hverkuil at xs4all.nl>

Depending on the model there are three different firmwares to choose from.
Unfortunately if a cx23885 is loaded first, then the global firmware name
is overwritten with that firmware and if ivtv is loaded next, then it
tries to load the wrong firmware. In addition, the original approach would
also overwrite any firmware that the user specified explicitly.

Priority: normal

Signed-off-by: Hans Verkuil <hverkuil at xs4all.nl>
CC: Jarod Wilson <jarod at wilsonet.com>

Trivial backport from v4l-dvb hg tip to 2.6.31

Signed-off-by: Jarod Wilson <jarod at redhat.com>

---

 drivers/media/video/cx25840/cx25840-firmware.c |   37 ++++++++++++++---------
 1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
index 0df53b0..006ce16 100644
--- a/drivers/media/video/cx25840/cx25840-firmware.c
+++ b/drivers/media/video/cx25840/cx25840-firmware.c
@@ -23,10 +23,6 @@
 
 #include "cx25840-core.h"
 
-#define FWFILE "v4l-cx25840.fw"
-#define FWFILE_CX23885 "v4l-cx23885-avcore-01.fw"
-#define FWFILE_CX231XX "v4l-cx231xx-avcore-01.fw"
-
 /*
  * Mike Isely <isely at pobox.com> - The FWSEND parameter controls the
  * size of the firmware chunks sent down the I2C bus to the chip.
@@ -40,11 +36,11 @@
 
 #define FWDEV(x) &((x)->dev)
 
-static char *firmware = FWFILE;
+static char *firmware = "";
 
 module_param(firmware, charp, 0444);
 
-MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]");
+MODULE_PARM_DESC(firmware, "Firmware image to load");
 
 static void start_fw_load(struct i2c_client *client)
 {
@@ -65,6 +61,19 @@ static void end_fw_load(struct i2c_client *client)
 	cx25840_write(client, 0x803, 0x03);
 }
 
+static const char *get_fw_name(struct i2c_client *client)
+{
+	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
+
+	if (firmware[0])
+		return firmware;
+	if (state->is_cx23885)
+		return "v4l-cx23885-avcore-01.fw";
+	if (state->is_cx231xx)
+		return "v4l-cx231xx-avcore-01.fw";
+	return "v4l-cx25840.fw";
+}
+
 static int check_fw_load(struct i2c_client *client, int size)
 {
 	/* DL_ADDR_HB DL_ADDR_LB */
@@ -72,11 +81,13 @@ static int check_fw_load(struct i2c_client *client, int size)
 	s |= cx25840_read(client, 0x800);
 
 	if (size != s) {
-		v4l_err(client, "firmware %s load failed\n", firmware);
+		v4l_err(client, "firmware %s load failed\n",
+			get_fw_name(client));
 		return -EINVAL;
 	}
 
-	v4l_info(client, "loaded %s firmware (%d bytes)\n", firmware, size);
+	v4l_info(client, "loaded %s firmware (%d bytes)\n",
+		 get_fw_name(client), size);
 	return 0;
 }
 
@@ -96,21 +107,17 @@ int cx25840_loadfw(struct i2c_client *client)
 	const struct firmware *fw = NULL;
 	u8 buffer[FWSEND];
 	const u8 *ptr;
+	const char *fwname = get_fw_name(client);
 	int size, retval;
 	int MAX_BUF_SIZE = FWSEND;
 
-	if (state->is_cx23885)
-		firmware = FWFILE_CX23885;
-	else if (state->is_cx231xx)
-		firmware = FWFILE_CX231XX;
-
 	if ((state->is_cx231xx) && MAX_BUF_SIZE > 16) {
 		v4l_err(client, " Firmware download size changed to 16 bytes max length\n");
 		MAX_BUF_SIZE = 16;  /* cx231xx cannot accept more than 16 bytes at a time */
 	}
 
-	if (request_firmware(&fw, firmware, FWDEV(client)) != 0) {
-		v4l_err(client, "unable to open firmware %s\n", firmware);
+	if (request_firmware(&fw, fwname, FWDEV(client)) != 0) {
+		v4l_err(client, "unable to open firmware %s\n", fwname);
 		return -EINVAL;
 	}
 


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.28
retrieving revision 1.1014.2.29
diff -u -p -r1.1014.2.28 -r1.1014.2.29
--- .cvsignore	26 Aug 2009 19:58:45 -0000	1.1014.2.28
+++ .cvsignore	3 Sep 2009 20:02:36 -0000	1.1014.2.29
@@ -5,5 +5,5 @@ kernel-2.6.*.config
 temp-*
 kernel-2.6.30
 linux-2.6.30.tar.bz2
-patch-2.6.31-rc7.bz2
-patch-2.6.31-rc7-git4.bz2
+patch-2.6.31-rc8.bz2
+patch-2.6.31-rc8-git2.bz2


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.36
retrieving revision 1.238.6.37
diff -u -p -r1.238.6.36 -r1.238.6.37
--- config-generic	26 Aug 2009 19:58:46 -0000	1.238.6.36
+++ config-generic	3 Sep 2009 20:02:36 -0000	1.238.6.37
@@ -1162,7 +1162,7 @@ CONFIG_ATM_NICSTAR=m
 # CONFIG_ATM_NICSTAR_USE_SUNI is not set
 # CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
 # CONFIG_ATM_IA_DEBUG is not set
-# CONFIG_ATM_SOLOS is not set
+CONFIG_ATM_SOLOS=m
 
 CONFIG_RFKILL=m
 CONFIG_RFKILL_INPUT=y
@@ -2247,6 +2247,7 @@ CONFIG_DRM_VIA=m
 # CONFIG_DRM_NOUVEAU is not set
 # CONFIG_DRM_NOUVEAU_KMS is not set
 # CONFIG_DRM_NOUVEAU_BACKLIGHT is not set
+CONFIG_DRM_I2C_CH7006=m
 
 #
 # PCMCIA character devices
@@ -2361,8 +2362,9 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 CONFIG_DVB_BT8XX=m
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_SIANO_SMS1XXX=m
-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_USB_DRV=m
+CONFIG_SMS_SDIO_DRV=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_DVB_USB_DTV5100=m
 CONFIG_DVB_USB_AF9015=m
@@ -4068,4 +4070,3 @@ CONFIG_XEN_GNTDEV=y
 CONFIG_XEN_PCI_PASSTHROUGH=y
 # CONFIG_XEN_PCI_PASSTHROUGH_DEBUG is not set
 # CONFIG_X86_DS_SELFTEST is not set
-# CONFIG_DRM_I2C_CH7006 is not set


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86-generic,v
retrieving revision 1.68.6.19
retrieving revision 1.68.6.20
diff -u -p -r1.68.6.19 -r1.68.6.20
--- config-x86-generic	24 Aug 2009 20:17:11 -0000	1.68.6.19
+++ config-x86-generic	3 Sep 2009 20:02:36 -0000	1.68.6.20
@@ -115,7 +115,7 @@ CONFIG_PCMCIA_FDOMAIN=m
 CONFIG_SCSI_FUTURE_DOMAIN=m
 CONFIG_SCSI_ADVANSYS=m
 
-# CONFIG_CC_STACKPROTECTOR is not set
+CONFIG_CC_STACKPROTECTOR=y
 
 CONFIG_SECCOMP=y
 

drm-intel-next.patch:
 0 files changed

Index: drm-intel-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-intel-next.patch,v
retrieving revision 1.4.6.6
retrieving revision 1.4.6.7
diff -u -p -r1.4.6.6 -r1.4.6.7
--- drm-intel-next.patch	26 Aug 2009 19:58:46 -0000	1.4.6.6
+++ drm-intel-next.patch	3 Sep 2009 20:02:36 -0000	1.4.6.7
@@ -1,362 +1 @@
-diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
-index 4cf8e2e..d129497 100644
---- a/drivers/gpu/drm/i915/intel_crt.c
-+++ b/drivers/gpu/drm/i915/intel_crt.c
-@@ -537,6 +537,10 @@ void intel_crt_init(struct drm_device *dev)
- 	}
- 
- 	intel_output->type = INTEL_OUTPUT_ANALOG;
-+	intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
-+				   (1 << INTEL_ANALOG_CLONE_BIT) |
-+				   (1 << INTEL_SDVO_LVDS_CLONE_BIT);
-+	intel_output->crtc_mask = (1 << 0) | (1 << 1);
- 	connector->interlace_allowed = 0;
- 	connector->doublescan_allowed = 0;
- 
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index d6fce21..3fadb53 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -666,7 +666,7 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
- 	intel_clock_t clock;
- 	int err = target;
- 
--	if (IS_I9XX(dev) && intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
-+	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
- 	    (I915_READ(LVDS)) != 0) {
- 		/*
- 		 * For LVDS, if the panel is on, just rely on its current
-@@ -2396,7 +2396,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
- 		if (is_sdvo) {
- 			dpll |= DPLL_DVO_HIGH_SPEED;
- 			sdvo_pixel_multiply = adjusted_mode->clock / mode->clock;
--			if (IS_I945G(dev) || IS_I945GM(dev))
-+			if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
- 				dpll |= (sdvo_pixel_multiply - 1) << SDVO_MULTIPLIER_SHIFT_HIRES;
- 			else if (IS_IGDNG(dev))
- 				dpll |= (sdvo_pixel_multiply - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
-@@ -3170,7 +3170,7 @@ static int intel_connector_clones(struct drm_device *dev, int type_mask)
- 
-         list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
- 		struct intel_output *intel_output = to_intel_output(connector);
--		if (type_mask & (1 << intel_output->type))
-+		if (type_mask & intel_output->clone_mask)
- 			index_mask |= (1 << entry);
- 		entry++;
- 	}
-@@ -3218,30 +3218,30 @@ static void intel_setup_outputs(struct drm_device *dev)
- 			intel_dp_init(dev, PCH_DP_D);
- 
- 	} else if (IS_I9XX(dev)) {
--		int found;
--		u32 reg;
-+		bool found = false;
- 
- 		if (I915_READ(SDVOB) & SDVO_DETECTED) {
- 			found = intel_sdvo_init(dev, SDVOB);
- 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
- 				intel_hdmi_init(dev, SDVOB);
-+
- 			if (!found && SUPPORTS_INTEGRATED_DP(dev))
- 				intel_dp_init(dev, DP_B);
- 		}
- 
- 		/* Before G4X SDVOC doesn't have its own detect register */
--		if (IS_G4X(dev))
--			reg = SDVOC;
--		else
--			reg = SDVOB;
- 
--		if (I915_READ(reg) & SDVO_DETECTED) {
-+		if (I915_READ(SDVOB) & SDVO_DETECTED)
- 			found = intel_sdvo_init(dev, SDVOC);
--			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
-+
-+		if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) {
-+
-+			if (SUPPORTS_INTEGRATED_HDMI(dev))
- 				intel_hdmi_init(dev, SDVOC);
--			if (!found && SUPPORTS_INTEGRATED_DP(dev))
-+			if (SUPPORTS_INTEGRATED_DP(dev))
- 				intel_dp_init(dev, DP_C);
- 		}
-+
- 		if (SUPPORTS_INTEGRATED_DP(dev) && (I915_READ(DP_D) & DP_DETECTED))
- 			intel_dp_init(dev, DP_D);
- 	} else
-@@ -3253,51 +3253,10 @@ static void intel_setup_outputs(struct drm_device *dev)
- 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
- 		struct intel_output *intel_output = to_intel_output(connector);
- 		struct drm_encoder *encoder = &intel_output->enc;
--		int crtc_mask = 0, clone_mask = 0;
- 
--		/* valid crtcs */
--		switch(intel_output->type) {
--		case INTEL_OUTPUT_HDMI:
--			crtc_mask = ((1 << 0)|
--				     (1 << 1));
--			clone_mask = ((1 << INTEL_OUTPUT_HDMI));
--			break;
--		case INTEL_OUTPUT_DVO:
--		case INTEL_OUTPUT_SDVO:
--			crtc_mask = ((1 << 0)|
--				     (1 << 1));
--			clone_mask = ((1 << INTEL_OUTPUT_ANALOG) |
--				      (1 << INTEL_OUTPUT_DVO) |
--				      (1 << INTEL_OUTPUT_SDVO));
--			break;
--		case INTEL_OUTPUT_ANALOG:
--			crtc_mask = ((1 << 0)|
--				     (1 << 1));
--			clone_mask = ((1 << INTEL_OUTPUT_ANALOG) |
--				      (1 << INTEL_OUTPUT_DVO) |
--				      (1 << INTEL_OUTPUT_SDVO));
--			break;
--		case INTEL_OUTPUT_LVDS:
--			crtc_mask = (1 << 1);
--			clone_mask = (1 << INTEL_OUTPUT_LVDS);
--			break;
--		case INTEL_OUTPUT_TVOUT:
--			crtc_mask = ((1 << 0) |
--				     (1 << 1));
--			clone_mask = (1 << INTEL_OUTPUT_TVOUT);
--			break;
--		case INTEL_OUTPUT_DISPLAYPORT:
--			crtc_mask = ((1 << 0) |
--				     (1 << 1));
--			clone_mask = (1 << INTEL_OUTPUT_DISPLAYPORT);
--			break;
--		case INTEL_OUTPUT_EDP:
--			crtc_mask = (1 << 1);
--			clone_mask = (1 << INTEL_OUTPUT_EDP);
--			break;
--		}
--		encoder->possible_crtcs = crtc_mask;
--		encoder->possible_clones = intel_connector_clones(dev, clone_mask);
-+		encoder->possible_crtcs = intel_output->crtc_mask;
-+		encoder->possible_clones = intel_connector_clones(dev,
-+						intel_output->clone_mask);
- 	}
- }
- 
-diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
-index a6ff15a..f2afc4a 100644
---- a/drivers/gpu/drm/i915/intel_dp.c
-+++ b/drivers/gpu/drm/i915/intel_dp.c
-@@ -1254,6 +1254,18 @@ intel_dp_init(struct drm_device *dev, int output_reg)
- 	else
- 		intel_output->type = INTEL_OUTPUT_DISPLAYPORT;
- 
-+	if (output_reg == DP_B)
-+		intel_output->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);
-+	else if (output_reg == DP_C)
-+		intel_output->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
-+	else if (output_reg == DP_D)
-+		intel_output->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
-+
-+	if (IS_eDP(intel_output)) {
-+		intel_output->crtc_mask = (1 << 1);
-+		intel_output->clone_mask = (1 << INTEL_OUTPUT_EDP);
-+	} else
-+		intel_output->crtc_mask = (1 << 0) | (1 << 1);
- 	connector->interlace_allowed = true;
- 	connector->doublescan_allowed = 0;
- 
-diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
-index d6f92ea..25aa6fa 100644
---- a/drivers/gpu/drm/i915/intel_drv.h
-+++ b/drivers/gpu/drm/i915/intel_drv.h
-@@ -57,6 +57,24 @@
- #define INTEL_OUTPUT_DISPLAYPORT 7
- #define INTEL_OUTPUT_EDP 8
- 
-+/* Intel Pipe Clone Bit */
-+#define INTEL_HDMIB_CLONE_BIT 1
-+#define INTEL_HDMIC_CLONE_BIT 2
-+#define INTEL_HDMID_CLONE_BIT 3
-+#define INTEL_HDMIE_CLONE_BIT 4
-+#define INTEL_HDMIF_CLONE_BIT 5
-+#define INTEL_SDVO_NON_TV_CLONE_BIT 6
-+#define INTEL_SDVO_TV_CLONE_BIT 7
-+#define INTEL_SDVO_LVDS_CLONE_BIT 8
-+#define INTEL_ANALOG_CLONE_BIT 9
-+#define INTEL_TV_CLONE_BIT 10
-+#define INTEL_DP_B_CLONE_BIT 11
-+#define INTEL_DP_C_CLONE_BIT 12
-+#define INTEL_DP_D_CLONE_BIT 13
-+#define INTEL_LVDS_CLONE_BIT 14
-+#define INTEL_DVO_TMDS_CLONE_BIT 15
-+#define INTEL_DVO_LVDS_CLONE_BIT 16
-+
- #define INTEL_DVO_CHIP_NONE 0
- #define INTEL_DVO_CHIP_LVDS 1
- #define INTEL_DVO_CHIP_TMDS 2
-@@ -86,6 +104,8 @@ struct intel_output {
- 	bool needs_tv_clock;
- 	void *dev_priv;
- 	void (*hot_plug)(struct intel_output *);
-+	int crtc_mask;
-+	int clone_mask;
- };
- 
- struct intel_crtc {
-diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
-index 13bff20..a4d2606 100644
---- a/drivers/gpu/drm/i915/intel_dvo.c
-+++ b/drivers/gpu/drm/i915/intel_dvo.c
-@@ -435,14 +435,20 @@ void intel_dvo_init(struct drm_device *dev)
- 			continue;
- 
- 		intel_output->type = INTEL_OUTPUT_DVO;
-+		intel_output->crtc_mask = (1 << 0) | (1 << 1);
- 		switch (dvo->type) {
- 		case INTEL_DVO_CHIP_TMDS:
-+			intel_output->clone_mask =
-+				(1 << INTEL_DVO_TMDS_CLONE_BIT) |
-+				(1 << INTEL_ANALOG_CLONE_BIT);
- 			drm_connector_init(dev, connector,
- 					   &intel_dvo_connector_funcs,
- 					   DRM_MODE_CONNECTOR_DVII);
- 			encoder_type = DRM_MODE_ENCODER_TMDS;
- 			break;
- 		case INTEL_DVO_CHIP_LVDS:
-+			intel_output->clone_mask =
-+				(1 << INTEL_DVO_LVDS_CLONE_BIT);
- 			drm_connector_init(dev, connector,
- 					   &intel_dvo_connector_funcs,
- 					   DRM_MODE_CONNECTOR_LVDS);
-diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
-index 1842290..fa304e1 100644
---- a/drivers/gpu/drm/i915/intel_hdmi.c
-+++ b/drivers/gpu/drm/i915/intel_hdmi.c
-@@ -230,22 +230,28 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
- 
- 	connector->interlace_allowed = 0;
- 	connector->doublescan_allowed = 0;
-+	intel_output->crtc_mask = (1 << 0) | (1 << 1);
- 
- 	/* Set up the DDC bus. */
--	if (sdvox_reg == SDVOB)
-+	if (sdvox_reg == SDVOB) {
-+		intel_output->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
- 		intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "HDMIB");
--	else if (sdvox_reg == SDVOC)
-+	} else if (sdvox_reg == SDVOC) {
-+		intel_output->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
- 		intel_output->ddc_bus = intel_i2c_create(dev, GPIOD, "HDMIC");
--	else if (sdvox_reg == HDMIB)
-+	} else if (sdvox_reg == HDMIB) {
-+		intel_output->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
- 		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOE,
- 								"HDMIB");
--	else if (sdvox_reg == HDMIC)
-+	} else if (sdvox_reg == HDMIC) {
-+		intel_output->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT);
- 		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOD,
- 								"HDMIC");
--	else if (sdvox_reg == HDMID)
-+	} else if (sdvox_reg == HDMID) {
-+		intel_output->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT);
- 		intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOF,
- 								"HDMID");
--
-+	}
- 	if (!intel_output->ddc_bus)
- 		goto err_connector;
- 
-diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
-index 3f445a8..8df02ef 100644
---- a/drivers/gpu/drm/i915/intel_lvds.c
-+++ b/drivers/gpu/drm/i915/intel_lvds.c
-@@ -916,6 +916,8 @@ void intel_lvds_init(struct drm_device *dev)
- 	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);
- 	intel_output->type = INTEL_OUTPUT_LVDS;
- 
-+	intel_output->clone_mask = (1 << INTEL_LVDS_CLONE_BIT);
-+	intel_output->crtc_mask = (1 << 1);
- 	drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs);
- 	drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs);
- 	connector->display_info.subpixel_order = SubPixelHorizontalRGB;
-diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
-index 5371d93..d3b74ba 100644
---- a/drivers/gpu/drm/i915/intel_sdvo.c
-+++ b/drivers/gpu/drm/i915/intel_sdvo.c
-@@ -1458,7 +1458,7 @@ intel_sdvo_multifunc_encoder(struct intel_output *intel_output)
- 		(SDVO_OUTPUT_RGB0 | SDVO_OUTPUT_RGB1))
- 		caps++;
- 	if (sdvo_priv->caps.output_flags &
--		(SDVO_OUTPUT_SVID0 | SDVO_OUTPUT_SVID0))
-+		(SDVO_OUTPUT_SVID0 | SDVO_OUTPUT_SVID1))
- 		caps++;
- 	if (sdvo_priv->caps.output_flags &
- 		(SDVO_OUTPUT_CVBS0 | SDVO_OUTPUT_CVBS1))
-@@ -1967,6 +1967,9 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
- 			intel_sdvo_set_colorimetry(intel_output,
- 						   SDVO_COLORIMETRY_RGB256);
- 			connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
-+			intel_output->clone_mask =
-+					(1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
-+					(1 << INTEL_ANALOG_CLONE_BIT);
- 		}
- 	} else if (flags & SDVO_OUTPUT_SVID0) {
- 
-@@ -1975,11 +1978,14 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
- 		connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;
- 		sdvo_priv->is_tv = true;
- 		intel_output->needs_tv_clock = true;
-+		intel_output->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;
- 	} else if (flags & SDVO_OUTPUT_RGB0) {
- 
- 		sdvo_priv->controlled_output = SDVO_OUTPUT_RGB0;
- 		encoder->encoder_type = DRM_MODE_ENCODER_DAC;
- 		connector->connector_type = DRM_MODE_CONNECTOR_VGA;
-+		intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
-+					(1 << INTEL_ANALOG_CLONE_BIT);
- 	} else if (flags & SDVO_OUTPUT_RGB1) {
- 
- 		sdvo_priv->controlled_output = SDVO_OUTPUT_RGB1;
-@@ -1991,12 +1997,16 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
- 		encoder->encoder_type = DRM_MODE_ENCODER_LVDS;
- 		connector->connector_type = DRM_MODE_CONNECTOR_LVDS;
- 		sdvo_priv->is_lvds = true;
-+		intel_output->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) |
-+					(1 << INTEL_SDVO_LVDS_CLONE_BIT);
- 	} else if (flags & SDVO_OUTPUT_LVDS1) {
- 
- 		sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS1;
- 		encoder->encoder_type = DRM_MODE_ENCODER_LVDS;
- 		connector->connector_type = DRM_MODE_CONNECTOR_LVDS;
- 		sdvo_priv->is_lvds = true;
-+		intel_output->clone_mask = (1 << INTEL_ANALOG_CLONE_BIT) |
-+					(1 << INTEL_SDVO_LVDS_CLONE_BIT);
- 	} else {
- 
- 		unsigned char bytes[2];
-@@ -2009,6 +2019,7 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
- 				  bytes[0], bytes[1]);
- 		ret = false;
- 	}
-+	intel_output->crtc_mask = (1 << 0) | (1 << 1);
- 
- 	if (ret && registered)
- 		ret = drm_sysfs_connector_add(connector) == 0 ? true : false;
-diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
-index da4ab4d..2fbe13a 100644
---- a/drivers/gpu/drm/i915/intel_tv.c
-+++ b/drivers/gpu/drm/i915/intel_tv.c
-@@ -1718,6 +1718,7 @@ intel_tv_init(struct drm_device *dev)
- 	if (!intel_output) {
- 		return;
- 	}
-+
- 	connector = &intel_output->base;
- 
- 	drm_connector_init(dev, connector, &intel_tv_connector_funcs,
-@@ -1729,6 +1730,7 @@ intel_tv_init(struct drm_device *dev)
- 	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);
- 	tv_priv = (struct intel_tv_priv *)(intel_output + 1);
- 	intel_output->type = INTEL_OUTPUT_TVOUT;
-+	intel_output->clone_mask = (1 << INTEL_TV_CLONE_BIT);
- 	intel_output->enc.possible_crtcs = ((1 << 0) | (1 << 1));
- 	intel_output->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
- 	intel_output->dev_priv = tv_priv;
+empty

drm-intel-pm.patch:
 i915_drv.c      |   15 +
 i915_drv.h      |   14 +
 i915_gem.c      |    8 
 i915_reg.h      |   22 ++
 intel_display.c |  484 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 intel_drv.h     |    4 
 6 files changed, 512 insertions(+), 35 deletions(-)

Index: drm-intel-pm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-intel-pm.patch,v
retrieving revision 1.4.2.2
retrieving revision 1.4.2.3
diff -u -p -r1.4.2.2 -r1.4.2.3
--- drm-intel-pm.patch	5 Aug 2009 23:00:10 -0000	1.4.2.2
+++ drm-intel-pm.patch	3 Sep 2009 20:02:36 -0000	1.4.2.3
@@ -5,7 +5,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  unsigned int i915_fbpercrtc = 0;
  module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
  
-+unsigned int i915_powersave = 1;
++unsigned int i915_powersave = 0;
 +module_param_named(powersave, i915_powersave, int, 0400);
 +
 +unsigned int i915_lvdsclock = 1;

hdpvr-ir-enable.patch:
 Makefile     |    4 +---
 hdpvr-core.c |    7 +++----
 hdpvr-i2c.c  |   49 +++++++++++++++++++++++++++++++++++++++++--------
 3 files changed, 45 insertions(+), 15 deletions(-)

Index: hdpvr-ir-enable.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/hdpvr-ir-enable.patch,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.3
diff -u -p -r1.2.2.2 -r1.2.2.3
--- hdpvr-ir-enable.patch	10 Jul 2009 19:04:29 -0000	1.2.2.2
+++ hdpvr-ir-enable.patch	3 Sep 2009 20:02:36 -0000	1.2.2.3
@@ -1,29 +1,62 @@
 From http://hg.jannau.net/hdpvr/, pending v4l-dvb pull request
 
 ---
- drivers/media/video/hdpvr/hdpvr-core.c |    3 +-
- drivers/media/video/hdpvr/hdpvr-i2c.c  |   36 +++++++++++++++++++++++++------
- 2 files changed, 30 insertions(+), 9 deletions(-)
+ drivers/media/video/hdpvr/Makefile     |    4 +--
+ drivers/media/video/hdpvr/hdpvr-core.c |    7 ++--
+ drivers/media/video/hdpvr/hdpvr-i2c.c  |   49 ++++++++++++++++++++++++++-----
+ 3 files changed, 45 insertions(+), 15 deletions(-)
 
+diff --git a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
+index e0230fc..79ad2e1 100644
+--- a/drivers/media/video/hdpvr/Makefile
++++ b/drivers/media/video/hdpvr/Makefile
+@@ -1,6 +1,4 @@
+-hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o
+-
+-hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
++hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-i2c.o hdpvr-video.o
+ 
+ obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o
+ 
 diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
-index 188bd5a..878d1e5 100644
+index 188bd5a..9fa3d8d 100644
 --- a/drivers/media/video/hdpvr/hdpvr-core.c
 +++ b/drivers/media/video/hdpvr/hdpvr-core.c
-@@ -363,8 +363,7 @@ static int hdpvr_probe(struct usb_interface *interface,
+@@ -362,9 +362,8 @@ static int hdpvr_probe(struct usb_interface *interface,
+ 		goto error;
  	}
  
- #ifdef CONFIG_I2C
+-#ifdef CONFIG_I2C
 -	/* until i2c is working properly */
 -	retval = 0; /* hdpvr_register_i2c_adapter(dev); */
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 +	retval = hdpvr_register_i2c_adapter(dev);
  	if (retval < 0) {
  		v4l2_err(&dev->v4l2_dev, "registering i2c adapter failed\n");
  		goto error;
+@@ -414,7 +413,7 @@ static void hdpvr_disconnect(struct usb_interface *interface)
+ 	mutex_unlock(&dev->io_mutex);
+ 
+ 	/* deregister I2C adapter */
+-#ifdef CONFIG_I2C
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+ 	mutex_lock(&dev->i2c_mutex);
+ 	if (dev->i2c_adapter)
+ 		i2c_del_adapter(dev->i2c_adapter);
 diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
-index c4b5d15..1c01b6c 100644
+index c4b5d15..bc33607 100644
 --- a/drivers/media/video/hdpvr/hdpvr-i2c.c
 +++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
-@@ -22,7 +22,7 @@
+@@ -10,6 +10,8 @@
+  *
+  */
+ 
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++
+ #include <linux/i2c.h>
+ 
+ #include "hdpvr.h"
+@@ -22,7 +24,7 @@
  #define REQTYPE_I2C_WRITE_STATT	0xd0
  
  static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
@@ -32,7 +65,7 @@ index c4b5d15..1c01b6c 100644
  {
  	int ret;
  	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -32,7 +32,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
+@@ -32,7 +34,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
  	ret = usb_control_msg(dev->udev,
  			      usb_rcvctrlpipe(dev->udev, 0),
  			      REQTYPE_I2C_READ, CTRL_READ_REQUEST,
@@ -41,7 +74,7 @@ index c4b5d15..1c01b6c 100644
  
  	if (ret == len) {
  		memcpy(data, buf, len);
-@@ -46,7 +46,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
+@@ -46,7 +48,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
  }
  
  static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
@@ -50,7 +83,7 @@ index c4b5d15..1c01b6c 100644
  {
  	int ret;
  	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -57,14 +57,14 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
+@@ -57,7 +59,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
  	ret = usb_control_msg(dev->udev,
  			      usb_sndctrlpipe(dev->udev, 0),
  			      REQTYPE_I2C_WRITE, CTRL_WRITE_REQUEST,
@@ -59,15 +92,7 @@ index c4b5d15..1c01b6c 100644
  
  	if (ret < 0)
  		goto error;
- 
- 	ret = usb_control_msg(dev->udev,
- 			      usb_rcvctrlpipe(dev->udev, 0),
--			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
-+			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
- 			      0, 0, buf, 2, 1000);
- 
- 	if (ret == 2)
-@@ -93,10 +93,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
+@@ -93,10 +95,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
  
  		if (msgs[i].flags & I2C_M_RD)
  			retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
@@ -80,7 +105,7 @@ index c4b5d15..1c01b6c 100644
  	}
  
  	mutex_unlock(&dev->i2c_mutex);
-@@ -114,6 +114,26 @@ static struct i2c_algorithm hdpvr_algo = {
+@@ -114,15 +116,39 @@ static struct i2c_algorithm hdpvr_algo = {
  	.functionality = hdpvr_functionality,
  };
  
@@ -107,7 +132,11 @@ index c4b5d15..1c01b6c 100644
  int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
  {
  	struct i2c_adapter *i2c_adap;
-@@ -123,6 +143,8 @@ int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
++	struct i2c_board_info info;
+ 	int retval = -ENOMEM;
++	const unsigned short addr_list[] = { 0x54, I2C_CLIENT_END };
+ 
+ 	i2c_adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
  	if (i2c_adap == NULL)
  		goto error;
  
@@ -116,3 +145,24 @@ index c4b5d15..1c01b6c 100644
  	strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
  		sizeof(i2c_adap->name));
  	i2c_adap->algo  = &hdpvr_algo;
+@@ -135,11 +161,18 @@ int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
+ 
+ 	retval = i2c_add_adapter(i2c_adap);
+ 
+-	if (!retval)
++	if (!retval) {
+ 		dev->i2c_adapter = i2c_adap;
+-	else
++		memset(&info, 0, sizeof(struct i2c_board_info));
++		strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
++		i2c_new_probed_device(&dev->i2c_adapter, &info, addr_list);
++
++	} else {
+ 		kfree(i2c_adap);
++	}
+ 
+ error:
+ 	return retval;
+ }
++
++#endif /* CONFIG_I2C */


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.60
retrieving revision 1.1294.2.61
diff -u -p -r1.1294.2.60 -r1.1294.2.61
--- kernel.spec	26 Aug 2009 20:16:16 -0000	1.1294.2.60
+++ kernel.spec	3 Sep 2009 20:02:36 -0000	1.1294.2.61
@@ -60,9 +60,9 @@ Summary: The Linux kernel
 # The next upstream release sublevel (base_sublevel+1)
 %define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
 # The rc snapshot level
-%define rcrev 7
+%define rcrev 8
 # The git snapshot level
-%define gitrev 4
+%define gitrev 2
 # Set rpm version accordingly
 %define rpmversion 2.6.%{upstream_sublevel}
 %endif
@@ -433,7 +433,7 @@ Summary: The Linux kernel
 # Packages that need to be installed before the kernel is, because the %post
 # scripts use them.
 #
-%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.61-1, kernel-firmware >= %{rpmversion}-%{pkg_release}, /sbin/new-kernel-pkg
+%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.61-1, kernel-firmware >= %{rpmversion}-%{pkg_release}
 
 #
 # This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -449,6 +449,8 @@ Provides: kernel-drm-nouveau = 15\
 Provides: kernel-modeset = 1\
 Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
 Requires(pre): %{kernel_prereq}\
+Requires(post): /sbin/new-kernel-pkg\
+Requires(preun): /sbin/new-kernel-pkg\
 Conflicts: %{kernel_dot_org_conflicts}\
 Conflicts: %{package_conflicts}\
 %{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
@@ -673,14 +675,19 @@ Patch800: linux-2.6-crash-driver.patch
 
 Patch900: linux-2.6-pci-cacheline-sizing.patch
 
-Patch1515: linux-2.6.31-lirc.patch
-Patch1516: lirc_streamzap-buffer-rework.patch
+Patch1515: lirc-2.6.31.patch
 Patch1517: hdpvr-ir-enable.patch
 Patch1518: hid-ignore-all-recent-imon-devices.patch
 
+# virt + ksm patches
 Patch1550: linux-2.6-ksm.patch
 Patch1551: linux-2.6-ksm-kvm.patch
 Patch1552: linux-2.6-ksm-updates.patch
+Patch1553: linux-2.6-ksm-fix-munlock.patch
+Patch1575: linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch
+Patch1576: linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
+Patch1577: linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
+Patch1578: linux-2.6-xen-stack-protector-fix.patch
 
 # nouveau + drm fixes
 Patch1812: drm-next.patch
@@ -689,10 +696,12 @@ Patch1814: drm-nouveau.patch
 Patch1818: drm-i915-resume-force-mode.patch
 Patch1819: drm-intel-big-hammer.patch
 Patch1821: drm-page-flip.patch
-# anholt's tree as of 2009-08-26
+# intel drm is all merged upstream
 Patch1824: drm-intel-next.patch
 Patch1825: drm-intel-pm.patch
 Patch1826: drm-r600-kms.patch
+Patch1827: drm-rv710-ucode-fix.patch
+Patch1828: drm-god-shut-up-about-edid-already.patch
 
 # vga arb
 Patch1900: linux-2.6-vga-arb.patch
@@ -713,6 +722,7 @@ Patch2899: linux-2.6-v4l-dvb-fixes.patch
 Patch2900: linux-2.6-v4l-dvb-update.patch
 Patch2901: linux-2.6-v4l-dvb-experimental.patch
 Patch2903: linux-2.6-revert-dvb-net-kabi-change.patch
+Patch2904: v4l-dvb-fix-cx25840-firmware-loading.patch
 
 # fs fixes
 
@@ -726,11 +736,6 @@ Patch11010: via-hwmon-temp-sensor.patch
 Patch12010: linux-2.6-dell-laptop-rfkill-fix.patch
 Patch12011: linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
 
-# fix xen boot
-Patch12020: xen-fb-probe-fix.patch
-
-Patch90000: allow-disabling-ima.diff
-
 Patch19997: xen.pvops.pre.patch
 Patch19998: xen.pvops.patch
 Patch19999: xen.pvops.post.patch
@@ -772,6 +777,7 @@ glibc package.
 %package firmware
 Summary: Firmware files used by the Linux kernel
 Group: Development/System
+Buildarch: noarch
 # This is... complicated.
 # Look at the WHENCE file.
 License: GPL+ and GPLv2+ and MIT and Redistributable, no modification permitted
@@ -1295,19 +1301,24 @@ ApplyPatch linux-2.6-crash-driver.patch
 ApplyPatch linux-2.6-pci-cacheline-sizing.patch
 
 # http://www.lirc.org/
-ApplyPatch linux-2.6.31-lirc.patch
-# should be a short-lived patch, hopefully fixing bz#508952 w/o breaking anything else...
-ApplyPatch lirc_streamzap-buffer-rework.patch
+ApplyPatch lirc-2.6.31.patch
 # enable IR receiver on Hauppauge HD PVR (v4l-dvb merge pending)
 ApplyPatch hdpvr-ir-enable.patch
 # tell usbhid to ignore all imon devices (sent upstream 2009.07.31)
 ApplyPatch hid-ignore-all-recent-imon-devices.patch
 
 # Add kernel KSM support
-#ApplyPatch linux-2.6-ksm.patch
-#ApplyPatch linux-2.6-ksm-updates.patch
+ApplyPatch linux-2.6-ksm.patch
+ApplyPatch linux-2.6-ksm-updates.patch
+ApplyPatch linux-2.6-ksm-fix-munlock.patch
 # Optimize KVM for KSM support
-#ApplyPatch linux-2.6-ksm-kvm.patch
+ApplyPatch linux-2.6-ksm-kvm.patch
+
+# Assorted Virt Fixes
+ApplyPatch linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch
+ApplyPatch linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
+ApplyPatch linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
+#ApplyPatch linux-2.6-xen-stack-protector-fix.patch
 
 # Fix block I/O errors in KVM
 ApplyPatch linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
@@ -1317,6 +1328,8 @@ ApplyPatch linux-2.6-e1000-ich9.patch
 # Nouveau DRM + drm fixes
 ApplyPatch drm-next.patch
 ApplyPatch drm-r600-kms.patch
+ApplyPatch drm-rv710-ucode-fix.patch
+ApplyPatch drm-god-shut-up-about-edid-already.patch
 
 ApplyPatch drm-nouveau.patch
 # pm broken on my thinkpad t60p - airlied
@@ -1324,7 +1337,7 @@ ApplyPatch drm-nouveau.patch
 ApplyPatch drm-i915-resume-force-mode.patch
 ApplyPatch drm-intel-big-hammer.patch
 ApplyPatch drm-page-flip.patch
-ApplyPatch drm-intel-next.patch
+ApplyOptionalPatch drm-intel-next.patch
 ApplyPatch drm-intel-pm.patch
 
 # VGA arb + drm
@@ -1343,14 +1356,10 @@ ApplyPatch linux-2.6-silence-acpi-blackl
 #ApplyPatch linux-2.6-v4l-dvb-update.patch
 #ApplyPatch linux-2.6-v4l-dvb-experimental.patch
 #ApplyPatch linux-2.6-revert-dvb-net-kabi-change.patch
+ApplyPatch v4l-dvb-fix-cx25840-firmware-loading.patch
 
 # Patches headed upstream
 
-# fix xen boot
-ApplyPatch xen-fb-probe-fix.patch
-
-ApplyPatch allow-disabling-ima.diff
-
 ApplyPatch xen.pvops.pre.patch
 ApplyPatch xen.pvops.patch
 ApplyPatch xen.pvops.post.patch
@@ -2020,6 +2029,75 @@ fi
 # and build.
 
 %changelog
+* Thu Sep 03 2009 Michael Young <m.a.young at durham.ac.uk>
+- Update pvops patch to try stack protector on i686 again
+
+* Thu Sep 03 2009 Justin M.Forbes <jforbes at redhat.com>
+- Fix xen guest with stack protector. (#508120)
+- Small kvm fixes.
+
+* Wed Sep 02 2009 Adam Jackson <ajax at redhat.com> 2.6.31-0.199.rc8.git2
+- drm-intel-pm.patch: Disable by default, too flickery on too many machines.
+  Enable with i915.powersave=1.
+
+* Wed Sep 02 2009 Dave Jones <davej at redhat.com>
+- Add missing scriptlet dependancy. (#520788)
+
+* Tue Sep 01 2009 Adam Jackson <ajax at redhat.com>
+- Make DRM less chatty about EDID failures.  No one cares.
+
+* Tue Sep 01 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc8-git2
+- Blank out drm-intel-next: entire contents are now upstream.
+
+* Tue Sep 01 2009 Dave Jones <davej at redhat.com>
+- Make firmware buildarch noarch. (Suggested by drago01 on irc)
+
+* Tue Sep 01 2009 Jarod Wilson <jarod at redhat.com>
+- Fix up lirc_zilog to enable functional IR transmit and receive
+  on the Hauppauge HD PVR
+- Fix audio on PVR-500 when used in same system as HVR-1800 (#480728)
+
+* Sun Aug 30 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc8-git1
+- Drop linux-2.6-inotify-accounting.patch, merged upstream.
+
+* Sun Aug 30 2009 Jarod Wilson <jarod at redhat.com>
+- fix lirc_imon oops on older devices w/o tx ctrl ep (#520008)
+
+* Fri Aug 28 2009 Eric Paris <eparis at redhat.com> 2.6.31-0.190.rc8
+- fix inotify length accounting and send inotify events
+
+* Fri Aug 28 2009 David Woodhouse <David.Woodhouse at intel.com>
+- Enable Solos DSL driver
+
+* Fri Aug 28 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc8
+
+* Thu Aug 27 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.185.rc7.git6
+- 2.6.31-rc7-git6
+- Drop patch merged upstream:
+  xen-fb-probe-fix.patch
+
+* Thu Aug 27 2009 Adam Jackson <ajax at redhat.com>
+- drm-rv710-ucode-fix.patch: Treat successful microcode load on RV710 as,
+  you know, success. (#519718)
+
+* Thu Aug 27 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc7-git5
+- Drop patch linux-2.6-ima-leak.patch, now merged upstream.
+
+* Wed Aug 26 2009 Jarod Wilson <jarod at redhat.com>
+- Fix up hdpvr ir enable patch for use w/modular i2c (David Engel)
+
+* Wed Aug 26 2009 Eric Paris <eparis at redhat.com>
+- fix iint_cache leak in IMA code
+  drop the ima=0 patch
+
+* Wed Aug 26 2009 Justin M. Forbes <jforbes at redhat.com>
+- Fix munlock with KSM (#516909)
+- Re-enable KSM
+
 * Wed Aug 26 2009 Michael Young <m.a.young at durham.ac.uk>
 - update pvops again.
 

linux-2.6-ksm-kvm.patch:
 arch/x86/include/asm/kvm_host.h |    1 
 arch/x86/kvm/mmu.c              |   91 ++++++++++++++++++++++++++++++++--------
 arch/x86/kvm/paging_tmpl.h      |   15 +++++-
 virt/kvm/kvm_main.c             |   14 ++++++
 4 files changed, 101 insertions(+), 20 deletions(-)

Index: linux-2.6-ksm-kvm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-ksm-kvm.patch,v
retrieving revision 1.2.6.2
retrieving revision 1.2.6.3
diff -u -p -r1.2.6.2 -r1.2.6.3
--- linux-2.6-ksm-kvm.patch	5 Aug 2009 23:00:16 -0000	1.2.6.2
+++ linux-2.6-ksm-kvm.patch	3 Sep 2009 20:02:37 -0000	1.2.6.3
@@ -22,8 +22,8 @@ directly map pages into its shadow page 
 Signed-off-by: Izik Eidus <ieidus at redhat.com>
 Signed-off-by: Justin M. Forbes <jforbes at redhat.com>
 ---
---- linux-2.6.30.x86_64/arch/x86/include/asm/kvm_host.h	2009-07-23 14:58:56.000000000 -0500
-+++ linux-2.6.30.x86_64-ksm/arch/x86/include/asm/kvm_host.h	2009-07-23 15:00:04.000000000 -0500
+--- linux-2.6.30.x86_64/arch/x86/include/asm/kvm_host.h	2009-08-20 10:37:37.784886414 -0500
++++ linux-2.6.30.x86_64.kvm/arch/x86/include/asm/kvm_host.h	2009-08-20 10:39:33.742641558 -0500
 @@ -796,5 +796,6 @@ asmlinkage void kvm_handle_fault_on_rebo
  int kvm_unmap_hva(struct kvm *kvm, unsigned long hva);
  int kvm_age_hva(struct kvm *kvm, unsigned long hva);
@@ -31,8 +31,8 @@ Signed-off-by: Justin M. Forbes <jforbes
 +void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
  
  #endif /* _ASM_X86_KVM_HOST_H */
---- linux-2.6.30.x86_64/arch/x86/kvm/mmu.c	2009-07-23 14:58:56.000000000 -0500
-+++ linux-2.6.30.x86_64-ksm/arch/x86/kvm/mmu.c	2009-07-23 15:00:04.000000000 -0500
+--- linux-2.6.30.x86_64/arch/x86/kvm/mmu.c	2009-08-20 10:37:37.964887039 -0500
++++ linux-2.6.30.x86_64.kvm/arch/x86/kvm/mmu.c	2009-08-20 10:41:15.231638028 -0500
 @@ -139,6 +139,8 @@ module_param(oos_shadow, bool, 0644);
  #define ACC_USER_MASK    PT_USER_MASK
  #define ACC_ALL          (ACC_EXEC_MASK | ACC_WRITE_MASK | ACC_USER_MASK)
@@ -54,7 +54,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  static gfn_t pse36_gfn_delta(u32 gpte)
  {
  	int shift = 32 - PT32_DIR_PSE36_SHIFT - PAGE_SHIFT;
-@@ -566,9 +573,7 @@ static void rmap_remove(struct kvm *kvm,
+@@ -573,9 +580,7 @@ static void rmap_remove(struct kvm *kvm,
  	if (*spte & shadow_accessed_mask)
  		kvm_set_pfn_accessed(pfn);
  	if (is_writeble_pte(*spte))
@@ -65,7 +65,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  	rmapp = gfn_to_rmap(kvm, sp->gfns[spte - sp->spt], is_large_pte(*spte));
  	if (!*rmapp) {
  		printk(KERN_ERR "rmap_remove: %p %llx 0->BUG\n", spte, *spte);
-@@ -677,7 +682,8 @@ static int rmap_write_protect(struct kvm
+@@ -684,7 +689,8 @@ static int rmap_write_protect(struct kvm
  	return write_protected;
  }
  
@@ -75,7 +75,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  {
  	u64 *spte;
  	int need_tlb_flush = 0;
-@@ -692,8 +698,48 @@ static int kvm_unmap_rmapp(struct kvm *k
+@@ -699,8 +705,48 @@ static int kvm_unmap_rmapp(struct kvm *k
  	return need_tlb_flush;
  }
  
@@ -125,7 +125,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  {
  	int i;
  	int retval = 0;
-@@ -714,11 +760,13 @@ static int kvm_handle_hva(struct kvm *kv
+@@ -721,11 +767,13 @@ static int kvm_handle_hva(struct kvm *kv
  		end = start + (memslot->npages << PAGE_SHIFT);
  		if (hva >= start && hva < end) {
  			gfn_t gfn_offset = (hva - start) >> PAGE_SHIFT;
@@ -141,7 +141,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  		}
  	}
  
-@@ -727,10 +775,16 @@ static int kvm_handle_hva(struct kvm *kv
+@@ -734,10 +782,16 @@ static int kvm_handle_hva(struct kvm *kv
  
  int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
  {
@@ -160,7 +160,14 @@ Signed-off-by: Justin M. Forbes <jforbes
  {
  	u64 *spte;
  	int young = 0;
-@@ -756,7 +810,7 @@ static int kvm_age_rmapp(struct kvm *kvm
+@@ -770,13 +824,13 @@ static void rmap_recycle(struct kvm_vcpu
+ 	gfn = unalias_gfn(vcpu->kvm, gfn);
+ 	rmapp = gfn_to_rmap(vcpu->kvm, gfn, lpage);
+ 
+-	kvm_unmap_rmapp(vcpu->kvm, rmapp);
++	kvm_unmap_rmapp(vcpu->kvm, rmapp, 0);
+ 	kvm_flush_remote_tlbs(vcpu->kvm);
+ }
  
  int kvm_age_hva(struct kvm *kvm, unsigned long hva)
  {
@@ -169,7 +176,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  }
  
  #ifdef MMU_DEBUG
-@@ -1665,7 +1719,7 @@ static int set_spte(struct kvm_vcpu *vcp
+@@ -1686,7 +1740,7 @@ static int set_spte(struct kvm_vcpu *vcp
  		    unsigned pte_access, int user_fault,
  		    int write_fault, int dirty, int largepage,
  		    gfn_t gfn, pfn_t pfn, bool speculative,
@@ -178,7 +185,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  {
  	u64 spte;
  	int ret = 0;
-@@ -1723,6 +1777,8 @@ static int set_spte(struct kvm_vcpu *vcp
+@@ -1744,6 +1798,8 @@ static int set_spte(struct kvm_vcpu *vcp
  				spte &= ~PT_WRITABLE_MASK;
  		}
  	}
@@ -187,7 +194,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  
  	if (pte_access & ACC_WRITE_MASK)
  		mark_page_dirty(vcpu->kvm, gfn);
-@@ -1736,7 +1792,8 @@ static void mmu_set_spte(struct kvm_vcpu
+@@ -1757,7 +1813,8 @@ static void mmu_set_spte(struct kvm_vcpu
  			 unsigned pt_access, unsigned pte_access,
  			 int user_fault, int write_fault, int dirty,
  			 int *ptwrite, int largepage, gfn_t gfn,
@@ -197,7 +204,7 @@ Signed-off-by: Justin M. Forbes <jforbes
  {
  	int was_rmapped = 0;
  	int was_writeble = is_writeble_pte(*shadow_pte);
-@@ -1765,7 +1822,8 @@ static void mmu_set_spte(struct kvm_vcpu
+@@ -1787,7 +1844,8 @@ static void mmu_set_spte(struct kvm_vcpu
  			was_rmapped = 1;
  	}
  	if (set_spte(vcpu, shadow_pte, pte_access, user_fault, write_fault,
@@ -207,17 +214,17 @@ Signed-off-by: Justin M. Forbes <jforbes
  		if (write_fault)
  			*ptwrite = 1;
  		kvm_x86_ops->tlb_flush(vcpu);
-@@ -1782,8 +1840,7 @@ static void mmu_set_spte(struct kvm_vcpu
+@@ -1804,8 +1862,7 @@ static void mmu_set_spte(struct kvm_vcpu
  	page_header_update_slot(vcpu->kvm, shadow_pte, gfn);
  	if (!was_rmapped) {
- 		rmap_add(vcpu, shadow_pte, gfn, largepage);
+ 		rmap_count = rmap_add(vcpu, shadow_pte, gfn, largepage);
 -		if (!is_rmap_pte(*shadow_pte))
 -			kvm_release_pfn_clean(pfn);
 +		kvm_release_pfn_clean(pfn);
+ 		if (rmap_count > RMAP_RECYCLE_THRESHOLD)
+ 			rmap_recycle(vcpu, gfn, largepage);
  	} else {
- 		if (was_writeble)
- 			kvm_release_pfn_dirty(pfn);
-@@ -1813,7 +1870,7 @@ static int __direct_map(struct kvm_vcpu 
+@@ -1837,7 +1894,7 @@ static int __direct_map(struct kvm_vcpu 
  		    || (largepage && iterator.level == PT_DIRECTORY_LEVEL)) {
  			mmu_set_spte(vcpu, iterator.sptep, ACC_ALL, ACC_ALL,
  				     0, write, 1, &pt_write,
@@ -226,8 +233,8 @@ Signed-off-by: Justin M. Forbes <jforbes
  			++vcpu->stat.pf_fixed;
  			break;
  		}
---- linux-2.6.30.x86_64/arch/x86/kvm/paging_tmpl.h	2009-07-23 14:58:56.000000000 -0500
-+++ linux-2.6.30.x86_64-ksm/arch/x86/kvm/paging_tmpl.h	2009-07-23 15:01:49.000000000 -0500
+--- linux-2.6.30.x86_64/arch/x86/kvm/paging_tmpl.h	2009-08-20 10:37:37.966889166 -0500
++++ linux-2.6.30.x86_64.kvm/arch/x86/kvm/paging_tmpl.h	2009-08-20 10:39:33.747636180 -0500
 @@ -266,9 +266,13 @@ static void FNAME(update_pte)(struct kvm
  	if (mmu_notifier_retry(vcpu, vcpu->arch.update_pte.mmu_seq))
  		return;
@@ -275,8 +282,8 @@ Signed-off-by: Justin M. Forbes <jforbes
  	}
  
  	return !nr_present;
---- linux-2.6.30.x86_64/virt/kvm/kvm_main.c	2009-07-23 14:58:58.000000000 -0500
-+++ linux-2.6.30.x86_64-ksm/virt/kvm/kvm_main.c	2009-07-23 15:00:04.000000000 -0500
+--- linux-2.6.30.x86_64/virt/kvm/kvm_main.c	2009-08-20 10:37:45.448886340 -0500
++++ linux-2.6.30.x86_64.kvm/virt/kvm/kvm_main.c	2009-08-20 10:39:33.749636212 -0500
 @@ -859,6 +859,19 @@ static void kvm_mmu_notifier_invalidate_
  
  }

linux-2.6-ksm.patch:
 b/arch/alpha/include/asm/mman.h     |    3 
 b/arch/mips/include/asm/mman.h      |    3 
 b/arch/parisc/include/asm/mman.h    |    3 
 b/arch/xtensa/include/asm/mman.h    |    3 
 b/fs/proc/page.c                    |    5 
 b/include/asm-generic/mman-common.h |    5 
 b/include/linux/ksm.h               |   50 +
 b/include/linux/mm.h                |    1 
 b/include/linux/mmu_notifier.h      |   34 
 b/include/linux/rmap.h              |    6 
 b/include/linux/sched.h             |    7 
 b/kernel/fork.c                     |    8 
 b/mm/Kconfig                        |   11 
 b/mm/Makefile                       |    1 
 b/mm/ksm.c                          |   56 +
 b/mm/madvise.c                      |   41 
 b/mm/memory.c                       |    9 
 b/mm/mmu_notifier.c                 |   22 
 b/mm/mremap.c                       |   14 
 b/mm/rmap.c                         |   23 
 include/linux/ksm.h                 |   29 
 mm/ksm.c                            | 1506 +++++++++++++++++++++++++++++++++++-
 mm/madvise.c                        |   16 
 mm/memory.c                         |    7 
 24 files changed, 1780 insertions(+), 83 deletions(-)

Index: linux-2.6-ksm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-ksm.patch,v
retrieving revision 1.2.6.2
retrieving revision 1.2.6.3
diff -u -p -r1.2.6.2 -r1.2.6.3
--- linux-2.6-ksm.patch	5 Aug 2009 23:00:16 -0000	1.2.6.2
+++ linux-2.6-ksm.patch	3 Sep 2009 20:02:37 -0000	1.2.6.3
@@ -541,14 +541,14 @@ index bd29592..ac312a4 100644
  		struct file *file;
 @@ -425,7 +429,8 @@ static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p)
  	atomic_set(&mm->mm_count, 1);
- 	init_rwsem(&mm->mmap_sem);
+	init_rwsem(&mm->mmap_sem);
  	INIT_LIST_HEAD(&mm->mmlist);
 -	mm->flags = (current->mm) ? current->mm->flags : default_dump_filter;
 +	mm->flags = (current->mm) ?
 +		(current->mm->flags & MMF_INIT_MASK) : default_dump_filter;
- 	mm->oom_adj = (current->mm) ? current->mm->oom_adj : 0;
  	mm->core_state = NULL;
  	mm->nr_ptes = 0;
+	set_mm_counter(mm, file_rss, 0);
 @@ -486,6 +491,7 @@ void mmput(struct mm_struct *mm)
  
  	if (atomic_dec_and_test(&mm->mm_users)) {


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.29
retrieving revision 1.976.2.30
diff -u -p -r1.976.2.29 -r1.976.2.30
--- sources	26 Aug 2009 19:58:49 -0000	1.976.2.29
+++ sources	3 Sep 2009 20:02:38 -0000	1.976.2.30
@@ -1,3 +1,3 @@
 7a80058a6382e5108cdb5554d1609615  linux-2.6.30.tar.bz2
-4b991833a7e19a5b65ba3abcbc9de2e0  patch-2.6.31-rc7.bz2
-8329c25267787e591972e477b113c08b  patch-2.6.31-rc7-git4.bz2
+d7dce63ebb912ddcd7ac7ed580db03e4  patch-2.6.31-rc8.bz2
+81cac9f7aa9cfa526ce4cfedb4e0f739  patch-2.6.31-rc8-git2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.28
retrieving revision 1.888.2.29
diff -u -p -r1.888.2.28 -r1.888.2.29
--- upstream	26 Aug 2009 19:58:49 -0000	1.888.2.28
+++ upstream	3 Sep 2009 20:02:38 -0000	1.888.2.29
@@ -1,3 +1,3 @@
 linux-2.6.30.tar.bz2
-patch-2.6.31-rc7.bz2
-patch-2.6.31-rc7-git4.bz2
+patch-2.6.31-rc8.bz2
+patch-2.6.31-rc8-git2.bz2

xen.pvops.patch:
 arch/x86/Kconfig                           |    4 
 arch/x86/Makefile                          |    2 
 arch/x86/include/asm/agp.h                 |   15 
 arch/x86/include/asm/e820.h                |    2 
 arch/x86/include/asm/i387.h                |    1 
 arch/x86/include/asm/io.h                  |   15 
 arch/x86/include/asm/io_apic.h             |    7 
 arch/x86/include/asm/microcode.h           |    9 
 arch/x86/include/asm/paravirt.h            |  718 -------------
 arch/x86/include/asm/paravirt_types.h      |  722 +++++++++++++
 arch/x86/include/asm/pci.h                 |    8 
 arch/x86/include/asm/pci_x86.h             |    2 
 arch/x86/include/asm/pgtable.h             |    3 
 arch/x86/include/asm/processor.h           |    4 
 arch/x86/include/asm/tlbflush.h            |    6 
 arch/x86/include/asm/xen/hypercall.h       |   44 
 arch/x86/include/asm/xen/interface.h       |    8 
 arch/x86/include/asm/xen/interface_32.h    |    5 
 arch/x86/include/asm/xen/interface_64.h    |   13 
 arch/x86/include/asm/xen/iommu.h           |   12 
 arch/x86/include/asm/xen/page.h            |   16 
 arch/x86/include/asm/xen/pci.h             |   37 
 arch/x86/kernel/Makefile                   |    1 
 arch/x86/kernel/acpi/boot.c                |   18 
 arch/x86/kernel/acpi/processor.c           |    4 
 arch/x86/kernel/acpi/sleep.c               |    2 
 arch/x86/kernel/apic/io_apic.c             |   46 
 arch/x86/kernel/cpu/mtrr/Makefile          |    1 
 arch/x86/kernel/cpu/mtrr/amd.c             |    6 
 arch/x86/kernel/cpu/mtrr/centaur.c         |    6 
 arch/x86/kernel/cpu/mtrr/cyrix.c           |    6 
 arch/x86/kernel/cpu/mtrr/generic.c         |   10 
 arch/x86/kernel/cpu/mtrr/main.c            |   19 
 arch/x86/kernel/cpu/mtrr/mtrr.h            |   11 
 arch/x86/kernel/cpu/mtrr/xen.c             |  104 +
 arch/x86/kernel/e820.c                     |   30 
 arch/x86/kernel/ioport.c                   |   29 
 arch/x86/kernel/microcode_core.c           |    5 
 arch/x86/kernel/microcode_xen.c            |  200 +++
 arch/x86/kernel/paravirt.c                 |    1 
 arch/x86/kernel/pci-dma.c                  |    3 
 arch/x86/kernel/pci-swiotlb.c              |   30 
 arch/x86/kernel/process.c                  |   27 
 arch/x86/kernel/process_32.c               |   27 
 arch/x86/kernel/process_64.c               |   33 
 arch/x86/kernel/setup.c                    |    4 
 arch/x86/kernel/traps.c                    |   33 
 arch/x86/mm/Makefile                       |    4 
 arch/x86/mm/init_32.c                      |   42 
 arch/x86/mm/pat.c                          |    2 
 arch/x86/mm/pgtable.c                      |   10 
 arch/x86/mm/tlb.c                          |   35 
 arch/x86/pci/Makefile                      |    1 
 arch/x86/pci/common.c                      |   18 
 arch/x86/pci/i386.c                        |    3 
 arch/x86/pci/init.c                        |    6 
 arch/x86/pci/xen.c                         |   51 
 arch/x86/xen/Kconfig                       |   33 
 arch/x86/xen/Makefile                      |    5 
 arch/x86/xen/apic.c                        |   57 +
 arch/x86/xen/enlighten.c                   |  204 +++
 arch/x86/xen/mmu.c                         |  455 ++++++++
 arch/x86/xen/pci-swiotlb.c                 |   53 +
 arch/x86/xen/pci.c                         |  112 ++
 arch/x86/xen/setup.c                       |   50 
 arch/x86/xen/smp.c                         |    3 
 arch/x86/xen/time.c                        |    2 
 arch/x86/xen/vga.c                         |   67 +
 arch/x86/xen/xen-ops.h                     |   19 
 block/blk-core.c                           |    2 
 drivers/acpi/acpica/hwsleep.c              |   17 
 drivers/acpi/processor_core.c              |   29 
 drivers/acpi/processor_idle.c              |   23 
 drivers/acpi/processor_perflib.c           |   10 
 drivers/acpi/sleep.c                       |   19 
 drivers/block/Kconfig                      |    1 
 drivers/char/agp/intel-agp.c               |   17 
 drivers/char/hvc_xen.c                     |   99 +
 drivers/net/Kconfig                        |    1 
 drivers/pci/Makefile                       |    2 
 drivers/pci/xen-iommu.c                    |  332 ++++++
 drivers/xen/Kconfig                        |   41 
 drivers/xen/Makefile                       |   23 
 drivers/xen/acpi.c                         |   23 
 drivers/xen/acpi_processor.c               |  451 ++++++++
 drivers/xen/balloon.c                      |  161 ++-
 drivers/xen/biomerge.c                     |   14 
 drivers/xen/blkback/Makefile               |    3 
 drivers/xen/blkback/blkback.c              |  658 ++++++++++++
 drivers/xen/blkback/common.h               |  137 ++
 drivers/xen/blkback/interface.c            |  182 +++
 drivers/xen/blkback/vbd.c                  |  118 ++
 drivers/xen/blkback/xenbus.c               |  542 ++++++++++
 drivers/xen/events.c                       |  413 +++++++
 drivers/xen/evtchn.c                       |    1 
 drivers/xen/features.c                     |    2 
 drivers/xen/grant-table.c                  |  103 +
 drivers/xen/mce.c                          |  213 ++++
 drivers/xen/netback/Makefile               |    3 
 drivers/xen/netback/common.h               |  221 ++++
 drivers/xen/netback/interface.c            |  401 +++++++
 drivers/xen/netback/netback.c              | 1513 +++++++++++++++++++++++++++++
 drivers/xen/netback/xenbus.c               |  454 ++++++++
 drivers/xen/pci.c                          |  124 ++
 drivers/xen/xenbus/Makefile                |    5 
 drivers/xen/xenbus/xenbus_comms.c          |    1 
 drivers/xen/xenbus/xenbus_probe.c          |  380 +------
 drivers/xen/xenbus/xenbus_probe.h          |   29 
 drivers/xen/xenbus/xenbus_probe_backend.c  |  298 +++++
 drivers/xen/xenbus/xenbus_probe_frontend.c |  292 +++++
 drivers/xen/xenfs/Makefile                 |    3 
 drivers/xen/xenfs/privcmd.c                |  403 +++++++
 drivers/xen/xenfs/super.c                  |   98 +
 drivers/xen/xenfs/xenfs.h                  |    3 
 drivers/xen/xenfs/xenstored.c              |   67 +
 include/acpi/processor.h                   |    2 
 include/asm-generic/pci.h                  |    2 
 include/linux/interrupt.h                  |    1 
 include/linux/page-flags.h                 |   18 
 include/xen/Kbuild                         |    1 
 include/xen/acpi.h                         |   84 +
 include/xen/balloon.h                      |    8 
 include/xen/blkif.h                        |  122 ++
 include/xen/events.h                       |   27 
 include/xen/grant_table.h                  |   43 
 include/xen/interface/grant_table.h        |   22 
 include/xen/interface/memory.h             |   92 +
 include/xen/interface/physdev.h            |   51 
 include/xen/interface/platform.h           |  336 ++++++
 include/xen/interface/xen-mca.h            |  429 ++++++++
 include/xen/interface/xen.h                |   44 
 include/xen/privcmd.h                      |   80 +
 include/xen/swiotlb.h                      |   18 
 include/xen/xen-ops.h                      |   11 
 include/xen/xenbus.h                       |    2 
 kernel/irq/manage.c                        |    3 
 lib/swiotlb.c                              |    5 
 mm/page_alloc.c                            |   14 
 138 files changed, 11555 insertions(+), 1333 deletions(-)

Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.37
retrieving revision 1.1.2.38
diff -u -p -r1.1.2.37 -r1.1.2.38
--- xen.pvops.patch	26 Aug 2009 19:58:49 -0000	1.1.2.37
+++ xen.pvops.patch	3 Sep 2009 20:02:38 -0000	1.1.2.38
@@ -13,6 +13,19 @@ index 13ffa5d..ae6617b 100644
  config PCI_DOMAINS
  	def_bool y
  	depends on PCI
+diff --git a/arch/x86/Makefile b/arch/x86/Makefile
+index 1b68659..5e7db44 100644
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -72,7 +72,7 @@ endif
+ 
+ ifdef CONFIG_CC_STACKPROTECTOR
+ 	cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
+-        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC)),y)
++        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(biarch)),y)
+                 stackp-y := -fstack-protector
+                 stackp-$(CONFIG_CC_STACKPROTECTOR_ALL) += -fstack-protector-all
+                 KBUILD_CFLAGS += $(stackp-y)
 diff --git a/arch/x86/include/asm/agp.h b/arch/x86/include/asm/agp.h
 index 9825cd6..d972b14 100644
 --- a/arch/x86/include/asm/agp.h
@@ -3189,6 +3202,21 @@ index 5204332..22a5a6d 100644
  }
  EXPORT_SYMBOL_GPL(math_state_restore);
  
+diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
+index eefdeee..72bb3a2 100644
+--- a/arch/x86/mm/Makefile
++++ b/arch/x86/mm/Makefile
+@@ -1,6 +1,10 @@
+ obj-y	:=  init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
+ 	    pat.o pgtable.o gup.o
+ 
++# Make sure __phys_addr has no stackprotector
++nostackp := $(call cc-option, -fno-stack-protector)
++CFLAGS_ioremap.o		:= $(nostackp)
++
+ obj-$(CONFIG_SMP)		+= tlb.o
+ 
+ obj-$(CONFIG_X86_32)		+= pgtable_32.o iomap_32.o
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
 index 3cd7711..f16903d 100644
 --- a/arch/x86/mm/init_32.c
@@ -3568,10 +3596,18 @@ index b83e119..951c924 100644
 +       depends on XEN_DOM0 && MICROCODE
 \ No newline at end of file
 diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
-index 7410640..8c2c266 100644
+index 7410640..4a9ee23 100644
 --- a/arch/x86/xen/Makefile
 +++ b/arch/x86/xen/Makefile
-@@ -16,3 +16,7 @@ obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
+@@ -8,6 +8,7 @@ endif
+ # Make sure early boot has no stackprotector
+ nostackp := $(call cc-option, -fno-stack-protector)
+ CFLAGS_enlighten.o		:= $(nostackp)
++CFLAGS_mmu.o			:= $(nostackp)
+ 
+ obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
+ 			time.o xen-asm.o xen-asm_$(BITS).o \
+@@ -16,3 +17,7 @@ obj-y		:= enlighten.o setup.o multicalls.o mmu.o irq.o \
  obj-$(CONFIG_SMP)		+= smp.o
  obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
  obj-$(CONFIG_XEN_DEBUG_FS)	+= debugfs.o
@@ -3579,7 +3615,6 @@ index 7410640..8c2c266 100644
 +obj-$(CONFIG_XEN_DOM0)		+= apic.o
 +obj-$(CONFIG_XEN_DOM0_PCI)	+= pci.o
 +obj-$(CONFIG_PCI_XEN)		+= pci-swiotlb.o
-\ No newline at end of file
 diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c
 new file mode 100644
 index 0000000..ee0db39
@@ -3644,10 +3679,18 @@ index 0000000..ee0db39
 +#endif
 +}
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index e90540a..1edf6a8 100644
+index eb33aaa..97a2764 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -64,6 +64,11 @@ DEFINE_PER_CPU(struct vcpu_info, xen_vcpu_info);
+@@ -51,6 +51,7 @@
+ #include <asm/pgtable.h>
+ #include <asm/tlbflush.h>
+ #include <asm/reboot.h>
++#include <asm/stackprotector.h>
+ 
+ #include "xen-ops.h"
+ #include "mmu.h"
+@@ -64,6 +65,11 @@ DEFINE_PER_CPU(struct vcpu_info, xen_vcpu_info);
  enum xen_domain_type xen_domain_type = XEN_NATIVE;
  EXPORT_SYMBOL_GPL(xen_domain_type);
  
@@ -3659,7 +3702,7 @@ index e90540a..1edf6a8 100644
  struct start_info *xen_start_info;
  EXPORT_SYMBOL_GPL(xen_start_info);
  
-@@ -166,13 +171,16 @@ static void __init xen_banner(void)
+@@ -166,13 +172,16 @@ static void __init xen_banner(void)
  
  	printk(KERN_INFO "Booting paravirtualized kernel on %s\n",
  	       pv_info.name);
@@ -3678,7 +3721,7 @@ index e90540a..1edf6a8 100644
  
  static void xen_cpuid(unsigned int *ax, unsigned int *bx,
  		      unsigned int *cx, unsigned int *dx)
-@@ -184,9 +192,15 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
+@@ -184,9 +193,15 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
  	 * Mask out inconvenient features, to try and disable as many
  	 * unsupported kernel subsystems as possible.
  	 */
@@ -3695,7 +3738,7 @@ index e90540a..1edf6a8 100644
  	}
  
  	asm(XEN_EMULATE_PREFIX "cpuid"
-@@ -205,16 +219,20 @@ static __init void xen_init_cpuid_mask(void)
+@@ -205,13 +220,16 @@ static __init void xen_init_cpuid_mask(void)
  	unsigned int ax, bx, cx, dx;
  
  	cpuid_leaf1_edx_mask =
@@ -3716,11 +3759,114 @@ index e90540a..1edf6a8 100644
  			  (1 << X86_FEATURE_ACPI));  /* disable ACPI */
  
  	ax = 1;
-+	cx = 0;
- 	xen_cpuid(&ax, &bx, &cx, &dx);
+@@ -330,18 +348,28 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
+ 	unsigned long frames[pages];
+ 	int f;
+ 
+-	/* A GDT can be up to 64k in size, which corresponds to 8192
+-	   8-byte entries, or 16 4k pages.. */
++	/* 
++	 * A GDT can be up to 64k in size, which corresponds to 8192
++	 * 8-byte entries, or 16 4k pages..
++	 */
+ 
+ 	BUG_ON(size > 65536);
+ 	BUG_ON(va & ~PAGE_MASK);
+ 
+ 	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
+ 		int level;
+-		pte_t *ptep = lookup_address(va, &level);
++		pte_t *ptep;
+ 		unsigned long pfn, mfn;
+ 		void *virt;
+ 
++		/*
++		 * The GDT is per-cpu and is in the percpu data area.
++		 * That can be virtually mapped, so we need to do a
++		 * page-walk to get the underlying MFN for the
++		 * hypercall.  The page can also be in the kernel's
++		 * linear range, so we need to RO that mapping too.
++		 */
++		ptep = lookup_address(va, &level);
+ 		BUG_ON(ptep == NULL);
+ 
+ 		pfn = pte_pfn(*ptep);
+@@ -358,6 +386,44 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
+ 		BUG();
+ }
+ 
++/* 
++ * load_gdt for early boot, when the gdt is only mapped once
++ */
++static __init void xen_load_gdt_boot(const struct desc_ptr *dtr)
++{
++	unsigned long va = dtr->address;
++	unsigned int size = dtr->size + 1;
++	unsigned pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;
++	unsigned long frames[pages];
++	int f;
++
++	/* 
++	 * A GDT can be up to 64k in size, which corresponds to 8192
++	 * 8-byte entries, or 16 4k pages..
++	 */
++
++	BUG_ON(size > 65536);
++	BUG_ON(va & ~PAGE_MASK);
++
++	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
++		pte_t pte;
++		unsigned long pfn, mfn;
++
++		pfn = virt_to_pfn(va);
++		mfn = pfn_to_mfn(pfn);
++
++		pte = pfn_pte(pfn, PAGE_KERNEL_RO);
++
++		if (HYPERVISOR_update_va_mapping((unsigned long)va, pte, 0))
++			BUG();
++
++		frames[f] = mfn;
++	}
++
++	if (HYPERVISOR_set_gdt(frames, size / sizeof(struct desc_struct)))
++		BUG();
++}
++
+ static void load_TLS_descriptor(struct thread_struct *t,
+ 				unsigned int cpu, unsigned int i)
+ {
+@@ -581,6 +647,29 @@ static void xen_write_gdt_entry(struct desc_struct *dt, int entry,
+ 	preempt_enable();
+ }
  
- 	/* cpuid claims we support xsave; try enabling it to see what happens */
-@@ -597,6 +615,18 @@ static void xen_set_iopl_mask(unsigned mask)
++/* 
++ * Version of write_gdt_entry for use at early boot-time needed to
++ * update an entry as simply as possible.
++ */
++static __init void xen_write_gdt_entry_boot(struct desc_struct *dt, int entry,
++					    const void *desc, int type)
++{
++	switch (type) {
++	case DESC_LDT:
++	case DESC_TSS:
++		/* ignore */
++		break;
++
++	default: {
++		xmaddr_t maddr = virt_to_machine(&dt[entry]);
++
++		if (HYPERVISOR_update_descriptor(maddr.maddr, *(u64 *)desc))
++			dt[entry] = *(struct desc_struct *)desc;
++	}
++
++	}	
++}
++
+ static void xen_load_sp0(struct tss_struct *tss,
+ 			 struct thread_struct *thread)
+ {
+@@ -598,6 +687,18 @@ static void xen_set_iopl_mask(unsigned mask)
  	HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
  }
  
@@ -3739,7 +3885,7 @@ index e90540a..1edf6a8 100644
  static void xen_io_delay(void)
  {
  }
-@@ -634,7 +664,7 @@ static u32 xen_safe_apic_wait_icr_idle(void)
+@@ -635,7 +736,7 @@ static u32 xen_safe_apic_wait_icr_idle(void)
          return 0;
  }
  
@@ -3748,7 +3894,7 @@ index e90540a..1edf6a8 100644
  {
  	apic->read = xen_apic_read;
  	apic->write = xen_apic_write;
-@@ -906,6 +936,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
+@@ -907,6 +1008,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
  	.load_sp0 = xen_load_sp0,
  
  	.set_iopl_mask = xen_set_iopl_mask,
@@ -3756,25 +3902,96 @@ index e90540a..1edf6a8 100644
  	.io_delay = xen_io_delay,
  
  	/* Xen takes care of %gs when switching to usermode for us */
-@@ -1000,6 +1031,8 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -965,6 +1067,23 @@ static const struct machine_ops __initdata xen_machine_ops = {
+ 	.emergency_restart = xen_emergency_restart,
+ };
+ 
++/* 
++ * Set up the GDT and segment registers for -fstack-protector.  Until
++ * we do this, we have to be careful not to call any stack-protected
++ * function, which is most of the kernel.
++ */
++static void __init xen_setup_stackprotector(void)
++{
++	pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry_boot;
++	pv_cpu_ops.load_gdt = xen_load_gdt_boot;
++
++	setup_stack_canary_segment(0);
++	switch_to_new_gdt(0);
++
++	pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;       
++	pv_cpu_ops.load_gdt = xen_load_gdt;
++}
++
+ /* First C function to be called on Xen boot */
+ asmlinkage void __init xen_start_kernel(void)
+ {
+@@ -983,13 +1102,28 @@ asmlinkage void __init xen_start_kernel(void)
+ 	pv_apic_ops = xen_apic_ops;
+ 	pv_mmu_ops = xen_mmu_ops;
+ 
+-#ifdef CONFIG_X86_64
+-	/*
+-	 * Setup percpu state.  We only need to do this for 64-bit
+-	 * because 32-bit already has %fs set properly.
++	/* 
++	 * Set up some pagetable state before starting to set any ptes.
+ 	 */
+-	load_percpu_segment(0);
+-#endif
++
++	/* Prevent unwanted bits from being set in PTEs. */
++	__supported_pte_mask &= ~_PAGE_GLOBAL;
++	if (!xen_initial_domain())
++		__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
++
++	__supported_pte_mask |= _PAGE_IOMAP;
++
++	xen_setup_features();
++
++	/* Get mfn list */
++	if (!xen_feature(XENFEAT_auto_translated_physmap))
++		xen_build_dynamic_phys_to_machine();
++
++	/* 
++	 * Set up kernel GDT and segment registers, mainly so that
++	 * -fstack-protector code can be executed.
++	 */
++	xen_setup_stackprotector();
+ 
+ 	xen_init_irq_ops();
+ 	xen_init_cpuid_mask();
+@@ -1001,7 +1135,11 @@ asmlinkage void __init xen_start_kernel(void)
  	set_xen_basic_apic_ops();
  #endif
  
++<<<<<<< HEAD:arch/x86/xen/enlighten.c
 +	xen_setup_machphys_mapping();
-+
++=======
  	xen_setup_features();
++>>>>>>> v2.6.31-rc8-git2:arch/x86/xen/enlighten.c
  
  	if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {
-@@ -1029,6 +1062,8 @@ asmlinkage void __init xen_start_kernel(void)
- 	if (!xen_initial_domain())
- 		__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
+ 		pv_mmu_ops.ptep_modify_prot_start = xen_ptep_modify_prot_start;
+@@ -1019,16 +1157,9 @@ asmlinkage void __init xen_start_kernel(void)
+ 
+ 	xen_smp_init();
  
+-	/* Get mfn list */
+-	if (!xen_feature(XENFEAT_auto_translated_physmap))
+-		xen_build_dynamic_phys_to_machine();
+-
+ 	pgd = (pgd_t *)xen_start_info->pt_base;
+ 
+-	/* Prevent unwanted bits from being set in PTEs. */
+-	__supported_pte_mask &= ~_PAGE_GLOBAL;
+-	if (!xen_initial_domain())
+-		__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
 +	__supported_pte_mask |= _PAGE_IOMAP;
-+
+ 
  #ifdef CONFIG_X86_64
  	/* Work out if we support NX */
- 	check_efer();
-@@ -1043,6 +1078,7 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1044,6 +1175,7 @@ asmlinkage void __init xen_start_kernel(void)
  
  	xen_raw_console_write("mapping kernel into physical memory\n");
  	pgd = xen_setup_kernel_pagetable(pgd, xen_start_info->nr_pages);
@@ -3782,7 +3999,7 @@ index e90540a..1edf6a8 100644
  
  	init_mm.pgd = pgd;
  
-@@ -1052,13 +1088,26 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1053,9 +1185,21 @@ asmlinkage void __init xen_start_kernel(void)
  	if (xen_feature(XENFEAT_supervisor_mode_kernel))
  		pv_info.kernel_rpl = 0;
  
@@ -3804,12 +4021,7 @@ index e90540a..1edf6a8 100644
  #ifdef CONFIG_X86_32
  	/* set up basic CPUID stuff */
  	cpu_detect(&new_cpu_data);
- 	new_cpu_data.hard_math = 1;
-+	new_cpu_data.wp_works_ok = 1;
- 	new_cpu_data.x86_capability[0] = cpuid_edx(1);
- #endif
- 
-@@ -1073,6 +1122,16 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1075,6 +1219,16 @@ asmlinkage void __init xen_start_kernel(void)
  		add_preferred_console("xenboot", 0, NULL);
  		add_preferred_console("tty", 0, NULL);
  		add_preferred_console("hvc", 0, NULL);
@@ -4696,10 +4908,18 @@ index ad0047f..2439456 100644
  	fiddle_vdso();
  }
 diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
-index 429834e..4706af7 100644
+index 429834e..58078da 100644
 --- a/arch/x86/xen/smp.c
 +++ b/arch/x86/xen/smp.c
-@@ -297,6 +297,8 @@ static int __cpuinit xen_cpu_up(unsigned int cpu)
+@@ -236,6 +236,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
+ 	ctxt->user_regs.ss = __KERNEL_DS;
+ #ifdef CONFIG_X86_32
+ 	ctxt->user_regs.fs = __KERNEL_PERCPU;
++	ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
+ #else
+ 	ctxt->gs_base_kernel = per_cpu_offset(cpu);
+ #endif
+@@ -297,6 +298,8 @@ static int __cpuinit xen_cpu_up(unsigned int cpu)
  	xen_setup_timer(cpu);
  	xen_init_lock_cpu(cpu);
  
@@ -4896,7 +5116,7 @@ index db307a3..c6d845c 100644
  		return_ACPI_STATUS(status);
  	}
 diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
-index 84e0f3c..8882c23 100644
+index 2cc4b30..98010d5 100644
 --- a/drivers/acpi/processor_core.c
 +++ b/drivers/acpi/processor_core.c
 @@ -58,6 +58,7 @@
@@ -4989,7 +5209,7 @@ index 84e0f3c..8882c23 100644
  		if ((!result) && ((pr->id >= 0) && (pr->id < nr_cpu_ids))) {
  			kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
-index 66393d5..da9797e 100644
+index 66393d5..25680c6 100644
 --- a/drivers/acpi/processor_idle.c
 +++ b/drivers/acpi/processor_idle.c
 @@ -58,6 +58,7 @@
@@ -5015,7 +5235,7 @@ index 66393d5..da9797e 100644
  	if (!pr->flags.power_setup_done)
  		return -ENODEV;
  
-+    if (processor_cntl_xen_pm()) {
++    if (xen_initial_domain()) {
 +		acpi_processor_get_power_info(pr);
 +		processor_cntl_xen_notify(pr,
 +			PROCESSOR_PM_CHANGE, PM_TYPE_IDLE);
@@ -5032,7 +5252,7 @@ index 66393d5..da9797e 100644
 -		acpi_processor_setup_cpuidle(pr);
 -		if (cpuidle_register_device(&pr->power.dev))
 -			return -EIO;
-+		if (processor_cntl_xen_pm())
++		if (xen_initial_domain())
 +			processor_cntl_xen_notify(pr,
 +					PROCESSOR_PM_INIT, PM_TYPE_IDLE);
 +		else {
@@ -5795,10 +6015,10 @@ index cab100a..33976f7 100644
 +	depends on XEN_DOM0 && ACPI_PROCESSOR && CPU_FREQ
 +	default y
 diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
-index ec2a39b..2a69a03 100644
+index ec2a39b..8e7ce48 100644
 --- a/drivers/xen/Makefile
 +++ b/drivers/xen/Makefile
-@@ -1,9 +1,15 @@
+@@ -1,9 +1,18 @@
 -obj-y	+= grant-table.o features.o events.o manage.o
 +obj-y	+= grant-table.o features.o events.o manage.o biomerge.o
  obj-y	+= xenbus/
@@ -5810,6 +6030,9 @@ index ec2a39b..2a69a03 100644
 -obj-$(CONFIG_XENFS)		+= xenfs/
 -obj-$(CONFIG_XEN_SYS_HYPERVISOR)	+= sys-hypervisor.o
 \ No newline at end of file
++nostackp := $(call cc-option, -fno-stack-protector)
++CFLAGS_features.o			:= $(nostackp)
++
 +obj-$(CONFIG_PCI)			+= pci.o
 +obj-$(CONFIG_HOTPLUG_CPU)		+= cpu_hotplug.o
 +obj-$(CONFIG_XEN_XENCOMM)		+= xencomm.o
@@ -5853,10 +6076,10 @@ index 0000000..e6d3d0e
 +}
 diff --git a/drivers/xen/acpi_processor.c b/drivers/xen/acpi_processor.c
 new file mode 100644
-index 0000000..d2b76e9
+index 0000000..6a4e8e4
 --- /dev/null
 +++ b/drivers/xen/acpi_processor.c
-@@ -0,0 +1,447 @@
+@@ -0,0 +1,451 @@
 +/*
 + *  acpi_processor.c - interface to notify Xen on acpi processor object
 + *                     info parsing
@@ -6289,10 +6512,14 @@ index 0000000..d2b76e9
 +
 +static int __init xen_acpi_processor_extcntl_init(void)
 +{
-+	unsigned int pmbits = (xen_start_info->flags & SIF_PM_MASK) >> 8;
++	unsigned int pmbits;
 +
-+	if (!pmbits)
++	/* Only xen dom0 is allowed to handle ACPI processor info */
++	if (!xen_initial_domain())
 +		return 0;
++
++	pmbits = (xen_start_info->flags & SIF_PM_MASK) >> 8;
++
 +	if (pmbits & XEN_PROCESSOR_PM_CX)
 +		xen_ops.pm_ops[PM_TYPE_IDLE] = xen_cx_notifier;
 +	if (pmbits & XEN_PROCESSOR_PM_PX)
@@ -13843,7 +14070,7 @@ index 0000000..af10804
 +	.release = xsd_release,
 +};
 diff --git a/include/acpi/processor.h b/include/acpi/processor.h
-index baf1e0a..f325963 100644
+index 740ac3a..221d30d 100644
 --- a/include/acpi/processor.h
 +++ b/include/acpi/processor.h
 @@ -295,6 +295,8 @@ static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx


--- allow-disabling-ima.diff DELETED ---


--- linux-2.6.31-lirc.patch DELETED ---


--- lirc_streamzap-buffer-rework.patch DELETED ---


--- patch-2.6.31-rc7-git4.bz2.sign DELETED ---


--- patch-2.6.31-rc7.bz2.sign DELETED ---


--- xen-fb-probe-fix.patch DELETED ---




More information about the fedora-extras-commits mailing list