WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 04 Oct 2007 17:41:57 -0700
Delivery-date: Thu, 04 Oct 2007 18:47:27 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1190917379 21600
# Node ID 87e425da49741a7284ee819ffed38a8f51b72dfa
# Parent  351a9d2f7dd43be82188c263de153c9165a5e04e
# Parent  c1c57fea77e93a992e668f1c634fb8e8922ea52d
merge with linux-2.6.18-xen.hg
---
 arch/i386/boot-xen/Makefile                |   19 ----
 arch/i386/Makefile                         |   15 +--
 arch/i386/boot/Makefile                    |   10 ++
 arch/i386/kernel/cpu/cpufreq/powernow-k8.c |  122 +++++++++++++++++++----------
 arch/i386/kernel/cpu/cpufreq/powernow-k8.h |    3 
 arch/i386/kernel/time-xen.c                |   40 +++++++++
 arch/i386/mm/pgtable-xen.c                 |   92 +--------------------
 arch/i386/pci/irq.c                        |    6 +
 arch/x86_64/Makefile                       |   14 +--
 arch/x86_64/boot/Makefile                  |   10 ++
 drivers/i2c/busses/Kconfig                 |    1 
 drivers/i2c/busses/i2c-i801.c              |    2 
 drivers/scsi/ahci.c                        |   22 +++++
 drivers/scsi/ata_piix.c                    |   43 +++++++++-
 drivers/xen/blkfront/blkfront.c            |    2 
 drivers/xen/xenbus/xenbus_probe.c          |   11 ++
 fs/lockd/svc.c                             |    3 
 fs/nfs/sysctl.c                            |    5 -
 include/linux/pci_ids.h                    |    7 +
 include/linux/sysctl.h                     |   14 ++-
 include/xen/interface/platform.h           |   11 ++
 sound/pci/hda/hda_intel.c                  |    3 
 22 files changed, 276 insertions(+), 179 deletions(-)

diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/Makefile
--- a/arch/i386/Makefile        Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/i386/Makefile        Thu Sep 27 12:22:59 2007 -0600
@@ -111,20 +111,18 @@ AFLAGS += $(mflags-y)
 
 boot := arch/i386/boot
 
-PHONY += zImage bzImage compressed zlilo bzlilo \
+PHONY += zImage bzImage vmlinuz compressed zlilo bzlilo \
          zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
 
 ifdef CONFIG_XEN
 CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
-boot := arch/i386/boot-xen
-.PHONY: vmlinuz
 all: vmlinuz
 
+# KBUILD_IMAGE specifies the target image being built
+KBUILD_IMAGE := $(boot)/vmlinuz
+
 vmlinuz: vmlinux
-       $(Q)$(MAKE) $(build)=$(boot) $@
-
-install:
-       $(Q)$(MAKE) $(build)=$(boot) $@
+       $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
 else
 all: bzImage
 
@@ -145,10 +143,10 @@ zdisk bzdisk: vmlinux
 
 fdimage fdimage144 fdimage288 isoimage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
+endif
 
 install:
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
-endif
 
 archclean:
        $(Q)$(MAKE) $(clean)=arch/i386/boot
@@ -167,4 +165,3 @@ CLEAN_FILES += arch/$(ARCH)/boot/fdimage
 CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
               arch/$(ARCH)/boot/image.iso \
               arch/$(ARCH)/boot/mtools.conf
-CLEAN_FILES += vmlinuz vmlinux-stripped
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/boot-xen/Makefile
--- a/arch/i386/boot-xen/Makefile       Fri Sep 21 12:54:11 2007 -0600
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-
-OBJCOPYFLAGS := -g --strip-unneeded
-
-vmlinuz: vmlinux-stripped FORCE
-       $(call if_changed,gzip)
-
-vmlinux-stripped: vmlinux FORCE
-       $(call if_changed,objcopy)
-
-INSTALL_ROOT := $(patsubst %/boot,%,$(INSTALL_PATH))
-
-XINSTALL_NAME ?= $(KERNELRELEASE)
-install:
-       mkdir -p $(INSTALL_ROOT)/boot
-       install -m0644 vmlinuz 
$(INSTALL_ROOT)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
-       install -m0644 vmlinux 
$(INSTALL_ROOT)/boot/vmlinux-syms-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
-       install -m0664 .config 
$(INSTALL_ROOT)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
-       install -m0664 System.map 
$(INSTALL_ROOT)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
-       ln -f -s vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 
$(INSTALL_ROOT)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL)$(shell [ -e 
$(objtree)/localversion-xen ] && cat 
$(objtree)/localversion-xen)$(INSTALL_SUFFIX)
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/boot/Makefile
--- a/arch/i386/boot/Makefile   Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/i386/boot/Makefile   Thu Sep 27 12:22:59 2007 -0600
@@ -26,7 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
 #RAMDISK := -DRAMDISK=512
 
 targets                := vmlinux.bin bootsect bootsect.o \
-                  setup setup.o zImage bzImage
+                  setup setup.o zImage bzImage vmlinuz vmlinux-stripped
 subdir-        := compressed
 
 hostprogs-y    := tools/build
@@ -133,5 +133,13 @@ zlilo: $(BOOTIMAGE)
        cp System.map $(INSTALL_PATH)/
        if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
 
