[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