# 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
|