+$(obj)/vmlinuz: $(obj)/vmlinux-stripped FORCE
+       $(call if_changed,gzip)
+       @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
+
+$(obj)/vmlinux-stripped: OBJCOPYFLAGS := -g --strip-unneeded
+$(obj)/vmlinux-stripped: vmlinux FORCE
+       $(call if_changed,objcopy)
+
 install:
        sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) 
System.map "$(INSTALL_PATH)"
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/kernel/cpu/cpufreq/powernow-k8.c
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c        Fri Sep 21 12:54:11 
2007 -0600
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c        Thu Sep 27 12:22:59 
2007 -0600
@@ -738,6 +738,7 @@ static int find_psb_table(struct powerno
 
                data->numps = psb->numps;
                dprintk("numpstates: 0x%x\n", data->numps);
+               data->starting_core_affinity = cpumask_of_cpu(0);
                return fill_powernow_table(data, (struct pst_s *)(psb+1), 
maxvid);
        }
        /*
@@ -758,15 +759,43 @@ static int find_psb_table(struct powerno
 #ifdef CONFIG_X86_POWERNOW_K8_ACPI
 static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, 
unsigned int index)
 {
-       if (!data->acpi_data.state_count || (cpu_family == CPU_HW_PSTATE))
+       if (!data->acpi_data->state_count || (cpu_family == CPU_HW_PSTATE))
                return;
 
-       data->irt = (data->acpi_data.states[index].control >> IRT_SHIFT) & 
IRT_MASK;
-       data->rvo = (data->acpi_data.states[index].control >> RVO_SHIFT) & 
RVO_MASK;
-       data->exttype = (data->acpi_data.states[index].control >> 
EXT_TYPE_SHIFT) & EXT_TYPE_MASK;
-       data->plllock = (data->acpi_data.states[index].control >> PLL_L_SHIFT) 
& PLL_L_MASK;
-       data->vidmvs = 1 << ((data->acpi_data.states[index].control >> 
MVS_SHIFT) & MVS_MASK);
-       data->vstable = (data->acpi_data.states[index].control >> VST_SHIFT) & 
VST_MASK;
+       data->irt = (data->acpi_data->states[index].control >> IRT_SHIFT) & 
IRT_MASK;
+       data->rvo = (data->acpi_data->states[index].control >> RVO_SHIFT) & 
RVO_MASK;
+       data->exttype = (data->acpi_data->states[index].control >> 
EXT_TYPE_SHIFT) & EXT_TYPE_MASK;
+       data->plllock = (data->acpi_data->states[index].control >> PLL_L_SHIFT) 
& PLL_L_MASK;
+       data->vidmvs = 1 << ((data->acpi_data->states[index].control >> 
MVS_SHIFT) & MVS_MASK);
+       data->vstable = (data->acpi_data->states[index].control >> VST_SHIFT) & 
VST_MASK;
+}
+
+static struct acpi_processor_performance *acpi_perf_data[NR_CPUS];
+static int preregister_valid = 0;
+
+static int powernow_k8_cpu_preinit_acpi()
+{
+       int i; 
+       struct acpi_processor_performance *data;
+       for_each_possible_cpu(i) {
+               data = kzalloc(sizeof(struct acpi_processor_performance),
+                               GFP_KERNEL);
+               if (!data) {
+                       int j;
+                       for_each_possible_cpu(j) {
+                               kfree(acpi_perf_data[j]);
+                               acpi_perf_data[j] = NULL;
+                       }
+                       return -ENODEV;
+               }
+               acpi_perf_data[i] = data;
+       }
+
+       if (acpi_processor_preregister_performance(acpi_perf_data))
+               return -ENODEV;
+       else 
+               preregister_valid = 1;
+       return 0;
 }
 
 static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
@@ -774,28 +803,29 @@ static int powernow_k8_cpu_init_acpi(str
        struct cpufreq_frequency_table *powernow_table;
        int ret_val;
 
-       if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) {
+       data->acpi_data = acpi_perf_data[data->cpu];
+       if (acpi_processor_register_performance(data->acpi_data, data->cpu)) {
                dprintk("register performance failed: bad ACPI data\n");
                return -EIO;
        }
 
        /* verify the data contained in the ACPI structures */
-       if (data->acpi_data.state_count <= 1) {
+       if (data->acpi_data->state_count <= 1) {
                dprintk("No ACPI P-States\n");
                goto err_out;
        }
 
-       if ((data->acpi_data.control_register.space_id != 
ACPI_ADR_SPACE_FIXED_HARDWARE) ||
-               (data->acpi_data.status_register.space_id != 
ACPI_ADR_SPACE_FIXED_HARDWARE)) {
+       if ((data->acpi_data->control_register.space_id != 
ACPI_ADR_SPACE_FIXED_HARDWARE) ||
+               (data->acpi_data->status_register.space_id != 
ACPI_ADR_SPACE_FIXED_HARDWARE)) {
                dprintk("Invalid control/status registers (%x - %x)\n",
-                       data->acpi_data.control_register.space_id,
-                       data->acpi_data.status_register.space_id);
+                       data->acpi_data->control_register.space_id,
+                       data->acpi_data->status_register.space_id);
                goto err_out;
        }
 
        /* fill in data->powernow_table */
        powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table)
