[kernel] r9356 - in dists/sid/linux-2.6/debian: . patches/bugfix patches/series
Maximilian Attems
maks at alioth.debian.org
Thu Aug 23 11:34:22 UTC 2007
Author: maks
Date: Thu Aug 23 11:34:21 2007
New Revision: 9356
Log:
add stable release 2.6.22.5
Added:
dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.5
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/4
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog (original)
+++ dists/sid/linux-2.6/debian/changelog Thu Aug 23 11:34:21 2007
@@ -112,6 +112,28 @@
- CPUFREQ: ondemand: add a check to avoid negative load calculation
* Add stable release 2.6.22.4:
- Reset current->pdeath_signal on SUID binary execution (CVE-2007-3848)
+ * Add stable release 2.6.22.5:
+ - x86_64: Check for .cfi_rel_offset in CFI probe
+ - x86_64: Change PMDS invocation to single macro
+ - i386: Handle P6s without performance counters in nmi watchdog
+ - revert "x86, serial: convert legacy COM ports to platform devices"
+ - ACPICA: Fixed possible corruption of global GPE list
+ - ACPICA: Clear reserved fields for incoming ACPI 1.0 FADTs
+ - i386: Fix double fault handler
+ - JFFS2 locking regression fix.
+ - r8169: avoid needless NAPI poll scheduling
+ - Linux 2.6.22.5
+ - AVR32: Fix atomic_add_unless() and atomic_sub_unless()
+ - i386: allow debuggers to access the vsyscall page with compat vDSO
+ - hwmon: (smsc47m1) restore missing name attribute
+ - hwmon: fix w83781d temp sensor type setting
+ - Hibernation: do not try to mark invalid PFNs as nosave
+ - sky2: restore workarounds for lost interrupts
+ - sky2: carrier management
+ - sky2: check for more work before leaving NAPI
+ - sky2: check drop truncated packets
+ - forcedeth: fix random hang in forcedeth driver when using netconsole
+ - libata: add ATI SB700 device IDs to AHCI driver
[ dann frazier ]
* [ia64] Restore config cleanup now that its safe to break the ABI
@@ -119,7 +141,7 @@
[ Bastian Blank ]
* Update vserver patch to 2.2.0.3.
- -- Bastian Blank <waldi at debian.org> Thu, 23 Aug 2007 11:40:36 +0200
+ -- maximilian attems <maks at debian.org> Thu, 23 Aug 2007 13:27:11 +0200
linux-2.6 (2.6.22-3) unstable; urgency=low
Added: dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.5
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.5 Thu Aug 23 11:34:21 2007
@@ -0,0 +1,742 @@
+diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
+index af50f9b..026e4e5 100644
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -850,11 +850,6 @@ and is between 256 and 4096 characters. It is defined in the file
+ lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip
+ Format: addr:<io>,irq:<irq>
+
+- legacy_serial.force [HW,IA-32,X86-64]
+- Probe for COM ports at legacy addresses even
+- if PNPBIOS or ACPI should describe them. This
+- is for working around firmware defects.
+-
+ llsc*= [IA64] See function print_params() in
+ arch/ia64/sn/kernel/llsc4.c.
+
+diff --git a/arch/i386/Makefile b/arch/i386/Makefile
+index bd28f9f..541b3ae 100644
+--- a/arch/i386/Makefile
++++ b/arch/i386/Makefile
+@@ -51,8 +51,8 @@ cflags-y += -maccumulate-outgoing-args
+ CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
+
+ # do binutils support CFI?
+-cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
+-AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
++cflags-y += $(call as-instr,.cfi_startproc\n.cfi_rel_offset esp${comma}0\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
++AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_rel_offset esp${comma}0\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
+
+ # is .cfi_signal_frame supported too?
+ cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
+diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile
+index 06da59f..e9297cb 100644
+--- a/arch/i386/kernel/Makefile
++++ b/arch/i386/kernel/Makefile
+@@ -35,7 +35,6 @@ obj-y += sysenter.o vsyscall.o
+ obj-$(CONFIG_ACPI_SRAT) += srat.o
+ obj-$(CONFIG_EFI) += efi.o efi_stub.o
+ obj-$(CONFIG_DOUBLEFAULT) += doublefault.o
+-obj-$(CONFIG_SERIAL_8250) += legacy_serial.o
+ obj-$(CONFIG_VM86) += vm86.o
+ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
+ obj-$(CONFIG_HPET_TIMER) += hpet.o
+diff --git a/arch/i386/kernel/cpu/perfctr-watchdog.c b/arch/i386/kernel/cpu/perfctr-watchdog.c
+index 4d26d51..996f6f8 100644
+--- a/arch/i386/kernel/cpu/perfctr-watchdog.c
++++ b/arch/i386/kernel/cpu/perfctr-watchdog.c
+@@ -346,7 +346,9 @@ static int setup_p6_watchdog(unsigned nmi_hz)
+ perfctr_msr = MSR_P6_PERFCTR0;
+ evntsel_msr = MSR_P6_EVNTSEL0;
+
+- wrmsrl(perfctr_msr, 0UL);
++ /* KVM doesn't implement this MSR */
++ if (wrmsr_safe(perfctr_msr, 0, 0) < 0)
++ return 0;
+
+ evntsel = P6_EVNTSEL_INT
+ | P6_EVNTSEL_OS
+diff --git a/arch/i386/kernel/doublefault.c b/arch/i386/kernel/doublefault.c
+index 265c559..40978af 100644
+--- a/arch/i386/kernel/doublefault.c
++++ b/arch/i386/kernel/doublefault.c
+@@ -13,7 +13,7 @@
+ static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE];
+ #define STACK_START (unsigned long)(doublefault_stack+DOUBLEFAULT_STACKSIZE)
+
+-#define ptr_ok(x) ((x) > PAGE_OFFSET && (x) < PAGE_OFFSET + 0x1000000)
++#define ptr_ok(x) ((x) > PAGE_OFFSET && (x) < PAGE_OFFSET + MAXMEM)
+
+ static void doublefault_fn(void)
+ {
+@@ -23,23 +23,23 @@ static void doublefault_fn(void)
+ store_gdt(&gdt_desc);
+ gdt = gdt_desc.address;
+
+- printk("double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size);
++ printk(KERN_EMERG "PANIC: double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size);
+
+ if (ptr_ok(gdt)) {
+ gdt += GDT_ENTRY_TSS << 3;
+ tss = *(u16 *)(gdt+2);
+ tss += *(u8 *)(gdt+4) << 16;
+ tss += *(u8 *)(gdt+7) << 24;
+- printk("double fault, tss at %08lx\n", tss);
++ printk(KERN_EMERG "double fault, tss at %08lx\n", tss);
+
+ if (ptr_ok(tss)) {
+ struct i386_hw_tss *t = (struct i386_hw_tss *)tss;
+
+- printk("eip = %08lx, esp = %08lx\n", t->eip, t->esp);
++ printk(KERN_EMERG "eip = %08lx, esp = %08lx\n", t->eip, t->esp);
+
+- printk("eax = %08lx, ebx = %08lx, ecx = %08lx, edx = %08lx\n",
++ printk(KERN_EMERG "eax = %08lx, ebx = %08lx, ecx = %08lx, edx = %08lx\n",
+ t->eax, t->ebx, t->ecx, t->edx);
+- printk("esi = %08lx, edi = %08lx\n",
++ printk(KERN_EMERG "esi = %08lx, edi = %08lx\n",
+ t->esi, t->edi);
+ }
+ }
+@@ -63,6 +63,7 @@ struct tss_struct doublefault_tss __cacheline_aligned = {
+ .cs = __KERNEL_CS,
+ .ss = __KERNEL_DS,
+ .ds = __USER_DS,
++ .fs = __KERNEL_PERCPU,
+
+ .__cr3 = __pa(swapper_pg_dir)
+ }
+diff --git a/arch/i386/kernel/legacy_serial.c b/arch/i386/kernel/legacy_serial.c
+deleted file mode 100644
+index 2151011..0000000
+--- a/arch/i386/kernel/legacy_serial.c
++++ /dev/null
+@@ -1,67 +0,0 @@
+-/*
+- * Legacy COM port devices for x86 platforms without PNPBIOS or ACPI.
+- * Data taken from include/asm-i386/serial.h.
+- *
+- * (c) Copyright 2007 Hewlett-Packard Development Company, L.P.
+- * Bjorn Helgaas <bjorn.helgaas at hp.com>
+- *
+- * 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.
+- */
+-#include <linux/module.h>
+-#include <linux/init.h>
+-#include <linux/pnp.h>
+-#include <linux/serial_8250.h>
+-
+-/* Standard COM flags (except for COM4, because of the 8514 problem) */
+-#ifdef CONFIG_SERIAL_DETECT_IRQ
+-#define COM_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ)
+-#define COM4_FLAGS (UPF_BOOT_AUTOCONF | UPF_AUTO_IRQ)
+-#else
+-#define COM_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST)
+-#define COM4_FLAGS UPF_BOOT_AUTOCONF
+-#endif
+-
+-#define PORT(_base,_irq,_flags) \
+- { \
+- .iobase = _base, \
+- .irq = _irq, \
+- .uartclk = 1843200, \
+- .iotype = UPIO_PORT, \
+- .flags = _flags, \
+- }
+-
+-static struct plat_serial8250_port x86_com_data[] = {
+- PORT(0x3F8, 4, COM_FLAGS),
+- PORT(0x2F8, 3, COM_FLAGS),
+- PORT(0x3E8, 4, COM_FLAGS),
+- PORT(0x2E8, 3, COM4_FLAGS),
+- { },
+-};
+-
+-static struct platform_device x86_com_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = x86_com_data,
+- },
+-};
+-
+-static int force_legacy_probe;
+-module_param_named(force, force_legacy_probe, bool, 0);
+-MODULE_PARM_DESC(force, "Force legacy serial port probe");
+-
+-static int __init serial8250_x86_com_init(void)
+-{
+- if (pnp_platform_devices && !force_legacy_probe)
+- return -ENODEV;
+-
+- return platform_device_register(&x86_com_device);
+-}
+-
+-module_init(serial8250_x86_com_init);
+-
+-MODULE_AUTHOR("Bjorn Helgaas");
+-MODULE_LICENSE("GPL");
+-MODULE_DESCRIPTION("Generic 8250/16x50 legacy probe module");
+diff --git a/arch/i386/kernel/sysenter.c b/arch/i386/kernel/sysenter.c
+index ff4ee6f..6deb159 100644
+--- a/arch/i386/kernel/sysenter.c
++++ b/arch/i386/kernel/sysenter.c
+@@ -336,7 +336,9 @@ struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
+
+ int in_gate_area(struct task_struct *task, unsigned long addr)
+ {
+- return 0;
++ const struct vm_area_struct *vma = get_gate_vma(task);
++
++ return vma && addr >= vma->vm_start && addr < vma->vm_end;
+ }
+
+ int in_gate_area_no_task(unsigned long addr)
+diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile
+index 29617ae..fdab077 100644
+--- a/arch/x86_64/Makefile
++++ b/arch/x86_64/Makefile
+@@ -57,8 +57,8 @@ cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
+ cflags-y += -maccumulate-outgoing-args
+
+ # do binutils support CFI?
+-cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
+-AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
++cflags-y += $(call as-instr,.cfi_startproc\n.cfi_rel_offset rsp${comma}0\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
++AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_rel_offset rsp${comma}0\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
+
+ # is .cfi_signal_frame supported too?
+ cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
+diff --git a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile
+index de1de8a..4d94c51 100644
+--- a/arch/x86_64/kernel/Makefile
++++ b/arch/x86_64/kernel/Makefile
+@@ -32,7 +32,6 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
+ obj-$(CONFIG_IOMMU) += pci-gart.o aperture.o
+ obj-$(CONFIG_CALGARY_IOMMU) += pci-calgary.o tce.o
+ obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
+-obj-$(CONFIG_SERIAL_8250) += legacy_serial.o
+ obj-$(CONFIG_KPROBES) += kprobes.o
+ obj-$(CONFIG_X86_PM_TIMER) += pmtimer.o
+ obj-$(CONFIG_X86_VSMP) += vsmp.o
+@@ -50,7 +49,6 @@ CFLAGS_vsyscall.o := $(PROFILING) -g0
+
+ therm_throt-y += ../../i386/kernel/cpu/mcheck/therm_throt.o
+ bootflag-y += ../../i386/kernel/bootflag.o
+-legacy_serial-y += ../../i386/kernel/legacy_serial.o
+ cpuid-$(subst m,y,$(CONFIG_X86_CPUID)) += ../../i386/kernel/cpuid.o
+ topology-y += ../../i386/kernel/topology.o
+ microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o
+diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
+index 1fab487..c63fc64 100644
+--- a/arch/x86_64/kernel/head.S
++++ b/arch/x86_64/kernel/head.S
+@@ -326,8 +326,7 @@ NEXT_PAGE(level2_kernel_pgt)
+ /* 40MB kernel mapping. The kernel code cannot be bigger than that.
+ When you change this change KERNEL_TEXT_SIZE in page.h too. */
+ /* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */
+- PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL,
+- KERNEL_TEXT_SIZE/PMD_SIZE)
++ PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL, KERNEL_TEXT_SIZE/PMD_SIZE)
+ /* Module mapping starts here */
+ .fill (PTRS_PER_PMD - (KERNEL_TEXT_SIZE/PMD_SIZE)),8,0
+
+diff --git a/drivers/acpi/events/evgpeblk.c b/drivers/acpi/events/evgpeblk.c
+index 902c287..361ebe6 100644
+--- a/drivers/acpi/events/evgpeblk.c
++++ b/drivers/acpi/events/evgpeblk.c
+@@ -586,6 +586,10 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
+ flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
+ if (gpe_xrupt->previous) {
+ gpe_xrupt->previous->next = gpe_xrupt->next;
++ } else {
++ /* No previous, update list head */
++
++ acpi_gbl_gpe_xrupt_list_head = gpe_xrupt->next;
+ }
+
+ if (gpe_xrupt->next) {
+diff --git a/drivers/acpi/tables/tbfadt.c b/drivers/acpi/tables/tbfadt.c
+index 1285e91..002bb33 100644
+--- a/drivers/acpi/tables/tbfadt.c
++++ b/drivers/acpi/tables/tbfadt.c
+@@ -211,14 +211,17 @@ void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags)
+ * DESCRIPTION: Get a local copy of the FADT and convert it to a common format.
+ * Performs validation on some important FADT fields.
+ *
++ * NOTE: We create a local copy of the FADT regardless of the version.
++ *
+ ******************************************************************************/
+
+ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
+ {
+
+ /*
+- * Check if the FADT is larger than what we know about (ACPI 2.0 version).
+- * Truncate the table, but make some noise.
++ * Check if the FADT is larger than the largest table that we expect
++ * (the ACPI 2.0/3.0 version). If so, truncate the table, and issue
++ * a warning.
+ */
+ if (length > sizeof(struct acpi_table_fadt)) {
+ ACPI_WARNING((AE_INFO,
+@@ -227,10 +230,12 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
+ sizeof(struct acpi_table_fadt)));
+ }
+
+- /* Copy the entire FADT locally. Zero first for tb_convert_fadt */
++ /* Clear the entire local FADT */
+
+ ACPI_MEMSET(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt));
+
++ /* Copy the original FADT, up to sizeof (struct acpi_table_fadt) */
++
+ ACPI_MEMCPY(&acpi_gbl_FADT, table,
+ ACPI_MIN(length, sizeof(struct acpi_table_fadt)));
+
+@@ -251,7 +256,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
+ * RETURN: None
+ *
+ * DESCRIPTION: Converts all versions of the FADT to a common internal format.
+- * -> Expand all 32-bit addresses to 64-bit.
++ * Expand all 32-bit addresses to 64-bit.
+ *
+ * NOTE: acpi_gbl_FADT must be of size (struct acpi_table_fadt),
+ * and must contain a copy of the actual FADT.
+@@ -292,8 +297,23 @@ static void acpi_tb_convert_fadt(void)
+ }
+
+ /*
+- * Expand the 32-bit V1.0 addresses to the 64-bit "X" generic address
+- * structures as necessary.
++ * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which
++ * should be zero are indeed zero. This will workaround BIOSs that
++ * inadvertently place values in these fields.
++ *
++ * The ACPI 1.0 reserved fields that will be zeroed are the bytes located at
++ * offset 45, 55, 95, and the word located at offset 109, 110.
++ */
++ if (acpi_gbl_FADT.header.revision < 3) {
++ acpi_gbl_FADT.preferred_profile = 0;
++ acpi_gbl_FADT.pstate_control = 0;
++ acpi_gbl_FADT.cst_control = 0;
++ acpi_gbl_FADT.boot_flags = 0;
++ }
++
++ /*
++ * Expand the ACPI 1.0 32-bit V1.0 addresses to the ACPI 2.0 64-bit "X"
++ * generic address structures as necessary.
+ */
+ for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) {
+ target =
+@@ -349,18 +369,6 @@ static void acpi_tb_convert_fadt(void)
+ acpi_gbl_FADT.xpm1a_event_block.space_id;
+
+ }
+-
+- /*
+- * For ACPI 1.0 FADTs, ensure that reserved fields (which should be zero)
+- * are indeed zero. This will workaround BIOSs that inadvertently placed
+- * values in these fields.
+- */
+- if (acpi_gbl_FADT.header.revision < 3) {
+- acpi_gbl_FADT.preferred_profile = 0;
+- acpi_gbl_FADT.pstate_control = 0;
+- acpi_gbl_FADT.cst_control = 0;
+- acpi_gbl_FADT.boot_flags = 0;
+- }
+ }
+
+ /******************************************************************************
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index ca5229d..3400b3e 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -399,7 +399,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+
+ /* ATI */
+ { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
+- { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700 */
++ { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700 IDE */
++ { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb600 }, /* ATI SB700 AHCI */
++ { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb600 }, /* ATI SB700 nraid5 */
++ { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb600 }, /* ATI SB700 raid5 */
+
+ /* VIA */
+ { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
+diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
+index 1e21c8c..c3e716e 100644
+--- a/drivers/hwmon/smsc47m1.c
++++ b/drivers/hwmon/smsc47m1.c
+@@ -585,6 +585,8 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
+
+ if ((err = device_create_file(dev, &dev_attr_alarms)))
+ goto error_remove_files;
++ if ((err = device_create_file(dev, &dev_attr_name)))
++ goto error_remove_files;
+
+ data->class_dev = hwmon_device_register(dev);
+ if (IS_ERR(data->class_dev)) {
+diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
+index f85b48f..c95909c 100644
+--- a/drivers/hwmon/w83781d.c
++++ b/drivers/hwmon/w83781d.c
+@@ -740,9 +740,9 @@ store_sensor(struct device *dev, struct device_attribute *da,
+ static SENSOR_DEVICE_ATTR(temp1_type, S_IRUGO | S_IWUSR,
+ show_sensor, store_sensor, 0);
+ static SENSOR_DEVICE_ATTR(temp2_type, S_IRUGO | S_IWUSR,
+- show_sensor, store_sensor, 0);
++ show_sensor, store_sensor, 1);
+ static SENSOR_DEVICE_ATTR(temp3_type, S_IRUGO | S_IWUSR,
+- show_sensor, store_sensor, 0);
++ show_sensor, store_sensor, 2);
+
+ /* I2C devices get this name attribute automatically, but for ISA devices
+ we must create it by ourselves. */
+diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
+index a361dba..4a7b5f4 100644
+--- a/drivers/net/forcedeth.c
++++ b/drivers/net/forcedeth.c
+@@ -3067,8 +3067,8 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
+ np->nic_poll_irq = np->irqmask;
+ mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+ }
+- printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+ spin_unlock(&np->lock);
++ printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+ break;
+ }
+
+@@ -3185,8 +3185,8 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
+ np->nic_poll_irq = np->irqmask;
+ mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+ }
+- printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+ spin_unlock(&np->lock);
++ printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+ break;
+ }
+
+@@ -3232,8 +3232,8 @@ static irqreturn_t nv_nic_irq_tx(int foo, void *data)
+ np->nic_poll_irq |= NVREG_IRQ_TX_ALL;
+ mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+ }
+- printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_tx.\n", dev->name, i);
+ spin_unlock_irqrestore(&np->lock, flags);
++ printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_tx.\n", dev->name, i);
+ break;
+ }
+
+@@ -3347,8 +3347,8 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
+ np->nic_poll_irq |= NVREG_IRQ_RX_ALL;
+ mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+ }
+- printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_rx.\n", dev->name, i);
+ spin_unlock_irqrestore(&np->lock, flags);
++ printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_rx.\n", dev->name, i);
+ break;
+ }
+ }
+@@ -3420,8 +3420,8 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data)
+ np->nic_poll_irq |= NVREG_IRQ_OTHER;
+ mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+ }
+- printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_other.\n", dev->name, i);
+ spin_unlock_irqrestore(&np->lock, flags);
++ printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_other.\n", dev->name, i);
+ break;
+ }
+
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 5ec7752..84958c8 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -2649,14 +2649,16 @@ rtl8169_interrupt(int irq, void *dev_instance)
+ rtl8169_check_link_status(dev, tp, ioaddr);
+
+ #ifdef CONFIG_R8169_NAPI
+- RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
+- tp->intr_mask = ~rtl8169_napi_event;
+-
+- if (likely(netif_rx_schedule_prep(dev)))
+- __netif_rx_schedule(dev);
+- else if (netif_msg_intr(tp)) {
+- printk(KERN_INFO "%s: interrupt %04x taken in poll\n",
+- dev->name, status);
++ if (status & rtl8169_napi_event) {
++ RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
++ tp->intr_mask = ~rtl8169_napi_event;
++
++ if (likely(netif_rx_schedule_prep(dev)))
++ __netif_rx_schedule(dev);
++ else if (netif_msg_intr(tp)) {
++ printk(KERN_INFO "%s: interrupt %04x in poll\n",
++ dev->name, status);
++ }
+ }
+ break;
+ #else
+diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
+index fe01b96..d2646a8 100644
+--- a/drivers/net/sky2.c
++++ b/drivers/net/sky2.c
+@@ -96,7 +96,7 @@ static int disable_msi = 0;
+ module_param(disable_msi, int, 0);
+ MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
+
+-static int idle_timeout = 0;
++static int idle_timeout = 100;
+ module_param(idle_timeout, int, 0);
+ MODULE_PARM_DESC(idle_timeout, "Watchdog timer for lost interrupts (ms)");
+
+@@ -1234,6 +1234,8 @@ static int sky2_up(struct net_device *dev)
+ if (netif_msg_ifup(sky2))
+ printk(KERN_INFO PFX "%s: enabling interface\n", dev->name);
+
++ netif_carrier_off(dev);
++
+ /* must be power of 2 */
+ sky2->tx_le = pci_alloc_consistent(hw->pdev,
+ TX_RING_SIZE *
+@@ -1573,7 +1575,6 @@ static int sky2_down(struct net_device *dev)
+
+ /* Stop more packets from being queued */
+ netif_stop_queue(dev);
+- netif_carrier_off(dev);
+
+ /* Disable port IRQ */
+ imask = sky2_read32(hw, B0_IMSK);
+@@ -1625,6 +1626,8 @@ static int sky2_down(struct net_device *dev)
+
+ sky2_phy_power(hw, port, 0);
+
++ netif_carrier_off(dev);
++
+ /* turn off LED's */
+ sky2_write16(hw, B0_Y2LED, LED_STAT_OFF);
+
+@@ -1689,7 +1692,6 @@ static void sky2_link_up(struct sky2_port *sky2)
+ gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
+
+ netif_carrier_on(sky2->netdev);
+- netif_wake_queue(sky2->netdev);
+
+ /* Turn on link LED */
+ sky2_write8(hw, SK_REG(port, LNK_LED_REG),
+@@ -1741,7 +1743,6 @@ static void sky2_link_down(struct sky2_port *sky2)
+ gma_write16(hw, port, GM_GP_CTRL, reg);
+
+ netif_carrier_off(sky2->netdev);
+- netif_stop_queue(sky2->netdev);
+
+ /* Turn on link LED */
+ sky2_write8(hw, SK_REG(port, LNK_LED_REG), LINKLED_OFF);
+@@ -2064,6 +2065,9 @@ static struct sk_buff *sky2_receive(struct net_device *dev,
+ if (!(status & GMR_FS_RX_OK))
+ goto resubmit;
+
++ if (status >> 16 != length)
++ goto len_mismatch;
++
+ if (length < copybreak)
+ skb = receive_copy(sky2, re, length);
+ else
+@@ -2073,6 +2077,11 @@ resubmit:
+
+ return skb;
+
++len_mismatch:
++ /* Truncation of overlength packets
++ causes PHY length to not match MAC length */
++ ++sky2->net_stats.rx_length_errors;
++
+ error:
+ ++sky2->net_stats.rx_errors;
+ if (status & GMR_FS_RX_FF_OV) {
+@@ -2427,8 +2436,7 @@ static void sky2_err_intr(struct sky2_hw *hw, u32 status)
+ static int sky2_poll(struct net_device *dev0, int *budget)
+ {
+ struct sky2_hw *hw = ((struct sky2_port *) netdev_priv(dev0))->hw;
+- int work_limit = min(dev0->quota, *budget);
+- int work_done = 0;
++ int work_done;
+ u32 status = sky2_read32(hw, B0_Y2_SP_EISR);
+
+ if (unlikely(status & Y2_IS_ERROR))
+@@ -2440,18 +2448,25 @@ static int sky2_poll(struct net_device *dev0, int *budget)
+ if (status & Y2_IS_IRQ_PHY2)
+ sky2_phy_intr(hw, 1);
+
+- work_done = sky2_status_intr(hw, work_limit);
+- if (work_done < work_limit) {
+- netif_rx_complete(dev0);
++ work_done = sky2_status_intr(hw, min(dev0->quota, *budget));
++ *budget -= work_done;
++ dev0->quota -= work_done;
+
+- /* end of interrupt, re-enables also acts as I/O synchronization */
+- sky2_read32(hw, B0_Y2_SP_LISR);
+- return 0;
+- } else {
+- *budget -= work_done;
+- dev0->quota -= work_done;
++ /* More work? */
++ if (hw->st_idx != sky2_read16(hw, STAT_PUT_IDX))
+ return 1;
++
++ /* Bug/Errata workaround?
++ * Need to kick the TX irq moderation timer.
++ */
++ if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
++ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
++ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
+ }
++ netif_rx_complete(dev0);
++
++ sky2_read32(hw, B0_Y2_SP_LISR);
++ return 0;
+ }
+
+ static irqreturn_t sky2_intr(int irq, void *dev_id)
+@@ -3486,10 +3501,6 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
+ memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
+ memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
+
+- /* device is off until link detection */
+- netif_carrier_off(dev);
+- netif_stop_queue(dev);
+-
+ return dev;
+ }
+
+diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
+index 315ea99..a288de5 100644
+--- a/drivers/serial/Kconfig
++++ b/drivers/serial/Kconfig
+@@ -74,21 +74,17 @@ config SERIAL_8250_PCI
+ depends on SERIAL_8250 && PCI
+ default SERIAL_8250
+ help
+- Say Y here if you have PCI serial ports.
+-
+- To compile this driver as a module, choose M here: the module
+- will be called 8250_pci.
++ This builds standard PCI serial support. You may be able to
++ disable this feature if you only need legacy serial support.
++ Saves about 9K.
+
+ config SERIAL_8250_PNP
+ tristate "8250/16550 PNP device support" if EMBEDDED
+ depends on SERIAL_8250 && PNP
+ default SERIAL_8250
+ help
+- Say Y here if you have serial ports described by PNPBIOS or ACPI.
+- These are typically ports built into the system board.
+-
+- To compile this driver as a module, choose M here: the module
+- will be called 8250_pnp.
++ This builds standard PNP serial support. You may be able to
++ disable this feature if you only need legacy serial support.
+
+ config SERIAL_8250_HP300
+ tristate
+diff --git a/fs/jffs2/write.c b/fs/jffs2/write.c
+index c9fe0ab..1b68a52 100644
+--- a/fs/jffs2/write.c
++++ b/fs/jffs2/write.c
+@@ -553,6 +553,9 @@ int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f,
+ struct jffs2_full_dirent **prev = &dir_f->dents;
+ uint32_t nhash = full_name_hash(name, namelen);
+
++ /* We don't actually want to reserve any space, but we do
++ want to be holding the alloc_sem when we write to flash */
++ down(&c->alloc_sem);
+ down(&dir_f->sem);
+
+ while ((*prev) && (*prev)->nhash <= nhash) {
+diff --git a/include/asm-avr32/atomic.h b/include/asm-avr32/atomic.h
+index b9c2548..7ef3862 100644
+--- a/include/asm-avr32/atomic.h
++++ b/include/asm-avr32/atomic.h
+@@ -101,7 +101,7 @@ static inline int atomic_sub_unless(atomic_t *v, int a, int u)
+ " mov %1, 1\n"
+ "1:"
+ : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
+- : "m"(v->counter), "rKs21"(a), "rKs21"(u)
++ : "m"(v->counter), "rKs21"(a), "rKs21"(u), "1"(result)
+ : "cc", "memory");
+
+ return result;
+@@ -137,7 +137,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
+ " mov %1, 1\n"
+ "1:"
+ : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
+- : "m"(v->counter), "r"(a), "ir"(u)
++ : "m"(v->counter), "r"(a), "ir"(u), "1"(result)
+ : "cc", "memory");
+ }
+
+diff --git a/include/asm-i386/serial.h b/include/asm-i386/serial.h
+index 57a4306..bd67480 100644
+--- a/include/asm-i386/serial.h
++++ b/include/asm-i386/serial.h
+@@ -11,3 +11,19 @@
+ * megabits/second; but this requires the faster clock.
+ */
+ #define BASE_BAUD ( 1843200 / 16 )
++
++/* Standard COM flags (except for COM4, because of the 8514 problem) */
++#ifdef CONFIG_SERIAL_DETECT_IRQ
++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
++#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
++#else
++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
++#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
++#endif
++
++#define SERIAL_PORT_DFNS \
++ /* UART CLK PORT IRQ FLAGS */ \
++ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
++ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
++ { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
++ { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
+diff --git a/include/asm-x86_64/serial.h b/include/asm-x86_64/serial.h
+index 8ebd765..b0496e0 100644
+--- a/include/asm-x86_64/serial.h
++++ b/include/asm-x86_64/serial.h
+@@ -11,3 +11,19 @@
+ * megabits/second; but this requires the faster clock.
+ */
+ #define BASE_BAUD ( 1843200 / 16 )
++
++/* Standard COM flags (except for COM4, because of the 8514 problem) */
++#ifdef CONFIG_SERIAL_DETECT_IRQ
++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
++#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
++#else
++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
++#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
++#endif
++
++#define SERIAL_PORT_DFNS \
++ /* UART CLK PORT IRQ FLAGS */ \
++ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
++ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
++ { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
++ { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
+diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
+index a3b7854..a686590 100644
+--- a/kernel/power/snapshot.c
++++ b/kernel/power/snapshot.c
+@@ -709,7 +709,8 @@ static void mark_nosave_pages(struct memory_bitmap *bm)
+ region->end_pfn << PAGE_SHIFT);
+
+ for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++)
+- memory_bm_set_bit(bm, pfn);
++ if (pfn_valid(pfn))
++ memory_bm_set_bit(bm, pfn);
+ }
+ }
+
Modified: dists/sid/linux-2.6/debian/patches/series/4
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/4 (original)
+++ dists/sid/linux-2.6/debian/patches/series/4 Thu Aug 23 11:34:21 2007
@@ -4,3 +4,4 @@
+ bugfix/2.6.22.2
+ bugfix/2.6.22.3
+ bugfix/2.6.22.4
++ bugfix/2.6.22.5
More information about the Kernel-svn-changes
mailing list