rpms/kernel/devel patch-2.6.31-rc6-git3.bz2.sign, NONE, 1.1.2.2 .cvsignore, 1.1014.2.23, 1.1014.2.24 Makefile.config, 1.70.6.2, 1.70.6.3 config-generic, 1.238.6.34, 1.238.6.35 config-sparc64-generic, 1.21.6.6, 1.21.6.7 config-x86-generic, 1.68.6.17, 1.68.6.18 config-x86_64-generic, 1.68.2.15, 1.68.2.16 kernel.spec, 1.1294.2.52, 1.1294.2.53 linux-2.6.31-lirc.patch, 1.2.2.4, 1.2.2.5 perf, 1.2.2.2, 1.2.2.3 sources, 1.976.2.24, 1.976.2.25 upstream, 1.888.2.23, 1.888.2.24 xen.pvops.patch, 1.1.2.33, 1.1.2.34 xen.pvops.post.patch, 1.1.2.20, 1.1.2.21 config-powerpc64-kdump, 1.1, NONE
myoung
myoung at fedoraproject.org
Tue Aug 18 19:26:56 UTC 2009
Author: myoung
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3035
Modified Files:
Tag: private-myoung-dom0-branch
.cvsignore Makefile.config config-generic
config-sparc64-generic config-x86-generic
config-x86_64-generic kernel.spec linux-2.6.31-lirc.patch perf
sources upstream xen.pvops.patch xen.pvops.post.patch
Added Files:
Tag: private-myoung-dom0-branch
patch-2.6.31-rc6-git3.bz2.sign
Removed Files:
Tag: private-myoung-dom0-branch
config-powerpc64-kdump
Log Message:
Try pvops STACKPROTECTOR fixes. Also adds MCA/MCE support
--- NEW FILE patch-2.6.31-rc6-git3.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info
iD8DBQBKifDWyGugalF9Dw4RArnDAKCV4RB/H5u3asDVNcofTSi7u2aTXwCeP8Fg
fe5RiaqtFA5xWe7P/QgnlwI=
=BQxt
-----END PGP SIGNATURE-----
Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.23
retrieving revision 1.1014.2.24
diff -u -p -r1.1014.2.23 -r1.1014.2.24
--- .cvsignore 14 Aug 2009 18:31:25 -0000 1.1014.2.23
+++ .cvsignore 18 Aug 2009 19:26:44 -0000 1.1014.2.24
@@ -6,3 +6,4 @@ temp-*
kernel-2.6.30
linux-2.6.30.tar.bz2
patch-2.6.31-rc6.bz2
+patch-2.6.31-rc6-git3.bz2
Index: Makefile.config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Makefile.config,v
retrieving revision 1.70.6.2
retrieving revision 1.70.6.3
diff -u -p -r1.70.6.2 -r1.70.6.3
--- Makefile.config 13 Aug 2009 18:13:03 -0000 1.70.6.2
+++ Makefile.config 18 Aug 2009 19:26:44 -0000 1.70.6.3
@@ -11,7 +11,7 @@ CONFIGFILES = \
$(CFG)-s390x.config $(CFG)-arm.config \
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
$(CFG)-sparc64.config \
- $(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ppc64-debug.config \
+ $(CFG)-ppc64.config $(CFG)-ppc64-debug.config \
$(CFG)-ia64.config
PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64
@@ -86,9 +86,6 @@ kernel-$(VERSION)-sparc64.config: /dev/n
kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic
perl merge.pl $^ powerpc > $@
-kernel-$(VERSION)-ppc64-kdump.config: config-powerpc64-kdump kernel-$(VERSION)-ppc64.config
- perl merge.pl $^ powerpc > $@
-
kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generic
perl merge.pl $^ powerpc > $@
Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.34
retrieving revision 1.238.6.35
diff -u -p -r1.238.6.34 -r1.238.6.35
--- config-generic 13 Aug 2009 18:13:03 -0000 1.238.6.34
+++ config-generic 18 Aug 2009 19:26:45 -0000 1.238.6.35
@@ -3787,6 +3787,7 @@ CONFIG_DEFAULT_RELATIME=y
CONFIG_INPUT_LIRC=y
CONFIG_LIRC_DEV=m
CONFIG_LIRC_BT829=m
+CONFIG_LIRC_ENE0100=m
CONFIG_LIRC_I2C=m
CONFIG_LIRC_IGORPLUGUSB=m
CONFIG_LIRC_IMON=m
@@ -3992,6 +3993,8 @@ CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_AUDIT=y
CONFIG_IMA_LSM_RULES=y
+CONFIG_LSM_MMAP_MIN_ADDR=65536
+
# CONFIG_PAGE_POISONING is not set
CONFIG_SLOW_WORK=y
Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-sparc64-generic,v
retrieving revision 1.21.6.6
retrieving revision 1.21.6.7
diff -u -p -r1.21.6.6 -r1.21.6.7
--- config-sparc64-generic 13 Aug 2009 18:13:03 -0000 1.21.6.6
+++ config-sparc64-generic 18 Aug 2009 19:26:45 -0000 1.21.6.7
@@ -199,3 +199,10 @@ CONFIG_LEDS_SUNFIRE=m
CONFIG_TADPOLE_TS102_UCTRL=m
CONFIG_RCU_FANOUT=64
+
+CONFIG_LIRC_ENE0100=m
+# CONFIG_BATTERY_DS2782 is not set
+CONFIG_USB_GSPCA_SN9C20X=m
+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
+CONFIG_LSM_MMAP_MIN_ADDR=65536
+
Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86-generic,v
retrieving revision 1.68.6.17
retrieving revision 1.68.6.18
diff -u -p -r1.68.6.17 -r1.68.6.18
--- config-x86-generic 10 Aug 2009 21:22:18 -0000 1.68.6.17
+++ config-x86-generic 18 Aug 2009 19:26:45 -0000 1.68.6.18
@@ -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
Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86_64-generic,v
retrieving revision 1.68.2.15
retrieving revision 1.68.2.16
diff -u -p -r1.68.2.15 -r1.68.2.16
--- config-x86_64-generic 10 Aug 2009 21:22:18 -0000 1.68.2.15
+++ config-x86_64-generic 18 Aug 2009 19:26:45 -0000 1.68.2.16
@@ -243,7 +243,7 @@ CONFIG_SPARSEMEM_VMEMMAP=y
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_CC_STACKPROTECTOR is not set
+CONFIG_CC_STACKPROTECTOR=y
# CONFIG_CC_STACKPROTECTOR_ALL is not set
CONFIG_SGI_IOC4=m
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.52
retrieving revision 1.1294.2.53
diff -u -p -r1.1294.2.52 -r1.1294.2.53
--- kernel.spec 14 Aug 2009 18:31:25 -0000 1.1294.2.52
+++ kernel.spec 18 Aug 2009 19:26:45 -0000 1.1294.2.53
@@ -62,7 +62,7 @@ Summary: The Linux kernel
# The rc snapshot level
%define rcrev 6
# The git snapshot level
-%define gitrev 0
+%define gitrev 3
# 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, grubby >= 7.0.2-1
+%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
#
# This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -534,7 +534,6 @@ Source50: config-powerpc-generic
Source51: config-powerpc32-generic
Source52: config-powerpc32-smp
Source53: config-powerpc64
-Source54: config-powerpc64-kdump
Source60: config-ia64-generic
@@ -544,7 +543,7 @@ Source90: config-sparc64-generic
Source100: config-arm
-Source999: perf
+Source200: perf
# Here should be only the patches up to the upstream canonical Linus tree.
@@ -1292,8 +1291,8 @@ ApplyPatch hdpvr-ir-enable.patch
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
# Optimize KVM for KSM support
#ApplyPatch linux-2.6-ksm-kvm.patch
@@ -1978,6 +1977,32 @@ fi
# and build.
%changelog
+* Tue Aug 18 2009 Michael Young <m.a.young at durham.ac.uk>
+- another rebase/master update
+ - try upstream STACKPROTECTOR fixes
+ - MCE/MCA support
+- remove grubby dependency to make it more F11 friendly, it isn't needed
+ until dracut is re-enabled
+
+* Tue Aug 18 2009 Dave Jones <davej at redhat.com>
+- 2.6.31-rc6-git3
+
+* Mon Aug 17 2009 Dave Jones <davej at redhat.com> 2.6.31-0.161.rc6.git2
+- 2.6.31-rc6-git2
+
+* Mon Aug 17 2009 Chuck Ebbert <cebbert at redhat.com>
+- Stop generating the (unused) ppc64-kdump.config file.
+
+* Mon Aug 17 2009 Jarod Wilson <jarod at redhat.com>
+- Add new lirc driver for built-in ENE0100 device on some laptops
+
+* Sun Aug 16 2009 Kyle McMartin <kyle at redhat.com> 2.6.31-0.158.rc6
+- Improve the perf script so it prints something helpful if the
+ perf binary doesn't exist.
+
+* Sat Aug 15 2009 Dave Jones <davej at redhat.com> 2.6.31-0.157.rc6
+- Disable KSM patches on a hunch. Chasing the "encrypted VGs don't work" bug.
+
* Fri Aug 14 2009 Michael Young <m.a.young at durham.ac.uk>
- another rebase/master update
- make perf a Source file so the kernel builds
linux-2.6.31-lirc.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 | 852 ++++++++++++
drivers/input/lirc/lirc_dev.h | 184 ++
drivers/input/lirc/lirc_ene0100.c | 450 ++++++
drivers/input/lirc/lirc_ene0100.h | 100 +
drivers/input/lirc/lirc_i2c.c | 537 +++++++
drivers/input/lirc/lirc_igorplugusb.c | 556 ++++++++
drivers/input/lirc/lirc_imon.c | 2297 ++++++++++++++++++++++++++++++++++
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 | 1225 ++++++++++++++++++
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 | 777 +++++++++++
drivers/input/lirc/lirc_ttusbir.c | 397 +++++
drivers/input/lirc/lirc_zilog.c | 1374 ++++++++++++++++++++
26 files changed, 15291 insertions(+)
Index: linux-2.6.31-lirc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6.31-lirc.patch,v
retrieving revision 1.2.2.4
retrieving revision 1.2.2.5
diff -u -p -r1.2.2.4 -r1.2.2.5
--- linux-2.6.31-lirc.patch 10 Aug 2009 21:22:19 -0000 1.2.2.4
+++ linux-2.6.31-lirc.patch 18 Aug 2009 19:26:45 -0000 1.2.2.5
@@ -1,6 +1,6 @@
Linux Infrared Remote Control drivers -- http://www.lirc.org
-Last updated: Monday, August 10, 2009
+Last updated: Monday, August 17, 2009
From http://git.wilsonet.com/linux-2.6-lirc.git/
@@ -10,15 +10,17 @@ Signed-off-by: Jarod Wilson <jarod at redha
MAINTAINERS | 9 +
drivers/input/Kconfig | 2 +
drivers/input/Makefile | 2 +
- drivers/input/lirc/Kconfig | 112 ++
- drivers/input/lirc/Makefile | 20 +
+ 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 | 851 ++++++++++++
+ drivers/input/lirc/lirc_dev.c | 852 ++++++++++++
drivers/input/lirc/lirc_dev.h | 184 +++
+ drivers/input/lirc/lirc_ene0100.c | 450 +++++++
+ drivers/input/lirc/lirc_ene0100.h | 100 ++
drivers/input/lirc/lirc_i2c.c | 537 ++++++++
drivers/input/lirc/lirc_igorplugusb.c | 556 ++++++++
- drivers/input/lirc/lirc_imon.c | 2298 +++++++++++++++++++++++++++++++++
+ drivers/input/lirc/lirc_imon.c | 2297 +++++++++++++++++++++++++++++++++
drivers/input/lirc/lirc_it87.c | 986 ++++++++++++++
drivers/input/lirc/lirc_it87.h | 116 ++
drivers/input/lirc/lirc_ite8709.c | 539 ++++++++
@@ -31,13 +33,13 @@ Signed-off-by: Jarod Wilson <jarod at redha
drivers/input/lirc/lirc_streamzap.c | 777 +++++++++++
drivers/input/lirc/lirc_ttusbir.c | 397 ++++++
drivers/input/lirc/lirc_zilog.c | 1374 ++++++++++++++++++++
- 24 files changed, 14733 insertions(+), 0 deletions(-)
+ 26 files changed, 15291 insertions(+), 0 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
-index b1114cf..eb86f8e 100644
+index 2c4326c..15d1ac5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -3122,6 +3122,15 @@ W: http://www.pasemi.com/
+@@ -3130,6 +3130,15 @@ W: http://www.pasemi.com/
L: linuxppc-dev at ozlabs.org
S: Supported
@@ -78,10 +80,10 @@ index 4c9c745..99e2b5e 100644
+obj-$(CONFIG_INPUT_LIRC) += lirc/
diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
new file mode 100644
-index 0000000..6ef8622
+index 0000000..ab13cfe
--- /dev/null
+++ b/drivers/input/lirc/Kconfig
-@@ -0,0 +1,112 @@
+@@ -0,0 +1,119 @@
+#
+# LIRC driver(s) configuration
+#
@@ -106,6 +108,14 @@ index 0000000..6ef8622
+ 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
@@ -192,14 +202,13 @@ index 0000000..6ef8622
+ help
+ Driver for the Zilog/Hauppauge IR Transmitter, found on
+ PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
-+
+endif
diff --git a/drivers/input/lirc/Makefile b/drivers/input/lirc/Makefile
new file mode 100644
-index 0000000..7b1386e
+index 0000000..8da7aa9
--- /dev/null
+++ b/drivers/input/lirc/Makefile
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,21 @@
+# Makefile for the lirc drivers.
+#
+
@@ -207,6 +216,7 @@ index 0000000..7b1386e
+
+obj-$(CONFIG_LIRC_DEV) += lirc_dev.o
+obj-$(CONFIG_LIRC_BT829) += lirc_bt829.o
++obj-$(CONFIG_LIRC_ENE0100) += lirc_ene0100.o
+obj-$(CONFIG_LIRC_I2C) += lirc_i2c.o
+obj-$(CONFIG_LIRC_IGORPLUGUSB) += lirc_igorplugusb.o
+obj-$(CONFIG_LIRC_IMON) += lirc_imon.o
@@ -717,10 +727,10 @@ index 0000000..0485884
+MODULE_PARM_DESC(debug, "Debug enabled or not");
diff --git a/drivers/input/lirc/lirc_dev.c b/drivers/input/lirc/lirc_dev.c
new file mode 100644
-index 0000000..0510b4e
+index 0000000..fa0d169
--- /dev/null
+++ b/drivers/input/lirc/lirc_dev.c
-@@ -0,0 +1,851 @@
+@@ -0,0 +1,852 @@
+/*
+ * LIRC base driver
+ *
@@ -1019,6 +1029,7 @@ index 0000000..0510b4e
+ }
+ init_irctl(ir);
+ irctls[minor] = ir;
++ d->minor = minor;
+
+ if (d->sample_rate) {
+ ir->jiffies_to_wait = HZ / d->sample_rate;
@@ -1100,8 +1111,8 @@ index 0000000..0510b4e
+
+ if (minor < 0 || minor >= MAX_IRCTL_DEVICES) {
+ printk(KERN_ERR "lirc_dev: lirc_unregister_driver: "
-+ "\"minor\" must be between 0 and %d!\n",
-+ MAX_IRCTL_DEVICES-1);
++ "\"minor (%d)\" must be between 0 and %d!\n",
++ minor, MAX_IRCTL_DEVICES-1);
+ return -EBADRQC;
+ }
+
@@ -1762,6 +1773,568 @@ index 0000000..8eeffa2
+ unsigned long arg);
+
+#endif
+diff --git a/drivers/input/lirc/lirc_ene0100.c b/drivers/input/lirc/lirc_ene0100.c
+new file mode 100644
+index 0000000..e6f1617
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ene0100.c
+@@ -0,0 +1,450 @@
++/*
++ * driver for ENE KB3924 CIR (also known as ENE0100)
++ *
++ * Copyright (C) 2009 Maxim Levitsky <maximlevitsky at gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/pnp.h>
++#include <linux/io.h>
++#include <linux/interrupt.h>
++#include "lirc_ene0100.h"
++
++
++static int sample_period = 50;
++static int enable_idle = 1;
++
++static void ene_set_idle(struct ene_device *dev, int idle);
++
++/* read a hardware register */
++static u8 ene_hw_read_reg(struct ene_device *dev, u16 reg)
++{
++ outb(reg >> 8 , dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
++ return inb(dev->hw_io + ENE_IO);
++}
++
++/* write a hardware register */
++static void ene_hw_write_reg(struct ene_device *dev, u16 reg, u8 value)
++{
++ outb(reg >> 8 , dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
++ outb(value, dev->hw_io + ENE_IO);
++}
++
++/* change specific bits in hardware register */
++static void ene_hw_write_reg_mask(struct ene_device *dev,
++ u16 reg, u8 value, u8 mask)
++{
++ u8 regvalue;
++
++ outb(reg >> 8 , dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
++
++ regvalue = inb(dev->hw_io + ENE_IO) & ~mask;
++ regvalue |= (value & mask);
++ outb(regvalue, dev->hw_io + ENE_IO);
++}
++
++
++/* which half of hardware buffer we read now ?*/
++static int hw_get_buf_pointer(struct ene_device *dev)
++{
++ return 4 * (ene_hw_read_reg(dev, ENE_FW_BUFFER_POINTER)
++ & ENE_FW_BUFFER_POINTER_HIGH);
++}
++
++
++/* read irq status and ack it */
++static int ene_hw_irq_status(struct ene_device *dev)
++{
++ u8 irq_status = ene_hw_read_reg(dev, ENE_IRQ_STATUS);
++
++ if (!irq_status & ENE_IRQ_STATUS_IR)
++ return 0;
++
++ ene_hw_write_reg(dev, ENE_IRQ_STATUS, irq_status & ~ENE_IRQ_STATUS_IR);
++ return 1;
++}
++
++
++/* hardware initialization */
++static int ene_hw_init(void *data)
++{
++ struct ene_device *dev = (struct ene_device *)data;
++ dev->in_use = 1;
++
++ ene_hw_write_reg(dev, ENE_IRQ, dev->irq << 1);
++ ene_hw_write_reg(dev, ENE_ADC_UNK2, 0x00);
++ ene_hw_write_reg(dev, ENE_ADC_SAMPLE_PERIOD, sample_period);
++ ene_hw_write_reg(dev, ENE_ADC_UNK1, 0x07);
++ ene_hw_write_reg(dev, ENE_UNK1, 0x01);
++ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, ENE_FW_ENABLE | ENE_FW_IRQ,
++ ENE_FW_ENABLE | ENE_FW_IRQ);
++
++ /* ack any pending irqs - just in case */
++ ene_hw_irq_status(dev);
++
++ /* enter idle mode */
++ ene_set_idle(dev, 1);
++
++ /* clear stats */
++ dev->sample = 0;
++ return 0;
++}
++
++/* deinitialization */
++static void ene_hw_deinit(void *data)
++{
++ struct ene_device *dev = (struct ene_device *)data;
++
++ /* disable hardware IRQ and firmware flag */
++ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, 0,
++ ENE_FW_ENABLE | ENE_FW_IRQ);
++
++ ene_set_idle(dev, 1);
++ dev->in_use = 0;
++}
++
++/* sends current sample to userspace */
++static void send_sample(struct ene_device *dev)
++{
++ int value = abs(dev->sample) & PULSE_MASK;
++
++ if (dev->sample > 0)
++ value |= PULSE_BIT;
++
++ if (!lirc_buffer_full(dev->lirc_driver->rbuf)) {
++ lirc_buffer_write(dev->lirc_driver->rbuf, (void *) &value);
++ wake_up(&dev->lirc_driver->rbuf->wait_poll);
++ }
++ dev->sample = 0;
++}
++
++/* this updates current sample */
++static void update_sample(struct ene_device *dev, int sample)
++{
++ if (!dev->sample)
++ dev->sample = sample;
++ else if (same_sign(dev->sample, sample))
++ dev->sample += sample;
++ else {
++ send_sample(dev);
++ dev->sample = sample;
++ }
++}
++
++/* enable or disable idle mode */
++static void ene_set_idle(struct ene_device *dev, int idle)
++{
++ struct timeval now;
++
++ ene_hw_write_reg_mask(dev, ENE_ADC_SAMPLE_PERIOD,
++ idle & enable_idle ? 0 : ENE_ADC_SAMPLE_OVERFLOW,
++ ENE_ADC_SAMPLE_OVERFLOW);
++
++ dev->idle = idle;
++
++
++ /* remember when we have entered the idle mode */
++ if (idle) {
++ do_gettimeofday(&dev->gap_start);
++ return;
++ }
++
++ /* send the gap between keypresses now */
++ do_gettimeofday(&now);
++
++ if (now.tv_sec - dev->gap_start.tv_sec > 16)
++ dev->sample = space(PULSE_MASK);
++ else
++ dev->sample = dev->sample +
++ space(1000000ull * (now.tv_sec - dev->gap_start.tv_sec))
++ + space(now.tv_usec - dev->gap_start.tv_usec);
++
++ if (abs(dev->sample) > PULSE_MASK)
++ dev->sample = space(PULSE_MASK);
++ send_sample(dev);
++}
++
++
++/* interrupt handler */
++static irqreturn_t ene_hw_irq(int irq, void *data)
++{
++ u16 hw_address;
++ u8 hw_value;
++ int i, hw_sample;
++ int space;
++
++ struct ene_device *dev = (struct ene_device *)data;
++
++ if (!ene_hw_irq_status(dev))
++ return IRQ_NONE;
++
++ hw_address = ENE_SAMPLE_BUFFER + hw_get_buf_pointer(dev);
++
++ for (i = 0 ; i < ENE_SAMPLES_SIZE ; i++) {
++
++ hw_value = ene_hw_read_reg(dev, hw_address + i);
++ space = hw_value & ENE_SAMPLE_LOW_MASK;
++ hw_value &= ~ENE_SAMPLE_LOW_MASK;
++
++ /* no more data */
++ if (!(hw_value))
++ break;
++
++ /* calculate hw sample */
++ hw_sample = hw_value * sample_period;
++
++ if (space)
++ hw_sample *= -1;
++
++ /* overflow sample recieved, handle it */
++ if (hw_value == ENE_SAMPLE_OVERFLOW) {
++
++ if (dev->idle)
++ continue;
++
++ if (dev->sample > 0 || abs(dev->sample) <= ENE_MAXGAP)
++ update_sample(dev, hw_sample);
++ else
++ ene_set_idle(dev, 1);
++
++ continue;
++ }
++
++ /* normal first sample recieved*/
++ if (dev->idle) {
++ ene_set_idle(dev, 0);
++
++ /* discard first recieved value, its random
++ since its the time signal was off before
++ first pulse if idle mode is enabled, HW
++ does that for us */
++
++ if (!enable_idle)
++ continue;
++ }
++
++ update_sample(dev, hw_sample);
++ send_sample(dev);
++ }
++ return IRQ_HANDLED;
++}
++
++static int ene_probe(struct pnp_dev *pnp_dev,
++ const struct pnp_device_id *dev_id)
++{
++ struct resource *res;
++ struct ene_device *dev;
++ struct lirc_driver *lirc_driver;
++ int error = -ENOMEM;
++
++ dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
++
++ if (!dev)
++ goto err1;
++
++ dev->pnp_dev = pnp_dev;
++ pnp_set_drvdata(pnp_dev, dev);
++
++ error = -EINVAL;
++ if (sample_period < 5) {
++
++ printk(KERN_ERR ENE_DRIVER_NAME ": sample period must be at "
++ "least 5 ms, (at least 30 recommended)\n");
++
++ goto err1;
++ }
++
++ /* validate and read resources */
++ error = -ENODEV;
++ res = pnp_get_resource(pnp_dev, IORESOURCE_IO, 0);
++ if (!pnp_resource_valid(res))
++ goto err2;
++
++ dev->hw_io = res->start;
++
++ if (pnp_resource_len(res) < ENE_MAX_IO)
++ goto err2;
++
++
++ res = pnp_get_resource(pnp_dev, IORESOURCE_IRQ, 0);
++ if (!pnp_resource_valid(res))
++ goto err2;
++
++ dev->irq = res->start;
++
++ /* prepare lirc interface */
++ error = -ENOMEM;
++ lirc_driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++
++ if (!lirc_driver)
++ goto err2;
++
++ dev->lirc_driver = lirc_driver;
++
++ strcpy(lirc_driver->name, ENE_DRIVER_NAME);
++ lirc_driver->minor = -1;
++ lirc_driver->code_length = sizeof(int) * 8;
++ lirc_driver->features = LIRC_CAN_REC_MODE2;
++ lirc_driver->data = dev;
++ lirc_driver->set_use_inc = ene_hw_init;
++ lirc_driver->set_use_dec = ene_hw_deinit;
++ lirc_driver->dev = &pnp_dev->dev;
++ lirc_driver->owner = THIS_MODULE;
++
++ lirc_driver->rbuf = kzalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++
++ if (!lirc_driver->rbuf)
++ goto err3;
++
++ if (lirc_buffer_init(lirc_driver->rbuf,
++ sizeof(int), sizeof(int) * 256))
++ goto err4;
++
++ error = -ENODEV;
++ if (lirc_register_driver(lirc_driver))
++ goto err5;
++
++ /* claim the resources */
++ error = -EBUSY;
++ if (!request_region(dev->hw_io, ENE_MAX_IO, ENE_DRIVER_NAME))
++ goto err6;
++
++ if (request_irq(dev->irq, ene_hw_irq,
++ IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev))
++ goto err7;
++
++
++ /* check firmware version */
++ error = -ENODEV;
++ if (ene_hw_read_reg(dev, ENE_FW_VERSION) != ENE_FW_VER_SUPP) {
++ printk(KERN_WARNING ENE_DRIVER_NAME ": "
++ "unsupported firmware found, aborting\n");
++ goto err8;
++ }
++
++ printk(KERN_NOTICE ENE_DRIVER_NAME ": "
++ "driver has been succesfully loaded\n");
++ return 0;
++
++err8:
++ free_irq(dev->irq, dev);
++err7:
++ release_region(dev->hw_io, ENE_MAX_IO);
++err6:
++ lirc_unregister_driver(lirc_driver->minor);
++err5:
++ lirc_buffer_free(lirc_driver->rbuf);
++err4:
++ kfree(lirc_driver->rbuf);
++err3:
++ kfree(lirc_driver);
++err2:
++ kfree(dev);
++err1:
++ return error;
++}
++
++
++static void ene_remove(struct pnp_dev *pnp_dev)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ ene_hw_deinit(dev);
++ free_irq(dev->irq, dev);
++ release_region(dev->hw_io, ENE_MAX_IO);
++ lirc_unregister_driver(dev->lirc_driver->minor);
++ lirc_buffer_free(dev->lirc_driver->rbuf);
++ kfree(dev->lirc_driver);
++ kfree(dev);
++}
++
++
++#ifdef CONFIG_PM
++static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, ENE_FW_WAKE, ENE_FW_WAKE);
++ return 0;
++}
++
++
++static int ene_resume(struct pnp_dev *pnp_dev)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ if (dev->in_use)
++ ene_hw_init(dev);
++
++ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, 0, ENE_FW_WAKE);
++ return 0;
++}
++
++#endif
++
++
++static const struct pnp_device_id ene_ids[] = {
++ { .id = "ENE0100", },
++ { },
++};
++
++static struct pnp_driver ene_driver = {
++ .name = ENE_DRIVER_NAME,
++ .id_table = ene_ids,
++ .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
++
++ .probe = ene_probe,
++ .remove = __devexit_p(ene_remove),
++
++#ifdef CONFIG_PM
++ .suspend = ene_suspend,
++ .resume = ene_resume,
++#endif
++};
++
++
++static int __init ene_init(void)
++{
++ return pnp_register_driver(&ene_driver);
++}
++
++static void ene_exit(void)
++{
++ pnp_unregister_driver(&ene_driver);
++}
++
++
++module_param(sample_period, int, S_IRUGO);
++MODULE_PARM_DESC(sample_period, "Hardware sample period (50 us default)");
++
++
++module_param(enable_idle, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(enable_idle,
++"Allow hardware to signal when IR pulse starts, disable if your remote"
++"doesn't send a sync pulse");
++
++
++MODULE_DEVICE_TABLE(pnp, ene_ids);
++MODULE_DESCRIPTION("LIRC driver for KB3924/ENE0100 CIR port");
++MODULE_AUTHOR("Maxim Levitsky");
++MODULE_LICENSE("GPL");
++
++module_init(ene_init);
++module_exit(ene_exit);
+diff --git a/drivers/input/lirc/lirc_ene0100.h b/drivers/input/lirc/lirc_ene0100.h
+new file mode 100644
+index 0000000..7db3545
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ene0100.h
+@@ -0,0 +1,100 @@
++/*
++ * driver for ENE KB3924 CIR (also known as ENE0100)
++ *
++ * Copyright (C) 2009 Maxim Levitsky <maximlevitsky at gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include "lirc.h"
++#include "lirc_dev.h"
++
++/* hardware address */
++#define ENE_STATUS 0 /* hardware status - unused */
++#define ENE_ADDR_HI 1 /* hi byte of register address */
++#define ENE_ADDR_LO 2 /* low byte of register address */
++#define ENE_IO 3 /* read/write window */
++#define ENE_MAX_IO 3
++
++
++/* 8 bytes of samples, divided in 2 halfs*/
++#define ENE_SAMPLE_BUFFER 0xF8F0
++#define ENE_SAMPLE_LOW_MASK (1 << 7)
++#define ENE_SAMPLE_VALUE_MASK 0x7F
++#define ENE_SAMPLE_OVERFLOW 0x7F
++#define ENE_SAMPLES_SIZE 4
++
++
++/* firmware settings */
++#define ENE_FW_SETTINGS 0xF8F8
++#define ENE_FW_ENABLE (1 << 0) /* enable fw processing */
++#define ENE_FW_WAKE (1 << 6) /* enable wake from S3 */
++#define ENE_FW_IRQ (1 << 7) /* enable interrupt */
++
++
++/* buffer pointer, tells which half of ENE_SAMPLE_BUFFER to read */
++#define ENE_FW_BUFFER_POINTER 0xF8F9
++#define ENE_FW_BUFFER_POINTER_HIGH (1 << 0)
++
++
++/* IRQ registers block */
++#define ENE_IRQ 0xFD09 /* IRQ number */
++#define ENE_UNK1 0xFD17 /* unknown setting = 1 */
++#define ENE_IRQ_STATUS 0xFD80 /* irq status */
++#define ENE_IRQ_STATUS_IR (1 << 5) /* IR irq */
++
++
++/* ADC settings */
++#define ENE_ADC_UNK1 0xFEC0 /* unknown setting = 7 */
++#define ENE_ADC_UNK2 0xFEC1 /* unknown setting = 0 */
++#define ENE_ADC_SAMPLE_PERIOD 0xFEC8 /* sample period in us */
++#define ENE_ADC_SAMPLE_OVERFLOW (1 << 7) /* interrupt on
++ overflows if set */
++
++/* fimware version */
++#define ENE_FW_VERSION 0xFF00
++#define ENE_FW_VER_SUPP 0xC0
++
++
++#define same_sign(a, b) ((((a) > 0) && (b) > 0) || ((a) < 0 && (b) < 0))
++
++#define ENE_DRIVER_NAME "enecir"
++
++#define ENE_MAXGAP 5000000 /* this is amount of
++ time we wait before
++ turning the
++ sampler, chosen
++ arbitry */
++
++#define space(len) (-(len)) /* add a space */
++
++
++struct ene_device {
++ struct pnp_dev *pnp_dev;
++ struct lirc_driver *lirc_driver;
++
++ /* hw settings */
++ unsigned long hw_io;
++ int irq;
++
++ /* device data */
++ int idle;
++ int sample;
++ int in_use;
++
++ struct timeval gap_start;
++};
++
diff --git a/drivers/input/lirc/lirc_i2c.c b/drivers/input/lirc/lirc_i2c.c
new file mode 100644
index 0000000..e27d937
@@ -2869,10 +3442,10 @@ index 0000000..ff49bdd
+
diff --git a/drivers/input/lirc/lirc_imon.c b/drivers/input/lirc/lirc_imon.c
new file mode 100644
-index 0000000..3c87d94
+index 0000000..05fe0c7
--- /dev/null
+++ b/drivers/input/lirc/lirc_imon.c
-@@ -0,0 +1,2298 @@
+@@ -0,0 +1,2297 @@
+/*
+ * lirc_imon.c: LIRC/VFD/LCD driver for SoundGraph iMON IR/VFD/LCD
+ * including the iMON PAD model
@@ -3273,8 +3846,7 @@ index 0000000..3c87d94
+ "open. 0=don't disable, 1=disable. (default: don't disable)");
+module_param(pad_thresh, int, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(pad_thresh, "Threshold at which a pad push registers as an "
-+ "arrow key in kbd mode (default 80 on newer devices, 15 on "
-+ "older devices)");
++ "arrow key in kbd mode (default: 28)");
+
+static void free_imon_context(struct imon_context *context)
+{
@@ -4288,7 +4860,7 @@ index 0000000..3c87d94
+ len = 8;
+ timeout = 500; /* in msecs */
+ /* (2*threshold) x (2*threshold) square */
-+ threshold = pad_thresh ? pad_thresh : 80;
++ threshold = pad_thresh ? pad_thresh : 28;
+ rel_x = buf[2];
+ rel_y = buf[3];
+
Index: perf
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/perf,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.3
diff -u -p -r1.2.2.2 -r1.2.2.3
--- perf 13 Aug 2009 21:26:09 -0000 1.2.2.2
+++ perf 18 Aug 2009 19:26:45 -0000 1.2.2.3
@@ -1,2 +1,12 @@
#!/bin/sh
-exec /usr/libexec/perf.$(uname -r)
+
+# In pathological situations, this will print some error about uname.
+kverrel="`uname -r`" || exit
+
+exec "/usr/libexec/perf.$kverrel" ${1+"$@"}
+rc=$?
+
+# We're still here, so the exec failed.
+echo >&2 "Sorry, your kernel ($kverrel) doesn't support perf."
+
+exit $rc
Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.24
retrieving revision 1.976.2.25
diff -u -p -r1.976.2.24 -r1.976.2.25
--- sources 14 Aug 2009 18:31:26 -0000 1.976.2.24
+++ sources 18 Aug 2009 19:26:45 -0000 1.976.2.25
@@ -1,2 +1,3 @@
7a80058a6382e5108cdb5554d1609615 linux-2.6.30.tar.bz2
056ab6d753725f14d2d44eec2c1f471f patch-2.6.31-rc6.bz2
+67d0b1917a80534f0a7f3aa2c2897509 patch-2.6.31-rc6-git3.bz2
Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.23
retrieving revision 1.888.2.24
diff -u -p -r1.888.2.23 -r1.888.2.24
--- upstream 14 Aug 2009 18:31:26 -0000 1.888.2.23
+++ upstream 18 Aug 2009 19:26:45 -0000 1.888.2.24
@@ -1,2 +1,3 @@
linux-2.6.30.tar.bz2
patch-2.6.31-rc6.bz2
+patch-2.6.31-rc6-git3.bz2
xen.pvops.patch:
arch/x86/Kconfig | 4
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 | 13
arch/x86/kernel/Makefile | 1
arch/x86/kernel/acpi/boot.c | 18
arch/x86/kernel/acpi/sleep.c | 2
arch/x86/kernel/apic/io_apic.c | 37
arch/x86/kernel/cpu/Makefile | 5
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/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 | 6
arch/x86/xen/apic.c | 60 +
arch/x86/xen/enlighten.c | 96 +
arch/x86/xen/mmu.c | 455 ++++++++
arch/x86/xen/pci-swiotlb.c | 53 +
arch/x86/xen/pci.c | 86 +
arch/x86/xen/setup.c | 50
arch/x86/xen/smp.c | 2
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/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/pci.h | 2
drivers/pci/xen-iommu.c | 332 ++++++
drivers/xen/Kconfig | 36
drivers/xen/Makefile | 19
drivers/xen/acpi.c | 23
drivers/xen/balloon.c | 152 ++
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 | 322 +++++-
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 | 116 ++
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/asm-generic/pci.h | 2
include/linux/interrupt.h | 1
include/linux/page-flags.h | 18
include/linux/pci.h | 6
include/xen/Kbuild | 1
include/xen/acpi.h | 23
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 | 21
include/xen/interface/platform.h | 222 ++++
include/xen/interface/xen-mca.h | 429 ++++++++
include/xen/interface/xen.h | 43
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
133 files changed, 10574 insertions(+), 1315 deletions(-)
Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.33
retrieving revision 1.1.2.34
diff -u -p -r1.1.2.33 -r1.1.2.34
--- xen.pvops.patch 14 Aug 2009 18:31:26 -0000 1.1.2.33
+++ xen.pvops.patch 18 Aug 2009 19:26:45 -0000 1.1.2.34
@@ -1757,18 +1757,19 @@ index 7f3eba0..e4fc8ea 100644
extern void flush_tlb_current_task(void);
extern void flush_tlb_mm(struct mm_struct *);
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h
-index 9c371e4..3da450b 100644
+index 9c371e4..7de93f3 100644
--- a/arch/x86/include/asm/xen/hypercall.h
+++ b/arch/x86/include/asm/xen/hypercall.h
-@@ -45,6 +45,7 @@
+@@ -45,6 +45,8 @@
#include <xen/interface/xen.h>
#include <xen/interface/sched.h>
#include <xen/interface/physdev.h>
+#include <xen/interface/platform.h>
++#include <xen/interface/xen-mca.h>
/*
* The hypercall asms have to meet several constraints:
-@@ -200,6 +201,23 @@ extern struct { char _entry[32]; } hypercall_page[];
+@@ -200,6 +202,23 @@ extern struct { char _entry[32]; } hypercall_page[];
(type)__res; \
})
@@ -1792,10 +1793,17 @@ index 9c371e4..3da450b 100644
static inline int
HYPERVISOR_set_trap_table(struct trap_info *table)
{
-@@ -282,6 +300,13 @@ HYPERVISOR_set_timer_op(u64 timeout)
+@@ -282,6 +301,20 @@ HYPERVISOR_set_timer_op(u64 timeout)
}
static inline int
++HYPERVISOR_mca(struct xen_mc *mc_op)
++{
++ mc_op->interface_version = XEN_MCA_INTERFACE_VERSION;
++ return _hypercall1(int, mca, mc_op);
++}
++
++static inline int
+HYPERVISOR_dom0_op(struct xen_platform_op *platform_op)
+{
+ platform_op->interface_version = XENPF_INTERFACE_VERSION;
@@ -1806,7 +1814,7 @@ index 9c371e4..3da450b 100644
HYPERVISOR_set_debugreg(int reg, unsigned long value)
{
return _hypercall2(int, set_debugreg, reg, value);
-@@ -424,6 +449,14 @@ MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set)
+@@ -424,6 +457,14 @@ MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set)
mcl->args[0] = set;
}
@@ -1821,7 +1829,7 @@ index 9c371e4..3da450b 100644
static inline void
MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va,
pte_t new_val, unsigned long flags)
-@@ -432,12 +465,11 @@ MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va,
+@@ -432,12 +473,11 @@ MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va,
mcl->args[0] = va;
if (sizeof(new_val) == sizeof(long)) {
mcl->args[1] = new_val.pte;
@@ -2156,6 +2164,22 @@ index d2ed6c5..205e277 100644
ioapic_res = ioapic_setup_resources();
for (i = 0; i < nr_ioapics; i++) {
if (smp_found_config) {
+diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
+index 3efcb2b..3e058a1 100644
+--- a/arch/x86/kernel/cpu/Makefile
++++ b/arch/x86/kernel/cpu/Makefile
+@@ -7,6 +7,11 @@ ifdef CONFIG_FUNCTION_TRACER
+ CFLAGS_REMOVE_common.o = -pg
+ endif
+
++ifdef CONFIG_CC_STACKPROTECTOR
++# Also, load_percpu_segment shouldn't have stack-protector on it
++CFLAGS_REMOVE_common.o += -fstack-protector -fstack-protector-all
++endif
++
+ obj-y := intel_cacheinfo.o addon_cpuid_features.o
+ obj-y += proc.o capflags.o powerflags.o common.o
+ obj-y += vmware.o hypervisor.o
diff --git a/arch/x86/kernel/cpu/mtrr/Makefile b/arch/x86/kernel/cpu/mtrr/Makefile
index f4361b5..404e458 100644
--- a/arch/x86/kernel/cpu/mtrr/Makefile
@@ -3491,10 +3515,19 @@ 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 172438f..6d697e5 100644
+index 172438f..e19c48e 100644
--- a/arch/x86/xen/Makefile
+++ b/arch/x86/xen/Makefile
-@@ -12,3 +12,7 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
+@@ -5,6 +5,8 @@ CFLAGS_REMOVE_time.o = -pg
+ CFLAGS_REMOVE_irq.o = -pg
+ endif
+
++CFLAGS_REMOVE_enlighten.o += -fstack-protector -fstack-protector-all
++
+ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
+ time.o xen-asm.o xen-asm_$(BITS).o \
+ grant-table.o suspend.o
+@@ -12,3 +14,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
@@ -3570,7 +3603,7 @@ index 0000000..496f07d
+#endif
+}
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 0a1700a..6ba04d4 100644
+index 0a1700a..2e58099 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);
@@ -3621,19 +3654,32 @@ index 0a1700a..6ba04d4 100644
}
asm(XEN_EMULATE_PREFIX "cpuid"
-@@ -207,8 +221,11 @@ static __init void xen_init_cpuid_mask(void)
- cpuid_leaf1_edx_mask =
- ~((1 << X86_FEATURE_MCE) | /* disable MCE */
- (1 << X86_FEATURE_MCA) | /* disable MCA */
-+ (1 << X86_FEATURE_PAT) | /* disable PAT */
- (1 << X86_FEATURE_ACC)); /* thermal monitoring */
+@@ -205,16 +219,20 @@ static __init void xen_init_cpuid_mask(void)
+ unsigned int ax, bx, cx, dx;
-+ cpuid_leaf81_edx_mask = ~(1 << (X86_FEATURE_GBPAGES % 32));
+ cpuid_leaf1_edx_mask =
+- ~((1 << X86_FEATURE_MCE) | /* disable MCE */
+- (1 << X86_FEATURE_MCA) | /* disable MCA */
+- (1 << X86_FEATURE_ACC)); /* thermal monitoring */
++ ~((1 << X86_FEATURE_ACC) | /* thermal monitoring */
++ (1 << X86_FEATURE_PAT)); /* disable PAT */
+
++ cpuid_leaf81_edx_mask = ~(1 << (X86_FEATURE_GBPAGES % 32));
+
if (!xen_initial_domain())
cpuid_leaf1_edx_mask &=
- ~((1 << X86_FEATURE_APIC) | /* disable local APIC */
-@@ -597,6 +614,18 @@ static void xen_set_iopl_mask(unsigned mask)
+- ~((1 << X86_FEATURE_APIC) | /* disable local APIC */
++ ~((1 << X86_FEATURE_MCE) | /* disable MCE */
++ (1 << X86_FEATURE_MCA) | /* disable MCA */
++ (1 << X86_FEATURE_APIC) | /* disable local APIC */
+ (1 << X86_FEATURE_ACPI)); /* disable ACPI */
+
+ ax = 1;
++ cx = 0;
+ xen_cpuid(&ax, &bx, &cx, &dx);
+
+ /* cpuid claims we support xsave; try enabling it to see what happens */
+@@ -597,6 +615,18 @@ static void xen_set_iopl_mask(unsigned mask)
HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
}
@@ -3652,7 +3698,16 @@ index 0a1700a..6ba04d4 100644
static void xen_io_delay(void)
{
}
-@@ -906,6 +935,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
+@@ -634,7 +664,7 @@ static u32 xen_safe_apic_wait_icr_idle(void)
+ return 0;
+ }
+
+-static void set_xen_basic_apic_ops(void)
++static __init void set_xen_basic_apic_ops(void)
+ {
+ apic->read = xen_apic_read;
+ apic->write = xen_apic_write;
+@@ -906,6 +936,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
.load_sp0 = xen_load_sp0,
.set_iopl_mask = xen_set_iopl_mask,
@@ -3660,16 +3715,60 @@ index 0a1700a..6ba04d4 100644
.io_delay = xen_io_delay,
/* Xen takes care of %gs when switching to usermode for us */
-@@ -978,6 +1008,8 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -974,10 +1005,6 @@ asmlinkage void __init xen_start_kernel(void)
- xen_setup_features();
+ xen_domain_type = XEN_PV_DOMAIN;
-+ xen_setup_machphys_mapping();
-+
+- BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0);
+-
+- xen_setup_features();
+-
/* Install Xen paravirt ops */
pv_info = xen_info;
pv_init_ops = xen_init_ops;
-@@ -1031,6 +1063,8 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -986,8 +1013,15 @@ asmlinkage void __init xen_start_kernel(void)
+ pv_apic_ops = xen_apic_ops;
+ pv_mmu_ops = xen_mmu_ops;
+
+- xen_init_irq_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.
++ */
++ load_percpu_segment(0);
++#endif
+
++ xen_init_irq_ops();
+ xen_init_cpuid_mask();
+
+ #ifdef CONFIG_X86_LOCAL_APIC
+@@ -997,6 +1031,10 @@ asmlinkage void __init xen_start_kernel(void)
+ set_xen_basic_apic_ops();
+ #endif
+
++ xen_setup_machphys_mapping();
++
++ 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;
+@@ -1004,13 +1042,6 @@ asmlinkage void __init xen_start_kernel(void)
+
+ machine_ops = xen_machine_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.
+- */
+- load_percpu_segment(0);
+-#endif
+ /*
+ * The only reliable way to retain the initial address of the
+ * percpu gdt_page is to remember it here, so we can go and
+@@ -1031,6 +1062,8 @@ asmlinkage void __init xen_start_kernel(void)
if (!xen_initial_domain())
__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
@@ -3678,7 +3777,7 @@ index 0a1700a..6ba04d4 100644
#ifdef CONFIG_X86_64
/* Work out if we support NX */
check_efer();
-@@ -1045,6 +1079,7 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1045,6 +1078,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);
@@ -3686,7 +3785,7 @@ index 0a1700a..6ba04d4 100644
init_mm.pgd = pgd;
-@@ -1054,9 +1089,21 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1054,9 +1088,21 @@ asmlinkage void __init xen_start_kernel(void)
if (xen_feature(XENFEAT_supervisor_mode_kernel))
pv_info.kernel_rpl = 0;
@@ -3708,7 +3807,7 @@ index 0a1700a..6ba04d4 100644
#ifdef CONFIG_X86_32
/* set up basic CPUID stuff */
cpu_detect(&new_cpu_data);
-@@ -1075,6 +1122,16 @@ asmlinkage void __init xen_start_kernel(void)
+@@ -1075,6 +1121,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);
@@ -5430,7 +5529,7 @@ index 0000000..b1a7d93
+}
+
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
-index cab100a..3b1c421 100644
+index cab100a..84c3553 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -28,6 +28,29 @@ config XEN_DEV_EVTCHN
@@ -5463,7 +5562,7 @@ index cab100a..3b1c421 100644
config XENFS
tristate "Xen filesystem"
depends on XEN
-@@ -60,4 +83,11 @@ config XEN_SYS_HYPERVISOR
+@@ -60,4 +83,15 @@ config XEN_SYS_HYPERVISOR
Create entries under /sys/hypervisor describing the Xen
hypervisor environment. When running native or in another
virtual environment, /sys/hypervisor will still be present,
@@ -5477,12 +5576,15 @@ index cab100a..3b1c421 100644
+config XEN_S3
+ def_bool y
+ depends on XEN_DOM0 && ACPI
-\ No newline at end of file
++
++config XEN_MCE
++ def_bool y
++ depends on XEN_DOM0 && X86_64 && X86_MCE_INTEL
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
-index ec2a39b..7ff6d27 100644
+index ec2a39b..2d4f7b1 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
-@@ -1,9 +1,13 @@
+@@ -1,9 +1,14 @@
-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/
@@ -5504,7 +5606,7 @@ index ec2a39b..7ff6d27 100644
+obj-$(CONFIG_XENFS) += xenfs/
+obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o
+obj-$(CONFIG_XEN_S3) += acpi.o
-\ No newline at end of file
++obj-$(CONFIG_XEN_MCE) += mce.o
diff --git a/drivers/xen/acpi.c b/drivers/xen/acpi.c
new file mode 100644
index 0000000..e6d3d0e
@@ -7945,6 +8047,31 @@ index abad71b..8bcbf6b 100644
+
+ xen_setup_pirqs();
}
+diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
+index af03195..79bedba 100644
+--- a/drivers/xen/evtchn.c
++++ b/drivers/xen/evtchn.c
+@@ -38,7 +38,6 @@
+ #include <linux/string.h>
+ #include <linux/errno.h>
+ #include <linux/fs.h>
+-#include <linux/errno.h>
+ #include <linux/miscdevice.h>
+ #include <linux/major.h>
+ #include <linux/proc_fs.h>
+diff --git a/drivers/xen/features.c b/drivers/xen/features.c
+index 99eda16..9e2b64f 100644
+--- a/drivers/xen/features.c
++++ b/drivers/xen/features.c
+@@ -18,7 +18,7 @@
+ u8 xen_features[XENFEAT_NR_SUBMAPS * 32] __read_mostly;
+ EXPORT_SYMBOL_GPL(xen_features);
+
+-void xen_setup_features(void)
++void __init xen_setup_features(void)
+ {
+ struct xen_feature_info fi;
+ int i, j;
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 7d8f531..58996c9 100644
--- a/drivers/xen/grant-table.c
@@ -8059,6 +8186,225 @@ index 7d8f531..58996c9 100644
int gnttab_resume(void)
{
if (max_nr_grant_frames() < nr_grant_frames)
+diff --git a/drivers/xen/mce.c b/drivers/xen/mce.c
+new file mode 100644
+index 0000000..ef838f2
+--- /dev/null
++++ b/drivers/xen/mce.c
+@@ -0,0 +1,213 @@
++/******************************************************************************
++ * mce.c
++ * Add Machine Check event Logging support in DOM0
++ *
++ * Driver for receiving and logging machine check event
++ *
++ * Copyright (c) 2008, 2009 Intel Corporation
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version 2
++ * as published by the Free Software Foundation; or, when distributed
++ * separately from the Linux kernel or incorporated into other
++ * software packages, subject to the following license:
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this source file (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use, copy, modify,
++ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
++ * and to permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <xen/interface/xen.h>
++#include <asm/xen/hypervisor.h>
++#include <xen/events.h>
++#include <xen/interface/vcpu.h>
++#include <asm/xen/hypercall.h>
++#include <asm/mce.h>
++
++static mc_info_t *g_mi;
++static mcinfo_logical_cpu_t *g_physinfo;
++static uint32_t ncpus;
++
++static int convert_log(struct mc_info *mi)
++{
++ struct mcinfo_common *mic = NULL;
++ struct mcinfo_global *mc_global;
++ struct mcinfo_bank *mc_bank;
++ struct mce m;
++ int i, found = 0;
++
++ x86_mcinfo_lookup(&mic, mi, MC_TYPE_GLOBAL);
++ WARN_ON(!mic);
++
++ mce_setup(&m);
++ mc_global = (struct mcinfo_global *)mic;
++ m.mcgstatus = mc_global->mc_gstatus;
++ m.apicid = mc_global->mc_apicid;
++ for (i = 0; i < ncpus; i++) {
++ if (g_physinfo[i].mc_apicid == m.apicid) {
++ found = 1;
++ break;
++ }
++ }
++ WARN_ON(!found);
++
++ m.socketid = g_physinfo[i].mc_chipid;
++ m.cpu = m.extcpu = g_physinfo[i].mc_cpunr;
++ m.cpuvendor = (__u8)g_physinfo[i].mc_vendor;
++ x86_mcinfo_lookup(&mic, mi, MC_TYPE_BANK);
++ do {
++ if (mic == NULL || mic->size == 0)
++ break;
++ if (mic->type == MC_TYPE_BANK) {
++ mc_bank = (struct mcinfo_bank *)mic;
++ m.misc = mc_bank->mc_misc;
++ m.status = mc_bank->mc_status;
++ m.addr = mc_bank->mc_addr;
++ m.tsc = mc_bank->mc_tsc;
++ m.bank = mc_bank->mc_bank;
++ /*log this record*/
++ mce_log(&m);
++ }
++ mic = x86_mcinfo_next(mic);
++ } while (1);
++
++ return 0;
++}
++
++/*pv_ops domain mce virq handler, logging physical mce error info*/
++static irqreturn_t mce_dom_interrupt(int irq, void *dev_id)
++{
++ xen_mc_t mc_op;
++ int result = 0;
++
++ mc_op.cmd = XEN_MC_fetch;
++ mc_op.interface_version = XEN_MCA_INTERFACE_VERSION;
++ set_xen_guest_handle(mc_op.u.mc_fetch.data, g_mi);
++urgent:
++ mc_op.u.mc_fetch.flags = XEN_MC_URGENT;
++ result = HYPERVISOR_mca(&mc_op);
++ if (result || mc_op.u.mc_fetch.flags & XEN_MC_NODATA ||
++ mc_op.u.mc_fetch.flags & XEN_MC_FETCHFAILED)
++ goto nonurgent;
++ else {
++ result = convert_log(g_mi);
++ if (result)
++ goto end;
++ /* After fetching the error event log entry from DOM0,
++ * we need to dec the refcnt and release the entry.
++ * The entry is reserved and inc refcnt when filling
++ * the error log entry.
++ */
++ mc_op.u.mc_fetch.flags = XEN_MC_URGENT | XEN_MC_ACK;
++ result = HYPERVISOR_mca(&mc_op);
++ goto urgent;
++ }
++nonurgent:
++ mc_op.u.mc_fetch.flags = XEN_MC_NONURGENT;
++ result = HYPERVISOR_mca(&mc_op);
++ if (result || mc_op.u.mc_fetch.flags & XEN_MC_NODATA ||
++ mc_op.u.mc_fetch.flags & XEN_MC_FETCHFAILED)
++ goto end;
++ else {
++ result = convert_log(g_mi);
++ if (result)
++ goto end;
++ /* After fetching the error event log entry from DOM0,
++ * we need to dec the refcnt and release the entry. The
++ * entry is reserved and inc refcnt when filling the
++ * error log entry.
++ */
++ mc_op.u.mc_fetch.flags = XEN_MC_NONURGENT | XEN_MC_ACK;
++ result = HYPERVISOR_mca(&mc_op);
++ goto nonurgent;
++ }
++end:
++ return IRQ_HANDLED;
++}
++
++static int bind_virq_for_mce(void)
++{
++ int ret;
++ xen_mc_t mc_op;
++
++ ret = bind_virq_to_irqhandler(VIRQ_MCA, 0,
++ mce_dom_interrupt, 0, "mce", NULL);
++
++ if (ret < 0) {
++ printk(KERN_ERR "MCE_DOM0_LOG: bind_virq for DOM0 failed\n");
++ return ret;
++ }
++
++ g_mi = kmalloc(sizeof(struct mc_info), GFP_KERNEL);
++
++ if (!g_mi)
++ return -ENOMEM;
++
++ /* Fetch physical CPU Numbers */
++ mc_op.cmd = XEN_MC_physcpuinfo;
++ mc_op.interface_version = XEN_MCA_INTERFACE_VERSION;
++ set_xen_guest_handle(mc_op.u.mc_physcpuinfo.info, g_physinfo);
++ ret = HYPERVISOR_mca(&mc_op);
++ if (ret) {
++ printk(KERN_ERR "MCE_DOM0_LOG: Fail to get physical CPU numbers\n");
++ kfree(g_mi);
++ return ret;
++ }
++
++ /* Fetch each CPU Physical Info for later reference*/
++ ncpus = mc_op.u.mc_physcpuinfo.ncpus;
++ g_physinfo = kmalloc(sizeof(struct mcinfo_logical_cpu)*ncpus,
++ GFP_KERNEL);
++ if (!g_physinfo) {
++ kfree(g_mi);
++ return -ENOMEM;
++ }
++ set_xen_guest_handle(mc_op.u.mc_physcpuinfo.info, g_physinfo);
++ ret = HYPERVISOR_mca(&mc_op);
++ if (ret) {
++ printk(KERN_ERR "MCE_DOM0_LOG: Fail to get physical CPUs info\n");
++ kfree(g_mi);
++ kfree(g_physinfo);
++ return ret;
++ }
++
++ return 0;
++}
++
++static int __init mcelog_init(void)
++{
++ /* Only DOM0 is responsible for MCE logging */
++ if (xen_initial_domain())
++ return bind_virq_for_mce();
++
++ return 0;
++}
++
++
++static void __exit mcelog_cleanup(void)
++{
++ kfree(g_mi);
++ kfree(g_physinfo);
++}
++module_init(mcelog_init);
++module_exit(mcelog_cleanup);
++
++MODULE_LICENSE("GPL");
diff --git a/drivers/xen/netback/Makefile b/drivers/xen/netback/Makefile
new file mode 100644
index 0000000..a01a1a3
@@ -13498,6 +13844,441 @@ index 0000000..83e4714
+DEFINE_GUEST_HANDLE_STRUCT(xen_platform_op_t);
+
+#endif /* __XEN_PUBLIC_PLATFORM_H__ */
+diff --git a/include/xen/interface/xen-mca.h b/include/xen/interface/xen-mca.h
+new file mode 100644
+index 0000000..f31fdab
+--- /dev/null
++++ b/include/xen/interface/xen-mca.h
+@@ -0,0 +1,429 @@
++/******************************************************************************
++ * arch-x86/mca.h
++ *
++ * Contributed by Advanced Micro Devices, Inc.
++ * Author: Christoph Egger <Christoph.Egger at amd.com>
++ *
++ * Guest OS machine check interface to x86 Xen.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ */
++
++/* Full MCA functionality has the following Usecases from the guest side:
++ *
++ * Must have's:
++ * 1. Dom0 and DomU register machine check trap callback handlers
++ * (already done via "set_trap_table" hypercall)
++ * 2. Dom0 registers machine check event callback handler
++ * (doable via EVTCHNOP_bind_virq)
++ * 3. Dom0 and DomU fetches machine check data
++ * 4. Dom0 wants Xen to notify a DomU
++ * 5. Dom0 gets DomU ID from physical address
++ * 6. Dom0 wants Xen to kill DomU (already done for "xm destroy")
++ *
++ * Nice to have's:
++ * 7. Dom0 wants Xen to deactivate a physical CPU
++ * This is better done as separate task, physical CPU hotplugging,
++ * and hypercall(s) should be sysctl's
++ * 8. Page migration proposed from Xen NUMA work, where Dom0 can tell Xen to
++ * move a DomU (or Dom0 itself) away from a malicious page
++ * producing correctable errors.
++ * 9. offlining physical page:
++ * Xen free's and never re-uses a certain physical page.
++ * 10. Testfacility: Allow Dom0 to write values into machine check MSR's
++ * and tell Xen to trigger a machine check
++ */
++
++#ifndef __XEN_PUBLIC_ARCH_X86_MCA_H__
++#define __XEN_PUBLIC_ARCH_X86_MCA_H__
++
++/* Hypercall */
++#define __HYPERVISOR_mca __HYPERVISOR_arch_0
++
++/*
++ * The xen-unstable repo has interface version 0x03000001; out interface
++ * is incompatible with that and any future minor revisions, so we
++ * choose a different version number range that is numerically less
++ * than that used in xen-unstable.
++ */
++#define XEN_MCA_INTERFACE_VERSION 0x01ecc003
++
++/* IN: Dom0 calls hypercall to retrieve nonurgent error log entry */
++#define XEN_MC_NONURGENT 0x0001
++/* IN: Dom0/DomU calls hypercall to retrieve urgent error log entry */
++#define XEN_MC_URGENT 0x0002
++/* IN: Dom0 acknowledges previosly-fetched error log entry */
++#define XEN_MC_ACK 0x0004
++
++/* OUT: All is ok */
++#define XEN_MC_OK 0x0
++/* OUT: Domain could not fetch data. */
++#define XEN_MC_FETCHFAILED 0x1
++/* OUT: There was no machine check data to fetch. */
++#define XEN_MC_NODATA 0x2
++/* OUT: Between notification time and this hypercall an other
++ * (most likely) correctable error happened. The fetched data,
++ * does not match the original machine check data. */
++#define XEN_MC_NOMATCH 0x4
++
++/* OUT: DomU did not register MC NMI handler. Try something else. */
++#define XEN_MC_CANNOTHANDLE 0x8
++/* OUT: Notifying DomU failed. Retry later or try something else. */
++#define XEN_MC_NOTDELIVERED 0x10
++/* Note, XEN_MC_CANNOTHANDLE and XEN_MC_NOTDELIVERED are mutually exclusive. */
++
++
++#ifndef __ASSEMBLY__
++
++#define VIRQ_MCA VIRQ_ARCH_0 /* G. (DOM0) Machine Check Architecture */
++
++/*
++ * Machine Check Architecure:
++ * structs are read-only and used to report all kinds of
++ * correctable and uncorrectable errors detected by the HW.
++ * Dom0 and DomU: register a handler to get notified.
++ * Dom0 only: Correctable errors are reported via VIRQ_MCA
++ */
++#define MC_TYPE_GLOBAL 0
++#define MC_TYPE_BANK 1
++#define MC_TYPE_EXTENDED 2
++#define MC_TYPE_RECOVERY 3
++
++struct mcinfo_common {
++ uint16_t type; /* structure type */
++ uint16_t size; /* size of this struct in bytes */
++};
++
++
++#define MC_FLAG_CORRECTABLE (1 << 0)
++#define MC_FLAG_UNCORRECTABLE (1 << 1)
++#define MC_FLAG_RECOVERABLE (1 << 2)
++#define MC_FLAG_POLLED (1 << 3)
++#define MC_FLAG_RESET (1 << 4)
++#define MC_FLAG_CMCI (1 << 5)
++#define MC_FLAG_MCE (1 << 6)
++/* contains global x86 mc information */
++struct mcinfo_global {
++ struct mcinfo_common common;
++
++ /* running domain at the time in error (most likely
++ * the impacted one) */
++ uint16_t mc_domid;
++ uint16_t mc_vcpuid; /* virtual cpu scheduled for mc_domid */
++ uint32_t mc_socketid; /* physical socket of the physical core */
++ uint16_t mc_coreid; /* physical impacted core */
++ uint16_t mc_core_threadid; /* core thread of physical core */
++ uint32_t mc_apicid;
++ uint32_t mc_flags;
++ uint64_t mc_gstatus; /* global status */
++};
++
++/* contains bank local x86 mc information */
++struct mcinfo_bank {
++ struct mcinfo_common common;
++
++ uint16_t mc_bank; /* bank nr */
++ uint16_t mc_domid; /* Usecase 5: domain referenced by mc_addr on
++ * privileged pv-ops dom and if mc_addr is valid.
++ * Never valid on DomU. */
++ uint64_t mc_status; /* bank status */
++ uint64_t mc_addr; /* bank address, only valid
++ * if addr bit is set in mc_status */
++ uint64_t mc_misc;
++ uint64_t mc_ctrl2;
++ uint64_t mc_tsc;
++};
++
++
++struct mcinfo_msr {
++ uint64_t reg; /* MSR */
++ uint64_t value; /* MSR value */
++};
++
++/* contains mc information from other
++ * or additional mc MSRs */
++struct mcinfo_extended {
++ struct mcinfo_common common;
++
++ /* You can fill up to five registers.
++ * If you need more, then use this structure
++ * multiple times. */
++
++ uint32_t mc_msrs; /* Number of msr with valid values. */
++ /*
++ * Currently Intel extended MSR (32/64) include all gp registers
++ * and E(R)FLAGS, E(R)IP, E(R)MISC, up to 11/19 of them might be
++ * useful at present. So expand this array to 16/32 to leave room.
++ */
++ struct mcinfo_msr mc_msr[sizeof(void *) * 4];
++};
++
++/* Recovery Action flags. Giving recovery result information to DOM0 */
++
++/* Xen takes successful recovery action, the error is recovered */
++#define REC_ACTION_RECOVERED (0x1 << 0)
++/* No action is performed by XEN */
++#define REC_ACTION_NONE (0x1 << 1)
++/* It's possible DOM0 might take action ownership in some case */
++#define REC_ACTION_NEED_RESET (0x1 << 2)
++
++/* Different Recovery Action types, if the action is performed successfully,
++ * REC_ACTION_RECOVERED flag will be returned.
++ */
++
++/* Page Offline Action */
++#define MC_ACTION_PAGE_OFFLINE (0x1 << 0)
++/* CPU offline Action */
++#define MC_ACTION_CPU_OFFLINE (0x1 << 1)
++/* L3 cache disable Action */
++#define MC_ACTION_CACHE_SHRINK (0x1 << 2)
++
++/* Below interface used between XEN/DOM0 for passing XEN's recovery action
++ * information to DOM0.
++ * usage Senario: After offlining broken page, XEN might pass its page offline
++ * recovery action result to DOM0. DOM0 will save the information in
++ * non-volatile memory for further proactive actions, such as offlining the
++ * easy broken page earlier when doing next reboot.
++*/
++struct page_offline_action {
++ /* Params for passing the offlined page number to DOM0 */
++ uint64_t mfn;
++ uint64_t status;
++};
++
++struct cpu_offline_action {
++ /* Params for passing the identity of the offlined CPU to DOM0 */
++ uint32_t mc_socketid;
++ uint16_t mc_coreid;
++ uint16_t mc_core_threadid;
++};
++
++#define MAX_UNION_SIZE 16
++struct mcinfo_recovery {
++ struct mcinfo_common common;
++ uint16_t mc_bank; /* bank nr */
++ /* Recovery Action Flags defined above such as REC_ACTION_DONE */
++ uint8_t action_flags;
++ /* Recovery Action types defined above such as MC_ACTION_PAGE_OFFLINE */
++ uint8_t action_types;
++ /* In future if more than one recovery action permitted per error bank,
++ * a mcinfo_recovery data array will be returned
++ */
++ union {
++ struct page_offline_action page_retire;
++ struct cpu_offline_action cpu_offline;
++ uint8_t pad[MAX_UNION_SIZE];
++ } action_info;
++};
++
++
++#define MCINFO_HYPERCALLSIZE 1024
++#define MCINFO_MAXSIZE 768
++
++struct mc_info {
++ /* Number of mcinfo_* entries in mi_data */
++ uint32_t mi_nentries;
++ uint32_t _pad0;
++ uint64_t mi_data[(MCINFO_MAXSIZE - 1) / 8];
++};
++typedef struct mc_info mc_info_t;
++DEFINE_GUEST_HANDLE_STRUCT(mc_info);
++
++#define __MC_MSR_ARRAYSIZE 8
++#define __MC_NMSRS 1
++#define MC_NCAPS 7 /* 7 CPU feature flag words */
++#define MC_CAPS_STD_EDX 0 /* cpuid level 0x00000001 (%edx) */
++#define MC_CAPS_AMD_EDX 1 /* cpuid level 0x80000001 (%edx) */
++#define MC_CAPS_TM 2 /* cpuid level 0x80860001 (TransMeta) */
++#define MC_CAPS_LINUX 3 /* Linux-defined */
++#define MC_CAPS_STD_ECX 4 /* cpuid level 0x00000001 (%ecx) */
++#define MC_CAPS_VIA 5 /* cpuid level 0xc0000001 */
++#define MC_CAPS_AMD_ECX 6 /* cpuid level 0x80000001 (%ecx) */
++
++struct mcinfo_logical_cpu {
++ uint32_t mc_cpunr;
++ uint32_t mc_chipid;
++ uint16_t mc_coreid;
++ uint16_t mc_threadid;
++ uint32_t mc_apicid;
++ uint32_t mc_clusterid;
++ uint32_t mc_ncores;
++ uint32_t mc_ncores_active;
++ uint32_t mc_nthreads;
++ int32_t mc_cpuid_level;
++ uint32_t mc_family;
++ uint32_t mc_vendor;
++ uint32_t mc_model;
++ uint32_t mc_step;
++ char mc_vendorid[16];
++ char mc_brandid[64];
++ uint32_t mc_cpu_caps[MC_NCAPS];
++ uint32_t mc_cache_size;
++ uint32_t mc_cache_alignment;
++ int32_t mc_nmsrvals;
++ struct mcinfo_msr mc_msrvalues[__MC_MSR_ARRAYSIZE];
++};
++typedef struct mcinfo_logical_cpu mcinfo_logical_cpu_t;
++DEFINE_GUEST_HANDLE_STRUCT(mcinfo_logical_cpu);
++
++
++/*
++ * OS's should use these instead of writing their own lookup function
++ * each with its own bugs and drawbacks.
++ * We use macros instead of static inline functions to allow guests
++ * to include this header in assembly files (*.S).
++ */
++/* Prototype:
++ * uint32_t x86_mcinfo_nentries(struct mc_info *mi);
++ */
++#define x86_mcinfo_nentries(_mi) \
++ ((_mi)->mi_nentries)
++/* Prototype:
++ * struct mcinfo_common *x86_mcinfo_first(struct mc_info *mi);
++ */
++#define x86_mcinfo_first(_mi) \
++ ((struct mcinfo_common *)(_mi)->mi_data)
++/* Prototype:
++ * struct mcinfo_common *x86_mcinfo_next(struct mcinfo_common *mic);
++ */
++#define x86_mcinfo_next(_mic) \
++ ((struct mcinfo_common *)((uint8_t *)(_mic) + (_mic)->size))
++
++/* Prototype:
++ * void x86_mcinfo_lookup(void *ret, struct mc_info *mi, uint16_t type);
++ */
++
++static inline void x86_mcinfo_lookup
++ (struct mcinfo_common **ret, struct mc_info *mi, uint16_t type)
++{
++ uint32_t found = 0, i;
++ struct mcinfo_common *mic;
++
++ *ret = NULL;
++ if (!mi)
++ return;
++ mic = x86_mcinfo_first(mi);
++
++ for (i = 0; i < x86_mcinfo_nentries(mi); i++) {
++ if (mic->type == type) {
++ found = 1;
++ break;
++ }
++ mic = x86_mcinfo_next(mic);
++ }
++
++ *ret = found ? mic : NULL;
++}
++/* Usecase 1
++ * Register machine check trap callback handler
++ * (already done via "set_trap_table" hypercall)
++ */
++
++/* Usecase 2
++ * Dom0 registers machine check event callback handler
++ * done by EVTCHNOP_bind_virq
++ */
++
++/* Usecase 3
++ * Fetch machine check data from hypervisor.
++ * Note, this hypercall is special, because both Dom0 and DomU must use this.
++ */
++#define XEN_MC_fetch 1
++struct xen_mc_fetch {
++ /* IN/OUT variables.
++ * IN: XEN_MC_NONURGENT, XEN_MC_URGENT,
++ * XEN_MC_ACK if ack'king an earlier fetch
++ * OUT: XEN_MC_OK, XEN_MC_FETCHAILED,
++ * XEN_MC_NODATA, XEN_MC_NOMATCH
++ */
++ uint32_t flags;
++ uint32_t _pad0;
++ /* OUT: id for ack, IN: id we are ack'ing */
++ uint64_t fetch_id;
++
++ /* OUT variables. */
++ GUEST_HANDLE(mc_info) data;
++};
++typedef struct xen_mc_fetch xen_mc_fetch_t;
++DEFINE_GUEST_HANDLE_STRUCT(xen_mc_fetch);
++
++
++/* Usecase 4
++ * This tells the hypervisor to notify a DomU about the machine check error
++ */
++#define XEN_MC_notifydomain 2
++struct xen_mc_notifydomain {
++ /* IN variables. */
++ uint16_t mc_domid;/* The unprivileged domain to notify. */
++ uint16_t mc_vcpuid;/* The vcpu in mc_domid to notify.
++ * Usually echo'd value from the fetch hypercall. */
++
++ /* IN/OUT variables. */
++ uint32_t flags;
++
++/* OUT: XEN_MC_OK, XEN_MC_CANNOTHANDLE, XEN_MC_NOTDELIVERED, XEN_MC_NOMATCH */
++};
++typedef struct xen_mc_notifydomain xen_mc_notifydomain_t;
++DEFINE_GUEST_HANDLE_STRUCT(xen_mc_notifydomain);
++
++#define XEN_MC_physcpuinfo 3
++struct xen_mc_physcpuinfo {
++ /* IN/OUT */
++ uint32_t ncpus;
++ uint32_t _pad0;
++ /* OUT */
++ GUEST_HANDLE(mcinfo_logical_cpu) info;
++};
++
++#define XEN_MC_msrinject 4
++#define MC_MSRINJ_MAXMSRS 8
++struct xen_mc_msrinject {
++ /* IN */
++ uint32_t mcinj_cpunr;/* target processor id */
++ uint32_t mcinj_flags;/* see MC_MSRINJ_F_* below */
++ uint32_t mcinj_count;/* 0 .. count-1 in array are valid */
++ uint32_t _pad0;
++ struct mcinfo_msr mcinj_msr[MC_MSRINJ_MAXMSRS];
++};
++
++/* Flags for mcinj_flags above; bits 16-31 are reserved */
++#define MC_MSRINJ_F_INTERPOSE 0x1
++
++#define XEN_MC_mceinject 5
++struct xen_mc_mceinject {
++ unsigned int mceinj_cpunr; /* target processor id */
++};
++
++struct xen_mc {
++ uint32_t cmd;
++ uint32_t interface_version; /* XEN_MCA_INTERFACE_VERSION */
++ union {
++ struct xen_mc_fetch mc_fetch;
++ struct xen_mc_notifydomain mc_notifydomain;
++ struct xen_mc_physcpuinfo mc_physcpuinfo;
++ struct xen_mc_msrinject mc_msrinject;
++ struct xen_mc_mceinject mc_mceinject;
++ } u;
++};
++typedef struct xen_mc xen_mc_t;
++DEFINE_GUEST_HANDLE_STRUCT(xen_mc);
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* __XEN_PUBLIC_ARCH_X86_MCA_H__ */
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h
index 2befa3e..327db61 100644
--- a/include/xen/interface/xen.h
xen.pvops.post.patch:
b/arch/x86/include/asm/paravirt_types.h | 3 +++
b/arch/x86/kernel/pci-swiotlb.c | 5 ++---
b/arch/x86/kernel/process_32.c | 2 ++
b/arch/x86/pci/common.c | 16 ++++++++++++++++
drivers/pci/pci.h | 2 ++
5 files changed, 25 insertions(+), 3 deletions(-)
Index: xen.pvops.post.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.post.patch,v
retrieving revision 1.1.2.20
retrieving revision 1.1.2.21
diff -u -p -r1.1.2.20 -r1.1.2.21
--- xen.pvops.post.patch 10 Aug 2009 21:22:20 -0000 1.1.2.20
+++ xen.pvops.post.patch 18 Aug 2009 19:26:48 -0000 1.1.2.21
@@ -1,5 +1,4 @@
Reapply and merge in Fedora changes
-Test some patches to get STACKPROTECTOR working
--- a/drivers/pci/pci.h 2009-02-25 20:16:13.000000000 +0000
+++ b/drivers/pci/pci.h 2009-02-25 20:40:21.000000000 +0000
@@ -84,47 +83,3 @@ index 6af96ee..1e66b18 100644
#endif
if (xen_wants_swiotlb())
swiotlb = 1;
---- linux-2.6.29.x86_64/arch/x86/xen/Makefile.orig 2009-04-24 22:54:26.000000000 +0100
-+++ linux-2.6.29.x86_64/arch/x86/xen/Makefile 2009-04-26 16:46:57.000000000 +0100
-@@ -4,6 +4,10 @@
- CFLAGS_REMOVE_time.o = -pg
- CFLAGS_REMOVE_irq.o = -pg
- endif
-+nostackp := $(call cc-option, -fno-stack-protector)
-+CFLAGS_enlighten.o := $(nostackp)
-+CFLAGS_mmu.o := $(nostackp)
-+CFLAGS_irq.o := $(nostackp)
-
- obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
- time.o xen-asm.o xen-asm_$(BITS).o \
---- linux-2.6.29.x86_64/arch/x86/xen/enlighten.c.orig 2009-04-26 16:49:24.000000000 +0100
-+++ linux-2.6.29.x86_64/arch/x86/xen/enlighten.c 2009-04-26 21:57:28.000000000 +0100
-@@ -965,7 +965,7 @@
-
- xen_domain_type = XEN_PV_DOMAIN;
-
-- BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0);
-+/* BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0); */
-
- xen_setup_features();
-
---- linux-2.6.29.x86_64/drivers/xen/Makefile.orig 2009-04-26 16:49:25.000000000 +0100
-+++ linux-2.6.29.x86_64/drivers/xen/Makefile 2009-04-26 22:26:55.000000000 +0100
-@@ -1,3 +1,6 @@
-+nostackp := $(call cc-option, -fno-stack-protector)
-+CFLAGS_features.o := $(nostackp)
-+
- obj-y += grant-table.o features.o events.o manage.o biomerge.o
- obj-y += xenbus/
-
---- vanilla-2.6.30-rc3/arch/x86/kernel/cpu/Makefile 2009-04-23 20:13:34.000000000 +0100
-+++ linux-2.6.29.x86_64/arch/x86/kernel/cpu/Makefile 2009-04-27 21:47:28.000000000 +0100
-@@ -6,6 +6,8 @@
- ifdef CONFIG_FUNCTION_TRACER
- CFLAGS_REMOVE_common.o = -pg
- endif
-+nostackp := $(call cc-option, -fno-stack-protector)
-+CFLAGS_common.o := $(nostackp)
-
- obj-y := intel_cacheinfo.o addon_cpuid_features.o
- obj-y += proc.o capflags.o powerflags.o common.o
--- config-powerpc64-kdump DELETED ---
More information about the fedora-extras-commits
mailing list