-               * (data->acpi_data.state_count + 1)), GFP_KERNEL);
+               * (data->acpi_data->state_count + 1)), GFP_KERNEL);
        if (!powernow_table) {
                dprintk("powernow_table memory alloc failure\n");
                goto err_out;
@@ -808,28 +838,43 @@ static int powernow_k8_cpu_init_acpi(str
        if (ret_val)
                goto err_out_mem;
 
-       powernow_table[data->acpi_data.state_count].frequency = 
CPUFREQ_TABLE_END;
-       powernow_table[data->acpi_data.state_count].index = 0;
+       powernow_table[data->acpi_data->state_count].frequency = 
CPUFREQ_TABLE_END;
+       powernow_table[data->acpi_data->state_count].index = 0;
        data->powernow_table = powernow_table;
 
        /* fill in data */
-       data->numps = data->acpi_data.state_count;
+       data->numps = data->acpi_data->state_count;
        print_basics(data);
        powernow_k8_acpi_pst_values(data, 0);
 
        /* notify BIOS that we exist */
        acpi_processor_notify_smm(THIS_MODULE);
 
+       /* determine affinity, from ACPI if available */
+       if (preregister_valid) {
+               if ((data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ALL) ||
+                   (data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ANY))
+                       data->starting_core_affinity = 
data->acpi_data->shared_cpu_map;
+               else
+                       data->starting_core_affinity = 
cpumask_of_cpu(data->cpu);
+       } else {
+               /* best guess from family if not */
+               if (cpu_family == CPU_HW_PSTATE)
+                       data->starting_core_affinity = 
cpumask_of_cpu(data->cpu);
+               else
+                       data->starting_core_affinity = cpu_core_map[data->cpu];
+       }
+
        return 0;
 
 err_out_mem:
        kfree(powernow_table);
 
 err_out:
-       acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
-
-       /* data->acpi_data.state_count informs us at ->exit() whether ACPI was 
used */
-       data->acpi_data.state_count = 0;
+       acpi_processor_unregister_performance(data->acpi_data, data->cpu);
+
+       /* data->acpi_data->state_count informs us at ->exit() whether ACPI was 
used */
+       data->acpi_data->state_count = 0;
 
        return -ENODEV;
 }
@@ -838,13 +883,13 @@ static int fill_powernow_table_pstate(st
 {
        int i;
 
-       for (i = 0; i < data->acpi_data.state_count; i++) {
+       for (i = 0; i < data->acpi_data->state_count; i++) {
                u32 index;
                u32 hi = 0, lo = 0;
                u32 fid;
                u32 did;
 
-               index = data->acpi_data.states[i].control & HW_PSTATE_MASK;
+               index = data->acpi_data->states[i].control & HW_PSTATE_MASK;
                if (index > MAX_HW_PSTATE) {
                        printk(KERN_ERR PFX "invalid pstate %d - bad value 
%d.\n", i, index);
                        printk(KERN_ERR PFX "Please report to BIOS 
manufacturer\n");
@@ -865,10 +910,10 @@ static int fill_powernow_table_pstate(st
 
                powernow_table[i].frequency = find_khz_freq_from_fiddid(fid, 
did);
 
-               if (powernow_table[i].frequency != 
(data->acpi_data.states[i].core_frequency * 1000)) {
+               if (powernow_table[i].frequency != 
(data->acpi_data->states[i].core_frequency * 1000)) {
                        printk(KERN_INFO PFX "invalid freq entries %u kHz vs. 
%u kHz\n",
                                powernow_table[i].frequency,
-                               (unsigned int) 
(data->acpi_data.states[i].core_frequency * 1000));
+                               (unsigned int) 
(data->acpi_data->states[i].core_frequency * 1000));
                        powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID;
                        continue;
                }
@@ -880,16 +925,16 @@ static int fill_powernow_table_fidvid(st
 {
        int i;
        int cntlofreq = 0;
-       for (i = 0; i < data->acpi_data.state_count; i++) {
+       for (i = 0; i < data->acpi_data->state_count; i++) {
                u32 fid;
                u32 vid;
 
                if (data->exttype) {
-                       fid = data->acpi_data.states[i].status & EXT_FID_MASK;
-                       vid = (data->acpi_data.states[i].status >> VID_SHIFT) & 
EXT_VID_MASK;
+                       fid = data->acpi_data->states[i].status & EXT_FID_MASK;
+                       vid = (data->acpi_data->states[i].status >> VID_SHIFT) 
& EXT_VID_MASK;
                } else {
-                       fid = data->acpi_data.states[i].control & FID_MASK;
-                       vid = (data->acpi_data.states[i].control >> VID_SHIFT) 
& VID_MASK;
+                       fid = data->acpi_data->states[i].control & FID_MASK;
+                       vid = (data->acpi_data->states[i].control >> VID_SHIFT) 
& VID_MASK;
                }
 
                dprintk("   %d : fid 0x%x, vid 0x%x\n", i, fid, vid);
@@ -930,10 +975,10 @@ static int fill_powernow_table_fidvid(st
                                cntlofreq = i;
                }
 
-               if (powernow_table[i].frequency != 
(data->acpi_data.states[i].core_frequency * 1000)) {
+               if (powernow_table[i].frequency != 
(data->acpi_data->states[i].core_frequency * 1000)) {
                        printk(KERN_INFO PFX "invalid freq entries %u kHz vs. 
%u kHz\n",
                                powernow_table[i].frequency,
-                               (unsigned int) 
(data->acpi_data.states[i].core_frequency * 1000));
+                               (unsigned int) 
(data->acpi_data->states[i].core_frequency * 1000));
                        powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID;
                        continue;
                }
@@ -943,14 +988,15 @@ static int fill_powernow_table_fidvid(st
 
 static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
 {
-       if (data->acpi_data.state_count)
-               acpi_processor_unregister_performance(&data->acpi_data, 
data->cpu);
+       if (data->acpi_data->state_count)
+               acpi_processor_unregister_performance(data->acpi_data, 
data->cpu);
 }
 
 #else
 static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return 
-ENODEV; }
 static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; 
}
 static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, 
unsigned int index) { return; }
+static int powernow_k8_cpu_preinit_acpi() { return -ENODEV; }
 #endif /* CONFIG_X86_POWERNOW_K8_ACPI */
 
 /* Take a frequency, and issue the fid/vid transition command */
@@ -1164,7 +1210,7 @@ static int __cpuinit powernowk8_cpu_init
                 * an UP version, and is deprecated by AMD.
                 */
                if (num_online_cpus() != 1) {
-                       printk(KERN_ERR PFX "MP systems not supported by PSB 
BIOS structure\n");
+                       printk(KERN_ERR PFX "Your BIOS does not provide _PSS 
objects.  PowerNow! does not work on SMP systems without _PSS objects.  
Complain to your BIOS vendor.\n");
                        kfree(data);
                        return -ENODEV;
                }
@@ -1204,10 +1250,7 @@ static int __cpuinit powernowk8_cpu_init
        set_cpus_allowed(current, oldmask);
 
        pol->governor = CPUFREQ_DEFAULT_GOVERNOR;
-       if (cpu_family == CPU_HW_PSTATE)
-               pol->cpus = cpumask_of_cpu(pol->cpu);
-       else
-               pol->cpus = cpu_core_map[pol->cpu];
+       pol->cpus = data->starting_core_affinity;
        data->available_cores = &(pol->cpus);
 
        /* Take a crude guess here.
@@ -1323,6 +1366,7 @@ static int __cpuinit powernowk8_init(voi
        }
 
        if (supported_cpus == num_online_cpus()) {
+               powernow_k8_cpu_preinit_acpi();
                printk(KERN_INFO PFX "Found %d %s "
                        "processors (" VERSION ")\n", supported_cpus,
                        boot_cpu_data.x86_model_id);
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/kernel/cpu/cpufreq/powernow-k8.h
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h        Fri Sep 21 12:54:11 
2007 -0600
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h        Thu Sep 27 12:22:59 
2007 -0600
@@ -32,12 +32,13 @@ struct powernow_k8_data {
 #ifdef CONFIG_X86_POWERNOW_K8_ACPI
        /* the acpi table needs to be kept. it's only available if ACPI was
         * used to determine valid frequency/vid/fid states */
-       struct acpi_processor_performance acpi_data;
+       struct acpi_processor_performance *acpi_data;
 #endif
        /* we need to keep track of associated cores, but let cpufreq
         * handle hotplug events - so just point at cpufreq pol->cpus
         * structure */
        cpumask_t *available_cores;
+       cpumask_t starting_core_affinity;
 };
 
 
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/kernel/time-xen.c
--- a/arch/i386/kernel/time-xen.c       Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/i386/kernel/time-xen.c       Thu Sep 27 12:22:59 2007 -0600
@@ -50,6 +50,7 @@
 #include <linux/percpu.h>
 #include <linux/kernel_stat.h>
 #include <linux/posix-timers.h>
+#include <linux/cpufreq.h>
 
 #include <asm/io.h>
 #include <asm/smp.h>
@@ -1118,6 +1119,45 @@ void local_teardown_timer(unsigned int c
        BUG_ON(cpu == 0);
        unbind_from_irqhandler(per_cpu(timer_irq, cpu), NULL);
 }
+#endif
+
+#if CONFIG_CPU_FREQ
+static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, 
+                               void *data)
+{
+       struct cpufreq_freqs *freq = data;
+       struct xen_platform_op op;
+
+       if (cpu_has(&cpu_data[freq->cpu], X86_FEATURE_CONSTANT_TSC))
+               return 0;
+
+       if (val == CPUFREQ_PRECHANGE)
+               return 0;
+
+       op.cmd = XENPF_change_freq;
+       op.u.change_freq.flags = 0;
+       op.u.change_freq.cpu = freq->cpu;
+       op.u.change_freq.freq = (u64)freq->new * 1000;
+       HYPERVISOR_platform_op(&op);
+
+       return 0;
+}
+
+static struct notifier_block time_cpufreq_notifier_block = {
+       .notifier_call = time_cpufreq_notifier
+};
+
+static int __init cpufreq_time_setup(void)
+{
+       if (!cpufreq_register_notifier(&time_cpufreq_notifier_block,
+                       CPUFREQ_TRANSITION_NOTIFIER)) {
+               printk(KERN_ERR "failed to set up cpufreq notifier\n");
+               return -ENODEV;
+       }
+       return 0;
+}
+
+core_initcall(cpufreq_time_setup);
 #endif
 
 /*
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/mm/pgtable-xen.c
--- a/arch/i386/mm/pgtable-xen.c        Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/i386/mm/pgtable-xen.c        Thu Sep 27 12:22:59 2007 -0600
@@ -74,87 +74,6 @@ void show_mem(void)
 }
 
 /*
- * Associate a virtual page frame with a given physical page frame 
- * and protection flags for that frame.
- */ 
-static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
-{
-       pgd_t *pgd;
-       pud_t *pud;
-       pmd_t *pmd;
-       pte_t *pte;
-
-       pgd = swapper_pg_dir + pgd_index(vaddr);
-       if (pgd_none(*pgd)) {
-               BUG();
-               return;
-       }
-       pud = pud_offset(pgd, vaddr);
-       if (pud_none(*pud)) {
-               BUG();
-               return;
-       }
-       pmd = pmd_offset(pud, vaddr);
-       if (pmd_none(*pmd)) {
-               BUG();
-               return;
-       }
-       pte = pte_offset_kernel(pmd, vaddr);
-       if (pgprot_val(flags))
-               /* <pfn,flags> stored as-is, to permit clearing entries */
-               set_pte(pte, pfn_pte(pfn, flags));
-       else
-               pte_clear(&init_mm, vaddr, pte);
-
-       /*
-        * It's enough to flush this one mapping.
-        * (PGE mappings get flushed as well)
-        */
-       __flush_tlb_one(vaddr);
-}
-
-/*
- * Associate a virtual page frame with a given physical page frame 
- * and protection flags for that frame.
- */ 
-static void set_pte_pfn_ma(unsigned long vaddr, unsigned long pfn,
-                          pgprot_t flags)
-{
-       pgd_t *pgd;
-       pud_t *pud;
-       pmd_t *pmd;
-       pte_t *pte;
-
-       pgd = swapper_pg_dir + pgd_index(vaddr);
-       if (pgd_none(*pgd)) {
-               BUG();
-               return;
-       }
-       pud = pud_offset(pgd, vaddr);
-       if (pud_none(*pud)) {
-               BUG();
-               return;
-       }
-       pmd = pmd_offset(pud, vaddr);
-       if (pmd_none(*pmd)) {
-               BUG();
-               return;
-       }
-       pte = pte_offset_kernel(pmd, vaddr);
-       if (pgprot_val(flags))
-               /* <pfn,flags> stored as-is, to permit clearing entries */
-               set_pte(pte, pfn_pte_ma(pfn, flags));
-       else
-               pte_clear(&init_mm, vaddr, pte);
-
-       /*
-        * It's enough to flush this one mapping.
-        * (PGE mappings get flushed as well)
-        */
-       __flush_tlb_one(vaddr);
-}
-
-/*
  * Associate a large virtual page frame with a given physical page frame 
  * and protection flags for that frame. pfn is for the base of the page,
  * vaddr is what the page gets mapped to - both must be properly aligned. 
@@ -204,6 +123,7 @@ void __set_fixmap (enum fixed_addresses 
 void __set_fixmap (enum fixed_addresses idx, maddr_t phys, pgprot_t flags)
 {
        unsigned long address = __fix_to_virt(idx);
+       pte_t pte;
 
        if (idx >= __end_of_fixed_addresses) {
                BUG();
@@ -211,16 +131,16 @@ void __set_fixmap (enum fixed_addresses 
        }
        switch (idx) {
        case FIX_WP_TEST:
-#ifdef CONFIG_X86_F00F_BUG
-       case FIX_F00F_IDT:
-#endif
        case FIX_VDSO:
-               set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
+               pte = pfn_pte(phys >> PAGE_SHIFT, flags);
                break;
        default:
-               set_pte_pfn_ma(address, phys >> PAGE_SHIFT, flags);
+               pte = pfn_pte_ma(phys >> PAGE_SHIFT, flags);
                break;
        }
+       if (HYPERVISOR_update_va_mapping(address, pte,
+                                        UVMF_INVLPG|UVMF_ALL))
+               BUG();
        nr_fixmaps++;
 }
 
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/i386/pci/irq.c
--- a/arch/i386/pci/irq.c       Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/i386/pci/irq.c       Thu Sep 27 12:22:59 2007 -0600
@@ -543,6 +543,12 @@ static __init int intel_router_probe(str
                case PCI_DEVICE_ID_INTEL_ICH8_2:
                case PCI_DEVICE_ID_INTEL_ICH8_3:
                case PCI_DEVICE_ID_INTEL_ICH8_4:
+               case PCI_DEVICE_ID_INTEL_ICH9_0:
+               case PCI_DEVICE_ID_INTEL_ICH9_1:
+               case PCI_DEVICE_ID_INTEL_ICH9_2:
+               case PCI_DEVICE_ID_INTEL_ICH9_3:
+               case PCI_DEVICE_ID_INTEL_ICH9_4:
+               case PCI_DEVICE_ID_INTEL_ICH9_5:
                        r->name = "PIIX/ICH";
                        r->get = pirq_piix_get;
                        r->set = pirq_piix_set;
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/x86_64/Makefile
--- a/arch/x86_64/Makefile      Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/x86_64/Makefile      Thu Sep 27 12:22:59 2007 -0600
@@ -75,22 +75,20 @@ drivers-$(CONFIG_OPROFILE)          += arch/x86_
 
 boot := arch/x86_64/boot
 
-PHONY += bzImage bzlilo install archmrproper \
+PHONY += bzImage bzlilo vmlinuz install archmrproper \
         fdimage fdimage144 fdimage288 isoimage archclean
 
 ifdef CONFIG_XEN
 CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
 LDFLAGS_vmlinux := -e startup_64
-boot := arch/i386/boot-xen
-.PHONY: vmlinuz
 #Default target when executing "make"
 all: vmlinuz
 
+BOOTIMAGE                     := $(boot)/vmlinuz
+KBUILD_IMAGE                  := $(BOOTIMAGE)
+
 vmlinuz: vmlinux
-       $(Q)$(MAKE) $(build)=$(boot) $@
-
-install:
-       $(Q)$(MAKE) $(build)=$(boot) $@
+       $(Q)$(MAKE) $(build)=$(boot) $(BOOTIMAGE)
 else
 #Default target when executing "make"
 all: bzImage
@@ -109,10 +107,10 @@ bzdisk: vmlinux
 
 fdimage fdimage144 fdimage288 isoimage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
+endif
 
 install:
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ 
-endif
 
 archclean:
        $(Q)$(MAKE) $(clean)=$(boot)
diff -r 351a9d2f7dd4 -r 87e425da4974 arch/x86_64/boot/Makefile
--- a/arch/x86_64/boot/Makefile Fri Sep 21 12:54:11 2007 -0600
+++ b/arch/x86_64/boot/Makefile Thu Sep 27 12:22:59 2007 -0600
@@ -26,7 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
 #RAMDISK := -DRAMDISK=512
 
 targets                := vmlinux.bin bootsect bootsect.o \
-                  setup setup.o bzImage mtools.conf
+                  setup setup.o bzImage mtools.conf vmlinuz vmlinux-stripped
 
 EXTRA_CFLAGS := -m32
 
@@ -131,5 +131,13 @@ zlilo: $(BOOTIMAGE)
        cp System.map $(INSTALL_PATH)/
        if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
 
+$(obj)/vmlinuz: $(obj)/vmlinux-stripped FORCE
+       $(call if_changed,gzip)
+       @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
+
+$(obj)/vmlinux-stripped: OBJCOPYFLAGS := -g --strip-unneeded
+$(obj)/vmlinux-stripped: vmlinux FORCE
+       $(call if_changed,objcopy)
+
 install:
        sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) 
System.map "$(INSTALL_PATH)"
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/i2c/busses/Kconfig
--- a/drivers/i2c/busses/Kconfig        Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/i2c/busses/Kconfig        Thu Sep 27 12:22:59 2007 -0600
@@ -125,6 +125,7 @@ config I2C_I801
            ICH7
            ESB2
            ICH8
+           ICH9
 
          This driver can also be built as a module.  If so, the module
          will be called i2c-i801.
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/i2c/busses/i2c-i801.c
--- a/drivers/i2c/busses/i2c-i801.c     Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/i2c/busses/i2c-i801.c     Thu Sep 27 12:22:59 2007 -0600
@@ -33,6 +33,7 @@
     ICH7               27DA
     ESB2               269B
     ICH8               283E
+    ICH9               2930
     This driver supports several versions of Intel's I/O Controller Hubs (ICH).
     For SMBus support, they are similar to the PIIX4 and are part
     of Intel's '810' and other chipsets.
@@ -457,6 +458,7 @@ static struct pci_device_id i801_ids[] =
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
        { 0, }
 };
 
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/scsi/ahci.c
--- a/drivers/scsi/ahci.c       Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/scsi/ahci.c       Thu Sep 27 12:22:59 2007 -0600
@@ -317,6 +317,28 @@ static const struct pci_device_id ahci_p
          board_ahci }, /* ICH8M */
        { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
          board_ahci }, /* ICH8M */
+       { PCI_VENDOR_ID_INTEL, 0x2922, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x2923, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x2924, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x2925, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x2927, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x2929, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9M */
+       { PCI_VENDOR_ID_INTEL, 0x292a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9M */
+       { PCI_VENDOR_ID_INTEL, 0x292b, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9M */
+       { PCI_VENDOR_ID_INTEL, 0x292f, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9M */
+       { PCI_VENDOR_ID_INTEL, 0x294d, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9 */
+       { PCI_VENDOR_ID_INTEL, 0x294e, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH9M */
 
        /* JMicron */
        { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/scsi/ata_piix.c
--- a/drivers/scsi/ata_piix.c   Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/scsi/ata_piix.c   Thu Sep 27 12:22:59 2007 -0600
@@ -125,6 +125,7 @@ enum {
        ich6m_sata_ahci         = 6,
        ich7m_sata_ahci         = 7,
        ich8_sata_ahci          = 8,
+       ich9_sata_ahci          = 9,
 
        /* constants for mapping table */
        P0                      = 0,  /* port 0 */
@@ -198,6 +199,18 @@ static const struct pci_device_id piix_p
        { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
        /* Mobile SATA Controller IDE (ICH8M, ditto) */
        { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
+       /* SATA Controller 1 IDE (ICH9) */
+       { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* SATA Controller 1 IDE (ICH9) */
+       { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* SATA Controller 2 IDE (ICH9) */
+       { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* Mobile SATA Controller 1 IDE (ICH9M) */
+       { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* Mobile SATA Controller 2 IDE (ICH9M) */
+       { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* Mobile SATA Controller 2 IDE (ICH9M) */
+       { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
 
        { }     /* terminate list */
 };
@@ -361,9 +374,22 @@ static const struct piix_map_db ich8_map
        .present_shift = 8,
        .map = {
                /* PM   PS   SM   SS       MAP */
-               {  P0,  NA,  P1,  NA }, /* 00b (hardwired) */
+               {  P0,  P2,  P1,  P3 }, /* 00b (hardwired when in AHCI) */
                {  RV,  RV,  RV,  RV },
-               {  RV,  RV,  RV,  RV }, /* 10b (never) */
+               {  IDE,  IDE,  NA,  NA }, /* 10b (IDE mode) */
+               {  RV,  RV,  RV,  RV },
+       },
+};
+
+static const struct piix_map_db ich9_map_db = {
+       .mask = 0x3,
+       .port_enable = 0x3,
+       .present_shift = 8,
+       .map = {
+               /* PM   PS   SM   SS       MAP */
+               {  P0,  P2,  P1,  P3 }, /* 00b (hardwired when in AHCI) */
+               {  RV,  RV,  RV,  RV },
+               {  IDE,  IDE,  NA,  NA }, /* 10b (IDE mode) */
                {  RV,  RV,  RV,  RV },
        },
 };
@@ -376,6 +402,7 @@ static const struct piix_map_db *piix_ma
        [ich6m_sata_ahci]       = &ich6m_map_db,
        [ich7m_sata_ahci]       = &ich7m_map_db,
        [ich8_sata_ahci]        = &ich8_map_db,
+       [ich9_sata_ahci]        = &ich9_map_db,
 };
 
 static struct ata_port_info piix_port_info[] = {
@@ -485,6 +512,18 @@ static struct ata_port_info piix_port_in
                .pio_mask       = 0x1f, /* pio0-4 */
                .mwdma_mask     = 0x07, /* mwdma0-2 */
                .udma_mask      = 0x7f, /* udma0-6 */
+               .port_ops       = &piix_sata_ops,
+       },
+
+       /* ich9_sata_ahci */
+       {
+               .sht            = &piix_sht,
+               .host_flags     = ATA_FLAG_SATA |
+                                 PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
+                                 PIIX_FLAG_AHCI,
+               .pio_mask       = 0x1f, /* pio0-4 */
+               .mwdma_mask     = 0x07, /* mwdma0-2 */
+               .udma_mask      = 0x7f, /* udma0-6 */
                .port_ops       = &piix_sata_ops,
        },
 };
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/xen/blkfront/blkfront.c
--- a/drivers/xen/blkfront/blkfront.c   Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/xen/blkfront/blkfront.c   Thu Sep 27 12:22:59 2007 -0600
@@ -477,7 +477,7 @@ int blkif_release(struct inode *inode, s
                struct xenbus_device * dev = info->xbdev;
                enum xenbus_state state = 
xenbus_read_driver_state(dev->otherend);
 
-               if (state == XenbusStateClosing)
+               if (state == XenbusStateClosing && info->is_ready)
                        blkfront_closing(dev);
        }
        return 0;
diff -r 351a9d2f7dd4 -r 87e425da4974 drivers/xen/xenbus/xenbus_probe.c
--- a/drivers/xen/xenbus/xenbus_probe.c Fri Sep 21 12:54:11 2007 -0600
+++ b/drivers/xen/xenbus/xenbus_probe.c Thu Sep 27 12:22:59 2007 -0600
@@ -1051,6 +1051,7 @@ static int print_device_status(struct de
 {
        struct xenbus_device *xendev = to_xenbus_device(dev);
        struct device_driver *drv = data;
+       struct xenbus_driver *xendrv;
 
        /* Is this operation limited to a particular driver? */
        if (drv && (dev->driver != drv))
@@ -1060,7 +1061,10 @@ static int print_device_status(struct de
                /* Information only: is this too noisy? */
                printk(KERN_INFO "XENBUS: Device with no driver: %s\n",
                       xendev->nodename);
-       } else if (xendev->state < XenbusStateConnected) {
+               return 0;
+       }
+
+       if (xendev->state < XenbusStateConnected) {
                enum xenbus_state rstate = XenbusStateUnknown;
                if (xendev->otherend)
                        rstate = xenbus_read_driver_state(xendev->otherend);
@@ -1068,6 +1072,11 @@ static int print_device_status(struct de
                       "to device: %s (local state %d, remote state %d)\n",
                       xendev->nodename, xendev->state, rstate);
        }
+
+       xendrv = to_xenbus_driver(dev->driver);
+       if (xendrv->is_ready && !xendrv->is_ready(xendev))
+               printk(KERN_WARNING "XENBUS: Device not ready: %s\n",
+                      xendev->nodename);
 
        return 0;
 }
diff -r 351a9d2f7dd4 -r 87e425da4974 fs/lockd/svc.c
--- a/fs/lockd/svc.c    Fri Sep 21 12:54:11 2007 -0600
+++ b/fs/lockd/svc.c    Thu Sep 27 12:22:59 2007 -0600
@@ -323,9 +323,6 @@ EXPORT_SYMBOL(lockd_down);
  * Sysctl parameters (same as module parameters, different interface).
  */
 
-/* Something that isn't CTL_ANY, CTL_NONE or a value that may clash. */
-#define CTL_UNNUMBERED         -2
-
 static ctl_table nlm_sysctls[] = {
        {
                .ctl_name       = CTL_UNNUMBERED,
diff -r 351a9d2f7dd4 -r 87e425da4974 fs/nfs/sysctl.c
--- a/fs/nfs/sysctl.c   Fri Sep 21 12:54:11 2007 -0600
+++ b/fs/nfs/sysctl.c   Thu Sep 27 12:22:59 2007 -0600
@@ -18,11 +18,6 @@ static const int nfs_set_port_min = 0;
 static const int nfs_set_port_min = 0;
 static const int nfs_set_port_max = 65535;
 static struct ctl_table_header *nfs_callback_sysctl_table;
-/*
- * Something that isn't CTL_ANY, CTL_NONE or a value that may clash.
- * Use the same values as fs/lockd/svc.c
- */
-#define CTL_UNNUMBERED -2
 
 static ctl_table nfs_cb_sysctls[] = {
 #ifdef CONFIG_NFS_V4
diff -r 351a9d2f7dd4 -r 87e425da4974 include/linux/pci_ids.h
--- a/include/linux/pci_ids.h   Fri Sep 21 12:54:11 2007 -0600
+++ b/include/linux/pci_ids.h   Thu Sep 27 12:22:59 2007 -0600
@@ -2188,6 +2188,13 @@
 #define PCI_DEVICE_ID_INTEL_ICH8_4     0x2815
 #define PCI_DEVICE_ID_INTEL_ICH8_5     0x283e
 #define PCI_DEVICE_ID_INTEL_ICH8_6     0x2850
+#define PCI_DEVICE_ID_INTEL_ICH9_0     0x2910
+#define PCI_DEVICE_ID_INTEL_ICH9_1     0x2911
+#define PCI_DEVICE_ID_INTEL_ICH9_2     0x2912
+#define PCI_DEVICE_ID_INTEL_ICH9_3     0x2913
+#define PCI_DEVICE_ID_INTEL_ICH9_4     0x2914
+#define PCI_DEVICE_ID_INTEL_ICH9_5     0x2915
+#define PCI_DEVICE_ID_INTEL_ICH9_6     0x2930
 #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
 #define PCI_DEVICE_ID_INTEL_82830_HB   0x3575
 #define PCI_DEVICE_ID_INTEL_82830_CGC  0x3577
diff -r 351a9d2f7dd4 -r 87e425da4974 include/linux/sysctl.h
--- a/include/linux/sysctl.h    Fri Sep 21 12:54:11 2007 -0600
+++ b/include/linux/sysctl.h    Thu Sep 27 12:22:59 2007 -0600
@@ -6,10 +6,17 @@
  ****************************************************************
  ****************************************************************
  **
+ **  WARNING:
  **  The values in this file are exported to user space via 
- **  the sysctl() binary interface.  However this interface
- **  is unstable and deprecated and will be removed in the future. 
- **  For a stable interface use /proc/sys.
+ **  the sysctl() binary interface.  Do *NOT* change the
+ **  numbering of any existing values here, and do not change
+ **  any numbers within any one set of values.  If you have to
+ **  have to redefine an existing interface, use a new number for it.
+ **  The kernel will then return -ENOTDIR to any application using
+ **  the old binary interface.
+ **
+ **  For new interfaces unless you really need a binary number
+ **  please use CTL_UNNUMBERED.
  **
  ****************************************************************
  ****************************************************************
@@ -48,6 +55,7 @@ struct __sysctl_args {
 #ifdef __KERNEL__
 #define CTL_ANY                -1      /* Matches any name */
 #define CTL_NONE       0
+#define CTL_UNNUMBERED CTL_NONE        /* sysctl without a binary number */
 #endif
 
 enum
diff -r 351a9d2f7dd4 -r 87e425da4974 include/xen/interface/platform.h
--- a/include/xen/interface/platform.h  Fri Sep 21 12:54:11 2007 -0600
+++ b/include/xen/interface/platform.h  Thu Sep 27 12:22:59 2007 -0600
@@ -164,6 +164,16 @@ typedef struct xenpf_enter_acpi_sleep xe
 typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t);
 
+#define XENPF_change_freq       52
+struct xenpf_change_freq {
+    /* IN variables */
+    uint32_t flags; /* Must be zero. */
+    uint32_t cpu;   /* Physical cpu. */
+    uint64_t freq;  /* New frequency (Hz). */
+};
+typedef struct xenpf_change_freq xenpf_change_freq_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t);
+
 struct xen_platform_op {
     uint32_t cmd;
     uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
@@ -176,6 +186,7 @@ struct xen_platform_op {
         struct xenpf_platform_quirk    platform_quirk;
         struct xenpf_firmware_info     firmware_info;
         struct xenpf_enter_acpi_sleep  enter_acpi_sleep;
+        struct xenpf_change_freq       change_freq;
         uint8_t                        pad[128];
     } u;
 };
diff -r 351a9d2f7dd4 -r 87e425da4974 sound/pci/hda/hda_intel.c
--- a/sound/pci/hda/hda_intel.c Fri Sep 21 12:54:11 2007 -0600
+++ b/sound/pci/hda/hda_intel.c Thu Sep 27 12:22:59 2007 -0600
@@ -80,6 +80,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},
                         "{Intel, ICH7},"
                         "{Intel, ESB2},"
                         "{Intel, ICH8},"
+                        "{Intel, ICH9},"
                         "{ATI, SB450},"
                         "{ATI, SB600},"
                         "{ATI, RS600},"
@@ -1634,6 +1635,8 @@ static struct pci_device_id azx_ids[] = 
        { 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH7 */
        { 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ESB2 */
        { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH8 */
+       { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH9 */
+       { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH9 */
        { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* 
ATI SB450 */
        { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* 
ATI SB600 */
        { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, 
/* ATI RS600 HDMI */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>