linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Linux 2.6.17.7
@ 2006-07-25  3:42 Greg KH
  2006-07-25  3:43 ` Greg KH
  2006-07-25  9:55 ` Arnaud Patard
  0 siblings, 2 replies; 19+ messages in thread
From: Greg KH @ 2006-07-25  3:42 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton, torvalds, stable

We (the -stable team) are announcing the release of the 2.6.17.7 kernel.

I'll also be replying to this message with a copy of the patch between
2.6.17.6 and 2.6.17.7, as it is small enough to do so.

The updated 2.6.17.y git tree can be found at:
 	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.17.y.git
and can be browsed at the normal kernel.org git web browser:
	www.kernel.org/git/

thanks,

greg k-h

--------

 Makefile                                   |    2 
 arch/i386/Kconfig                          |    3 
 arch/i386/kernel/cpu/cpufreq/powernow-k7.c |    5 
 arch/i386/kernel/cpu/cpufreq/powernow-k8.c |    2 
 arch/ia64/Kconfig                          |    3 
 arch/powerpc/Kconfig                       |    3 
 arch/x86_64/Kconfig                        |    2 
 arch/x86_64/kernel/setup.c                 |    2 
 block/ll_rw_blk.c                          |    2 
 drivers/acpi/namespace/nsxfeval.c          |    5 
 drivers/cdrom/cdrom.c                      |    2 
 drivers/infiniband/hw/mthca/mthca_reset.c  |   59 +++++++
 drivers/media/dvb/bt8xx/dvb-bt8xx.c        |   10 +
 drivers/media/dvb/bt8xx/dvb-bt8xx.h        |    1 
 drivers/media/dvb/dvb-core/dvb_frontend.c  |   14 +
 drivers/media/dvb/frontends/dvb-pll.c      |   10 -
 drivers/media/dvb/ttpci/budget-av.c        |   20 +-
 drivers/media/dvb/ttpci/budget.c           |    6 
 drivers/media/video/Kconfig                |    6 
 drivers/media/video/stradis.c              |    1 
 drivers/net/via-velocity.c                 |    6 
 drivers/pnp/resource.c                     |    3 
 drivers/serial/8250.c                      |   13 +
 drivers/usb/serial/ftdi_sio.c              |   84 ++++++++--
 fs/file.c                                  |    4 
 fs/namei.c                                 |    8 -
 fs/splice.c                                |  230 ++++++++++++++++-------------
 fs/xfs/xfs_dir2_node.c                     |    2 
 include/sound/initval.h                    |    3 
 mm/Kconfig                                 |    2 
 mm/filemap.c                               |   27 ++-
 mm/filemap.h                               |    4 
 mm/pdflush.c                               |   15 -
 net/core/dev.c                             |    1 
 net/core/ethtool.c                         |    2 
 net/core/skbuff.c                          |    2 
 net/decnet/dn_rules.c                      |    3 
 net/ieee80211/Kconfig                      |    1 
 net/ipv4/fib_rules.c                       |    4 
 net/sched/act_api.c                        |   18 +-
 sound/core/timer.c                         |    5 
 sound/isa/cs423x/Makefile                  |    1 
 sound/pci/Kconfig                          |   14 +
 sound/pci/au88x0/au88x0_mpu401.c           |    2 
 sound/pci/fm801.c                          |    2 
 sound/pci/hda/hda_intel.c                  |    4 
 sound/pci/hda/patch_analog.c               |   19 +-
 sound/pci/hda/patch_realtek.c              |    2 
 sound/pci/hda/patch_sigmatel.c             |    8 -
 sound/pci/rme9652/hdsp.c                   |    5 
 50 files changed, 434 insertions(+), 218 deletions(-)

Summary of changes from v2.6.17.6 to v2.6.17.7
==============================================

Andi Kleen:
      BLOCK: Fix bounce limit address check

Andrew de Quincey:
      v4l/dvb: Fix budget-av frontend detection
      v4l/dvb: Fix CI on old KNC1 DVBC cards
      v4l/dvb: Fix CI interface on PRO KNC1 cards
      v4l/dvb: Backport fix to artec USB DVB devices
      v4l/dvb: Backport the DISEQC regression fix to 2.6.17.x
      v4l/dvb: stradis: dont export MODULE_DEVICE_TABLE

Andrew Morton:
      pnp: suppress request_irq() warning
      generic_file_buffered_write(): handle zero-length iovec segments
      serial 8250: sysrq deadlock fix

Bob Moore:
      Reduce ACPI verbosity on null handle condition

Chuck Ebbert:
      ieee80211: TKIP requires CRC32

Dave Jones:
      Make powernow-k7 work on SMP kernels.

Francois Romieu:
      via-velocity: the link is not correctly detected when the device starts

Greg Kroah-Hartman:
      Linux 2.6.17.7

Herbert Xu:
      Add missing UFO initialisations

Ian Abbott:
      USB serial ftdi_sio: Prevent userspace DoS (CVE-2006-2936)

Jens Axboe:
      cdrom: fix bad cgc.buflen assignment
      splice: fix problems with sys_tee()

Kirill Korotaev:
      fix fdset leakage
      struct file leakage

Mandy Kirkconnell:
      XFS: corruption fix

Michael Krufky:
      v4l/dvb: Kconfig: fix description and dependencies for saa7115 module
      dvb-bt8xx: fix frontend detection for DViCO FusionHDTV DVB-T Lite rev 1.2

Michael S. Tsirkin:
      IB/mthca: restore missing PCI registers after reset

Oliver Endriss:
      v4l/dvb: Backport the budget driver DISEQC instability fix

Patrick McHardy:
      Fix IPv4/DECnet routing rule dumping

Pavel Machek:
      pdflush: handle resume wakeups

Piotr Kaczuba:
      x86_64: Fix modular pc speaker

Randy Dunlap:
      Fix powernow-k8 SMP kernel on UP hardware bug.

Remy Bruno:
      ALSA: RME HDSP - fixed proc interface (missing {})

Takashi Iwai:
      ALSA: au88x0 - Fix 64bit address of MPU401 MMIO port
      ALSA: Fix a deadlock in snd-rtctimer
      ALSA: Fix missing array terminators in AD1988 codec support
      ALSA: Fix model for HP dc7600
      ALSA: Fix mute switch on VAIO laptops with STAC7661
      ALSA: fix the SND_FM801_TEA575X dependencies
      ALSA: Fix undefined (missing) references in ISA MIRO sound driver
      ALSA: Fix workaround for AD1988A rev2 codec
      ALSA: hda-intel - Fix race in remove
      Suppress irq handler mismatch messages in ALSA ISA drivers

Thomas Graf:
      PKT_SCHED: Fix illegal memory dereferences when dumping actions
      PKT_SCHED: Return ENOENT if action module is unavailable
      PKT_SCHED: Fix error handling while dumping actions

Vladimir V. Saveliev:
      generic_file_buffered_write(): deadlock on vectored write

Willy Tarreau:
      ethtool: oops in ethtool_set_pauseparam()

Yasunori Goto:
      memory hotplug: solve config broken: undefined reference to `online_page'


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Linux 2.6.17.7
  2006-07-25  3:42 Linux 2.6.17.7 Greg KH
@ 2006-07-25  3:43 ` Greg KH
  2006-07-25  9:55 ` Arnaud Patard
  1 sibling, 0 replies; 19+ messages in thread
From: Greg KH @ 2006-07-25  3:43 UTC (permalink / raw)
  To: linux-kernel, Andrew Morton, torvalds, stable

diff --git a/Makefile b/Makefile
index 5c568d3..1f89bc5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 17
-EXTRAVERSION = .6
+EXTRAVERSION = .7
 NAME=Crazed Snow-Weasel
 
 # *DOCUMENTATION*
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index 8dfa305..6ad5144 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -765,6 +765,9 @@ config HOTPLUG_CPU
 
 endmenu
 
+config ARCH_ENABLE_MEMORY_HOTPLUG
+	def_bool y
+	depends on HIGHMEM
 
 menu "Power management options (ACPI, APM)"
 	depends on !X86_VOYAGER
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
index 2bf4237..a748409 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
@@ -581,10 +581,7 @@ static int __init powernow_cpu_init (str
 
 	rdmsrl (MSR_K7_FID_VID_STATUS, fidvidstatus.val);
 
-	/* recalibrate cpu_khz */
-	result = recalibrate_cpu_khz();
-	if (result)
-		return result;
+	recalibrate_cpu_khz();
 
 	fsb = (10 * cpu_khz) / fid_codes[fidvidstatus.bits.CFID];
 	if (!fsb) {
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
index 71fffa1..2ea3c6c 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
@@ -1008,7 +1008,7 @@ static int __cpuinit powernowk8_cpu_init
 		 * an UP version, and is deprecated by AMD.
 		 */
 
-		if ((num_online_cpus() != 1) || (num_possible_cpus() != 1)) {
+		if (num_online_cpus() != 1) {
 			printk(KERN_ERR PFX "MP systems not supported by PSB BIOS structure\n");
 			kfree(data);
 			return -ENODEV;
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 0f3076a..0c0cd0a 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -270,6 +270,9 @@ config HOTPLUG_CPU
 	  can be controlled through /sys/devices/system/cpu/cpu#.
 	  Say N if you want to disable CPU hotplug.
 
+config ARCH_ENABLE_MEMORY_HOTPLUG
+	def_bool y
+
 config SCHED_SMT
 	bool "SMT scheduler support"
 	depends on SMP
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 6729c98..fbc2b7f 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -599,6 +599,9 @@ config HOTPLUG_CPU
 
 	  Say N if you are unsure.
 
+config ARCH_ENABLE_MEMORY_HOTPLUG
+	def_bool y
+
 config KEXEC
 	bool "kexec system call (EXPERIMENTAL)"
 	depends on PPC_MULTIPLATFORM && EXPERIMENTAL
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
index 408d44a..ce0c797 100644
--- a/arch/x86_64/Kconfig
+++ b/arch/x86_64/Kconfig
@@ -369,6 +369,8 @@ config HOTPLUG_CPU
 		can be controlled through /sys/devices/system/cpu/cpu#.
 		Say N if you want to disable CPU hotplug.
 
+config ARCH_ENABLE_MEMORY_HOTPLUG
+	def_bool y
 
 config HPET_TIMER
 	bool
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index 655b919..e8d5f84 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -1440,7 +1440,7 @@ struct seq_operations cpuinfo_op = {
 	.show =	show_cpuinfo,
 };
 
-#ifdef CONFIG_INPUT_PCSPKR
+#if defined(CONFIG_INPUT_PCSPKR) || defined(CONFIG_INPUT_PCSPKR_MODULE)
 #include <linux/platform_device.h>
 static __init int add_pcspkr(void)
 {
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c
index 7eb36c5..4293143 100644
--- a/block/ll_rw_blk.c
+++ b/block/ll_rw_blk.c
@@ -638,7 +638,7 @@ #if BITS_PER_LONG == 64
 	/* Assume anything <= 4GB can be handled by IOMMU.
 	   Actually some IOMMUs can handle everything, but I don't
 	   know of a way to test this here. */
-	if (bounce_pfn < (0xffffffff>>PAGE_SHIFT))
+	if (bounce_pfn < (min_t(u64,0xffffffff,BLK_BOUNCE_HIGH) >> PAGE_SHIFT))
 		dma = 1;
 	q->bounce_pfn = max_low_pfn;
 #else
diff --git a/drivers/acpi/namespace/nsxfeval.c b/drivers/acpi/namespace/nsxfeval.c
index a95f636..d7791fb 100644
--- a/drivers/acpi/namespace/nsxfeval.c
+++ b/drivers/acpi/namespace/nsxfeval.c
@@ -238,8 +238,9 @@ acpi_evaluate_object(acpi_handle handle,
 			ACPI_ERROR((AE_INFO,
 				    "Both Handle and Pathname are NULL"));
 		} else {
-			ACPI_ERROR((AE_INFO,
-				    "Handle is NULL and Pathname is relative"));
+			ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+					  "Null Handle with relative pathname [%s]",
+					  pathname));
 		}
 
 		status = AE_BAD_PARAMETER;
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 3170eaa..fdd37e4 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -1838,7 +1838,7 @@ static int dvd_read_bca(struct cdrom_dev
 	init_cdrom_command(&cgc, buf, sizeof(buf), CGC_DATA_READ);
 	cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
 	cgc.cmd[7] = s->type;
-	cgc.cmd[9] = cgc.buflen = 0xff;
+	cgc.cmd[9] = cgc.buflen & 0xff;
 
 	if ((ret = cdo->generic_packet(cdi, &cgc)))
 		return ret;
diff --git a/drivers/infiniband/hw/mthca/mthca_reset.c b/drivers/infiniband/hw/mthca/mthca_reset.c
index df5e494..f4fddd5 100644
--- a/drivers/infiniband/hw/mthca/mthca_reset.c
+++ b/drivers/infiniband/hw/mthca/mthca_reset.c
@@ -49,6 +49,12 @@ int mthca_reset(struct mthca_dev *mdev)
 	u32 *hca_header    = NULL;
 	u32 *bridge_header = NULL;
 	struct pci_dev *bridge = NULL;
+	int bridge_pcix_cap = 0;
+	int hca_pcie_cap = 0;
+	int hca_pcix_cap = 0;
+
+	u16 devctl;
+	u16 linkctl;
 
 #define MTHCA_RESET_OFFSET 0xf0010
 #define MTHCA_RESET_VALUE  swab32(1)
@@ -110,6 +116,9 @@ #define MTHCA_RESET_VALUE  swab32(1)
 		}
 	}
 
+	hca_pcix_cap = pci_find_capability(mdev->pdev, PCI_CAP_ID_PCIX);
+	hca_pcie_cap = pci_find_capability(mdev->pdev, PCI_CAP_ID_EXP);
+
 	if (bridge) {
 		bridge_header = kmalloc(256, GFP_KERNEL);
 		if (!bridge_header) {
@@ -129,6 +138,13 @@ #define MTHCA_RESET_VALUE  swab32(1)
 				goto out;
 			}
 		}
+		bridge_pcix_cap = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
+		if (!bridge_pcix_cap) {
+				err = -ENODEV;
+				mthca_err(mdev, "Couldn't locate HCA bridge "
+					  "PCI-X capability, aborting.\n");
+				goto out;
+		}
 	}
 
 	/* actually hit reset */
@@ -178,6 +194,20 @@ #define MTHCA_RESET_VALUE  swab32(1)
 good:
 	/* Now restore the PCI headers */
 	if (bridge) {
+		if (pci_write_config_dword(bridge, bridge_pcix_cap + 0x8,
+				 bridge_header[(bridge_pcix_cap + 0x8) / 4])) {
+			err = -ENODEV;
+			mthca_err(mdev, "Couldn't restore HCA bridge Upstream "
+				  "split transaction control, aborting.\n");
+			goto out;
+		}
+		if (pci_write_config_dword(bridge, bridge_pcix_cap + 0xc,
+				 bridge_header[(bridge_pcix_cap + 0xc) / 4])) {
+			err = -ENODEV;
+			mthca_err(mdev, "Couldn't restore HCA bridge Downstream "
+				  "split transaction control, aborting.\n");
+			goto out;
+		}
 		/*
 		 * Bridge control register is at 0x3e, so we'll
 		 * naturally restore it last in this loop.
@@ -203,6 +233,35 @@ good:
 		}
 	}
 
+	if (hca_pcix_cap) {
+		if (pci_write_config_dword(mdev->pdev, hca_pcix_cap,
+				 hca_header[hca_pcix_cap / 4])) {
+			err = -ENODEV;
+			mthca_err(mdev, "Couldn't restore HCA PCI-X "
+				  "command register, aborting.\n");
+			goto out;
+		}
+	}
+
+	if (hca_pcie_cap) {
+		devctl = hca_header[(hca_pcie_cap + PCI_EXP_DEVCTL) / 4];
+		if (pci_write_config_word(mdev->pdev, hca_pcie_cap + PCI_EXP_DEVCTL,
+					   devctl)) {
+			err = -ENODEV;
+			mthca_err(mdev, "Couldn't restore HCA PCI Express "
+				  "Device Control register, aborting.\n");
+			goto out;
+		}
+		linkctl = hca_header[(hca_pcie_cap + PCI_EXP_LNKCTL) / 4];
+		if (pci_write_config_word(mdev->pdev, hca_pcie_cap + PCI_EXP_LNKCTL,
+					   linkctl)) {
+			err = -ENODEV;
+			mthca_err(mdev, "Couldn't restore HCA PCI Express "
+				  "Link control register, aborting.\n");
+			goto out;
+		}
+	}
+
 	for (i = 0; i < 16; ++i) {
 		if (i * 4 == PCI_COMMAND)
 			continue;
diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.c b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
index ccc7b2e..0bcaa35 100644
--- a/drivers/media/dvb/bt8xx/dvb-bt8xx.c
+++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
@@ -184,6 +184,11 @@ static struct mt352_config thomson_dtt75
 	.pll_set = thomson_dtt7579_pll_set,
 };
 
+static struct zl10353_config thomson_dtt7579_zl10353_config = {
+	.demod_address = 0x0f,
+	.pll_set = thomson_dtt7579_pll_set,
+};
+
 static int cx24108_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
 {
 	u32 freq = params->frequency;
@@ -617,6 +622,11 @@ static void frontend_init(struct dvb_bt8
 	switch(type) {
 	case BTTV_BOARD_DVICO_DVBT_LITE:
 		card->fe = mt352_attach(&thomson_dtt7579_config, card->i2c_adapter);
+
+		if (card->fe == NULL)
+			card->fe = zl10353_attach(&thomson_dtt7579_zl10353_config,
+						  card->i2c_adapter);
+
 		if (card->fe != NULL) {
 			card->fe->ops->info.frequency_min = 174000000;
 			card->fe->ops->info.frequency_max = 862000000;
diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.h b/drivers/media/dvb/bt8xx/dvb-bt8xx.h
index 00dd9fa..e41066a 100644
--- a/drivers/media/dvb/bt8xx/dvb-bt8xx.h
+++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.h
@@ -37,6 +37,7 @@ #include "nxt6000.h"
 #include "cx24110.h"
 #include "or51211.h"
 #include "lgdt330x.h"
+#include "zl10353.h"
 
 struct dvb_bt8xx_card {
 	struct mutex lock;
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index a051790..cb69372 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -519,7 +519,9 @@ static int dvb_frontend_thread(void *dat
 	fepriv->delay = 3*HZ;
 	fepriv->status = 0;
 	fepriv->wakeup = 0;
-	fepriv->reinitialise = 1;
+	fepriv->reinitialise = 0;
+
+	dvb_frontend_init(fe);
 
 	while (1) {
 		up(&fepriv->sem);	    /* is locked when we enter the thread... */
@@ -996,17 +998,17 @@ static int dvb_frontend_open(struct inod
 		return ret;
 
 	if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
+		/* normal tune mode when opened R/W */
+		fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
+		fepriv->tone = -1;
+		fepriv->voltage = -1;
+
 		ret = dvb_frontend_start (fe);
 		if (ret)
 			dvb_generic_release (inode, file);
 
 		/*  empty event queue */
 		fepriv->events.eventr = fepriv->events.eventw = 0;
-
-		/* normal tune mode when opened R/W */
-		fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
-		fepriv->tone = -1;
-		fepriv->voltage = -1;
 	}
 
 	return ret;
diff --git a/drivers/media/dvb/frontends/dvb-pll.c b/drivers/media/dvb/frontends/dvb-pll.c
index 791706e..40930a3 100644
--- a/drivers/media/dvb/frontends/dvb-pll.c
+++ b/drivers/media/dvb/frontends/dvb-pll.c
@@ -194,11 +194,11 @@ struct dvb_pll_desc dvb_pll_tda665x = {
 		{  253834000, 36249333, 166667, 0xca, 0x62 /* 011 0 0 0  10 */ },
 		{  383834000, 36249333, 166667, 0xca, 0xa2 /* 101 0 0 0  10 */ },
 		{  443834000, 36249333, 166667, 0xca, 0xc2 /* 110 0 0 0  10 */ },
-		{  444000000, 36249333, 166667, 0xca, 0xc3 /* 110 0 0 0  11 */ },
-		{  583834000, 36249333, 166667, 0xca, 0x63 /* 011 0 0 0  11 */ },
-		{  793834000, 36249333, 166667, 0xca, 0xa3 /* 101 0 0 0  11 */ },
-		{  444834000, 36249333, 166667, 0xca, 0xc3 /* 110 0 0 0  11 */ },
-		{  861000000, 36249333, 166667, 0xca, 0xe3 /* 111 0 0 0  11 */ },
+		{  444000000, 36249333, 166667, 0xca, 0xc4 /* 110 0 0 1  00 */ },
+		{  583834000, 36249333, 166667, 0xca, 0x64 /* 011 0 0 1  00 */ },
+		{  793834000, 36249333, 166667, 0xca, 0xa4 /* 101 0 0 1  00 */ },
+		{  444834000, 36249333, 166667, 0xca, 0xc4 /* 110 0 0 1  00 */ },
+		{  861000000, 36249333, 166667, 0xca, 0xe4 /* 111 0 0 1  00 */ },
 	}
 };
 EXPORT_SYMBOL(dvb_pll_tda665x);
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c
index 8a7cd7d..aaaae40 100644
--- a/drivers/media/dvb/ttpci/budget-av.c
+++ b/drivers/media/dvb/ttpci/budget-av.c
@@ -1017,12 +1017,13 @@ static void frontend_init(struct budget_
 	struct saa7146_dev * saa = budget_av->budget.dev;
 	struct dvb_frontend * fe = NULL;
 
+	/* Enable / PowerON Frontend */
+	saa7146_setgpio(saa, 0, SAA7146_GPIO_OUTLO);
+
 	switch (saa->pci->subsystem_device) {
 		case SUBID_DVBS_KNC1_PLUS:
 		case SUBID_DVBC_KNC1_PLUS:
 		case SUBID_DVBT_KNC1_PLUS:
-			// Enable / PowerON Frontend
-			saa7146_setgpio(saa, 0, SAA7146_GPIO_OUTLO);
 			saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTHI);
 			break;
 	}
@@ -1059,6 +1060,15 @@ static void frontend_init(struct budget_
 		break;
 
 	case SUBID_DVBC_KNC1:
+		budget_av->reinitialise_demod = 1;
+		fe = tda10021_attach(&philips_cu1216_config,
+				     &budget_av->budget.i2c_adap,
+				     read_pwm(budget_av));
+		if (fe) {
+			fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set_params;
+		}
+		break;
+
 	case SUBID_DVBC_KNC1_PLUS:
 		fe = tda10021_attach(&philips_cu1216_config,
 				     &budget_av->budget.i2c_adap,
@@ -1208,11 +1218,7 @@ static int budget_av_attach(struct saa71
 
 	budget_av->budget.dvb_adapter.priv = budget_av;
 	frontend_init(budget_av);
-
-	if (!budget_av->has_saa7113) {
-		ciintf_init(budget_av);
-	}
-
+	ciintf_init(budget_av);
 	return 0;
 }
 
diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c
index c23c02d..3cdc767 100644
--- a/drivers/media/dvb/ttpci/budget.c
+++ b/drivers/media/dvb/ttpci/budget.c
@@ -367,12 +367,6 @@ static void frontend_init(struct budget 
 
 		// try the ALPS BSRU6 now
 		budget->dvb_frontend = stv0299_attach(&alps_bsru6_config, &budget->i2c_adap);
-		if (budget->dvb_frontend) {
-			budget->dvb_frontend->ops->diseqc_send_master_cmd = budget_diseqc_send_master_cmd;
-			budget->dvb_frontend->ops->diseqc_send_burst = budget_diseqc_send_burst;
-			budget->dvb_frontend->ops->set_tone = budget_set_tone;
-			break;
-		}
 		break;
 
 	case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659))
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index 6b41970..67d729a 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -380,10 +380,10 @@ config VIDEO_WM8739
 source "drivers/media/video/cx25840/Kconfig"
 
 config VIDEO_SAA711X
-	tristate "Philips SAA7113/4/5 video decoders (OBSOLETED)"
-	depends on VIDEO_V4L1 && I2C && EXPERIMENTAL
+	tristate "Philips SAA7113/4/5 video decoders"
+	depends on VIDEO_DEV && I2C && EXPERIMENTAL
 	---help---
-	  Old support for the Philips SAA7113/4 video decoders.
+	  Support for the Philips SAA7113/4/5 video decoders.
 
 	  To compile this driver as a module, choose M here: the
 	  module will be called saa7115.
diff --git a/drivers/media/video/stradis.c b/drivers/media/video/stradis.c
index 07476c7..af372dd 100644
--- a/drivers/media/video/stradis.c
+++ b/drivers/media/video/stradis.c
@@ -2180,7 +2180,6 @@ static struct pci_device_id stradis_pci_
 	{ 0 }
 };
 
-MODULE_DEVICE_TABLE(pci, stradis_pci_tbl);
 
 static struct pci_driver stradis_driver = {
 	.name = "stradis",
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c
index ed1f837..6e59ab5 100644
--- a/drivers/net/via-velocity.c
+++ b/drivers/net/via-velocity.c
@@ -248,6 +248,7 @@ static void velocity_free_rd_ring(struct
 static void velocity_free_tx_buf(struct velocity_info *vptr, struct velocity_td_info *);
 static int velocity_soft_reset(struct velocity_info *vptr);
 static void mii_init(struct velocity_info *vptr, u32 mii_status);
+static u32 velocity_get_link(struct net_device *dev);
 static u32 velocity_get_opt_media_mode(struct velocity_info *vptr);
 static void velocity_print_link_status(struct velocity_info *vptr);
 static void safe_disable_mii_autopoll(struct mac_regs __iomem * regs);
@@ -798,6 +799,9 @@ #endif
 	if (ret < 0)
 		goto err_iounmap;
 
+	if (velocity_get_link(dev))
+		netif_carrier_off(dev);
+
 	velocity_print_info(vptr);
 	pci_set_drvdata(pdev, dev);
 	
@@ -1653,8 +1657,10 @@ static void velocity_error(struct veloci
 
 		if (linked) {
 			vptr->mii_status &= ~VELOCITY_LINK_FAIL;
+			netif_carrier_on(vptr->dev);
 		} else {
 			vptr->mii_status |= VELOCITY_LINK_FAIL;
+			netif_carrier_off(vptr->dev);
 		}
 
 		velocity_print_link_status(vptr);
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index 6ded527..688421d 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -396,7 +396,8 @@ #endif
 	/* check if the resource is already in use, skip if the
 	 * device is active because it itself may be in use */
 	if(!dev->active) {
-		if (request_irq(*irq, pnp_test_handler, SA_INTERRUPT, "pnp", NULL))
+		if (request_irq(*irq, pnp_test_handler,
+				SA_INTERRUPT|SA_PROBEIRQ, "pnp", NULL))
 			return 0;
 		free_irq(*irq, NULL);
 	}
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index bbf78aa..3863eba 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -2241,10 +2241,14 @@ serial8250_console_write(struct console 
 
 	touch_nmi_watchdog();
 
-	if (oops_in_progress) {
-		locked = spin_trylock_irqsave(&up->port.lock, flags);
+	local_irq_save(flags);
+	if (up->port.sysrq) {
+		/* serial8250_handle_port() already took the lock */
+		locked = 0;
+	} else if (oops_in_progress) {
+		locked = spin_trylock(&up->port.lock);
 	} else
-		spin_lock_irqsave(&up->port.lock, flags);
+		spin_lock(&up->port.lock);
 
 	/*
 	 *	First save the IER then disable the interrupts
@@ -2266,7 +2270,8 @@ serial8250_console_write(struct console 
 	serial_out(up, UART_IER, ier);
 
 	if (locked)
-		spin_unlock_irqrestore(&up->port.lock, flags);
+		spin_unlock(&up->port.lock);
+	local_irq_restore(flags);
 }
 
 static int serial8250_console_setup(struct console *co, char *options)
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 986d762..ad9ddec 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -553,6 +553,10 @@ struct ftdi_private {
 
 	int force_baud;		/* if non-zero, force the baud rate to this value */
 	int force_rtscts;	/* if non-zero, force RTS-CTS to always be enabled */
+
+	spinlock_t tx_lock;	/* spinlock for transmit state */
+	unsigned long tx_outstanding_bytes;
+	unsigned long tx_outstanding_urbs;
 };
 
 /* Used for TIOCMIWAIT */
@@ -626,6 +630,9 @@ #define WDR_SHORT_TIMEOUT 1000	/* shorte
 #define HIGH 1
 #define LOW 0
 
+/* number of outstanding urbs to prevent userspace DoS from happening */
+#define URB_UPPER_LIMIT	42
+
 /*
  * ***************************************************************************
  * Utlity functions
@@ -1156,6 +1163,7 @@ static int ftdi_sio_attach (struct usb_s
 	}
 
 	spin_lock_init(&priv->rx_lock);
+	spin_lock_init(&priv->tx_lock);
         init_waitqueue_head(&priv->delta_msr_wait);
 	/* This will push the characters through immediately rather
 	   than queue a task to deliver them */
@@ -1372,6 +1380,7 @@ static int ftdi_write (struct usb_serial
 	int data_offset ;       /* will be 1 for the SIO and 0 otherwise */
 	int status;
 	int transfer_size;
+	unsigned long flags;
 
 	dbg("%s port %d, %d bytes", __FUNCTION__, port->number, count);
 
@@ -1379,6 +1388,13 @@ static int ftdi_write (struct usb_serial
 		dbg("write request of 0 bytes");
 		return 0;
 	}
+	spin_lock_irqsave(&priv->tx_lock, flags);
+	if (priv->tx_outstanding_urbs > URB_UPPER_LIMIT) {
+		spin_unlock_irqrestore(&priv->tx_lock, flags);
+		dbg("%s - write limit hit\n", __FUNCTION__);
+		return 0;
+	}
+	spin_unlock_irqrestore(&priv->tx_lock, flags);
 	
 	data_offset = priv->write_offset;
         dbg("data_offset set to %d",data_offset);
@@ -1445,6 +1461,11 @@ static int ftdi_write (struct usb_serial
 		err("%s - failed submitting write urb, error %d", __FUNCTION__, status);
 		count = status;
 		kfree (buffer);
+	} else {
+		spin_lock_irqsave(&priv->tx_lock, flags);
+		++priv->tx_outstanding_urbs;
+		priv->tx_outstanding_bytes += count;
+		spin_unlock_irqrestore(&priv->tx_lock, flags);
 	}
 
 	/* we are done with this urb, so let the host driver
@@ -1460,7 +1481,11 @@ static int ftdi_write (struct usb_serial
 
 static void ftdi_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
+	unsigned long flags;
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
+	struct ftdi_private *priv;
+	int data_offset;       /* will be 1 for the SIO and 0 otherwise */
+	unsigned long countback;
 
 	/* free up the transfer buffer, as usb_free_urb() does not do this */
 	kfree (urb->transfer_buffer);
@@ -1472,34 +1497,67 @@ static void ftdi_write_bulk_callback (st
 		return;
 	}
 
+	priv = usb_get_serial_port_data(port);
+	if (!priv) {
+		dbg("%s - bad port private data pointer - exiting", __FUNCTION__);
+		return;
+	}
+	/* account for transferred data */
+	countback = urb->actual_length;
+	data_offset = priv->write_offset;
+	if (data_offset > 0) {
+		/* Subtract the control bytes */
+		countback -= (data_offset * ((countback + (PKTSZ - 1)) / PKTSZ));
+	}
+	spin_lock_irqsave(&priv->tx_lock, flags);
+	--priv->tx_outstanding_urbs;
+	priv->tx_outstanding_bytes -= countback;
+	spin_unlock_irqrestore(&priv->tx_lock, flags);
+
 	schedule_work(&port->work);
 } /* ftdi_write_bulk_callback */
 
 
 static int ftdi_write_room( struct usb_serial_port *port )
 {
+	struct ftdi_private *priv = usb_get_serial_port_data(port);
+	int room;
+	unsigned long flags;
+
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	/*
-	 * We really can take anything the user throws at us
-	 * but let's pick a nice big number to tell the tty
-	 * layer that we have lots of free space
-	 */
-	return 2048;
+	spin_lock_irqsave(&priv->tx_lock, flags);
+	if (priv->tx_outstanding_urbs < URB_UPPER_LIMIT) {
+		/*
+		 * We really can take anything the user throws at us
+		 * but let's pick a nice big number to tell the tty
+		 * layer that we have lots of free space
+		 */
+		room = 2048;
+	} else {
+		room = 0;
+	}
+	spin_unlock_irqrestore(&priv->tx_lock, flags);
+	return room;
 } /* ftdi_write_room */
 
 
 static int ftdi_chars_in_buffer (struct usb_serial_port *port)
 { /* ftdi_chars_in_buffer */
+	struct ftdi_private *priv = usb_get_serial_port_data(port);
+	int buffered;
+	unsigned long flags;
+
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	/* 
-	 * We can't really account for how much data we
-	 * have sent out, but hasn't made it through to the
-	 * device, so just tell the tty layer that everything
-	 * is flushed.
-	 */
-	return 0;
+	spin_lock_irqsave(&priv->tx_lock, flags);
+	buffered = (int)priv->tx_outstanding_bytes;
+	spin_unlock_irqrestore(&priv->tx_lock, flags);
+	if (buffered < 0) {
+		err("%s outstanding tx bytes is negative!", __FUNCTION__);
+		buffered = 0;
+	}
+	return buffered;
 } /* ftdi_chars_in_buffer */
 
 
diff --git a/fs/file.c b/fs/file.c
index 55f4e70..4c2cacc 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -277,11 +277,13 @@ #endif
 	} while (nfds <= nr);
 	new_fds = alloc_fd_array(nfds);
 	if (!new_fds)
-		goto out;
+		goto out2;
 	fdt->fd = new_fds;
 	fdt->max_fds = nfds;
 	fdt->free_files = NULL;
 	return fdt;
+out2:
+	nfds = fdt->max_fdset;
 out:
   	if (new_openset)
   		free_fdset(new_openset, nfds);
diff --git a/fs/namei.c b/fs/namei.c
index d6e2ee2..21be124 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1712,8 +1712,14 @@ do_link:
 	if (error)
 		goto exit_dput;
 	error = __do_follow_link(&path, nd);
-	if (error)
+	if (error) {
+		/* Does someone understand code flow here? Or it is only
+		 * me so stupid? Anathema to whoever designed this non-sense
+		 * with "intent.open".
+		 */
+		release_open_intent(nd);
 		return error;
+	}
 	nd->flags &= ~LOOKUP_PARENT;
 	if (nd->last_type == LAST_BIND)
 		goto ok;
diff --git a/fs/splice.c b/fs/splice.c
index a285fd7..8fef667 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1295,6 +1295,85 @@ asmlinkage long sys_splice(int fd_in, lo
 }
 
 /*
+ * Make sure there's data to read. Wait for input if we can, otherwise
+ * return an appropriate error.
+ */
+static int link_ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+{
+	int ret;
+
+	/*
+	 * Check ->nrbufs without the inode lock first. This function
+	 * is speculative anyways, so missing one is ok.
+	 */
+	if (pipe->nrbufs)
+		return 0;
+
+	ret = 0;
+	mutex_lock(&pipe->inode->i_mutex);
+
+	while (!pipe->nrbufs) {
+		if (signal_pending(current)) {
+			ret = -ERESTARTSYS;
+			break;
+		}
+		if (!pipe->writers)
+			break;
+		if (!pipe->waiting_writers) {
+			if (flags & SPLICE_F_NONBLOCK) {
+				ret = -EAGAIN;
+				break;
+			}
+		}
+		pipe_wait(pipe);
+	}
+
+	mutex_unlock(&pipe->inode->i_mutex);
+	return ret;
+}
+
+/*
+ * Make sure there's writeable room. Wait for room if we can, otherwise
+ * return an appropriate error.
+ */
+static int link_opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+{
+	int ret;
+
+	/*
+	 * Check ->nrbufs without the inode lock first. This function
+	 * is speculative anyways, so missing one is ok.
+	 */
+	if (pipe->nrbufs < PIPE_BUFFERS)
+		return 0;
+
+	ret = 0;
+	mutex_lock(&pipe->inode->i_mutex);
+
+	while (pipe->nrbufs >= PIPE_BUFFERS) {
+		if (!pipe->readers) {
+			send_sig(SIGPIPE, current, 0);
+			ret = -EPIPE;
+			break;
+		}
+		if (flags & SPLICE_F_NONBLOCK) {
+			ret = -EAGAIN;
+			break;
+		}
+		if (signal_pending(current)) {
+			ret = -ERESTARTSYS;
+			break;
+		}
+		pipe->waiting_writers++;
+		pipe_wait(pipe);
+		pipe->waiting_writers--;
+	}
+
+	mutex_unlock(&pipe->inode->i_mutex);
+	return ret;
+}
+
+/*
  * Link contents of ipipe to opipe.
  */
 static int link_pipe(struct pipe_inode_info *ipipe,
@@ -1302,9 +1381,7 @@ static int link_pipe(struct pipe_inode_i
 		     size_t len, unsigned int flags)
 {
 	struct pipe_buffer *ibuf, *obuf;
-	int ret, do_wakeup, i, ipipe_first;
-
-	ret = do_wakeup = ipipe_first = 0;
+	int ret = 0, i = 0, nbuf;
 
 	/*
 	 * Potential ABBA deadlock, work around it by ordering lock
@@ -1312,7 +1389,6 @@ static int link_pipe(struct pipe_inode_i
 	 * could deadlock (one doing tee from A -> B, the other from B -> A).
 	 */
 	if (ipipe->inode < opipe->inode) {
-		ipipe_first = 1;
 		mutex_lock(&ipipe->inode->i_mutex);
 		mutex_lock(&opipe->inode->i_mutex);
 	} else {
@@ -1320,118 +1396,55 @@ static int link_pipe(struct pipe_inode_i
 		mutex_lock(&ipipe->inode->i_mutex);
 	}
 
-	for (i = 0;; i++) {
+	do {
 		if (!opipe->readers) {
 			send_sig(SIGPIPE, current, 0);
 			if (!ret)
 				ret = -EPIPE;
 			break;
 		}
-		if (ipipe->nrbufs - i) {
-			ibuf = ipipe->bufs + ((ipipe->curbuf + i) & (PIPE_BUFFERS - 1));
 
-			/*
-			 * If we have room, fill this buffer
-			 */
-			if (opipe->nrbufs < PIPE_BUFFERS) {
-				int nbuf = (opipe->curbuf + opipe->nrbufs) & (PIPE_BUFFERS - 1);
-
-				/*
-				 * Get a reference to this pipe buffer,
-				 * so we can copy the contents over.
-				 */
-				ibuf->ops->get(ipipe, ibuf);
-
-				obuf = opipe->bufs + nbuf;
-				*obuf = *ibuf;
-
-				/*
-				 * Don't inherit the gift flag, we need to
-				 * prevent multiple steals of this page.
-				 */
-				obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
-
-				if (obuf->len > len)
-					obuf->len = len;
-
-				opipe->nrbufs++;
-				do_wakeup = 1;
-				ret += obuf->len;
-				len -= obuf->len;
-
-				if (!len)
-					break;
-				if (opipe->nrbufs < PIPE_BUFFERS)
-					continue;
-			}
-
-			/*
-			 * We have input available, but no output room.
-			 * If we already copied data, return that. If we
-			 * need to drop the opipe lock, it must be ordered
-			 * last to avoid deadlocks.
-			 */
-			if ((flags & SPLICE_F_NONBLOCK) || !ipipe_first) {
-				if (!ret)
-					ret = -EAGAIN;
-				break;
-			}
-			if (signal_pending(current)) {
-				if (!ret)
-					ret = -ERESTARTSYS;
-				break;
-			}
-			if (do_wakeup) {
-				smp_mb();
-				if (waitqueue_active(&opipe->wait))
-					wake_up_interruptible(&opipe->wait);
-				kill_fasync(&opipe->fasync_readers, SIGIO, POLL_IN);
-				do_wakeup = 0;
-			}
+		/*
+		 * If we have iterated all input buffers or ran out of
+		 * output room, break.
+		 */
+		if (i >= ipipe->nrbufs || opipe->nrbufs >= PIPE_BUFFERS)
+			break;
 
-			opipe->waiting_writers++;
-			pipe_wait(opipe);
-			opipe->waiting_writers--;
-			continue;
-		}
+		ibuf = ipipe->bufs + ((ipipe->curbuf + i) & (PIPE_BUFFERS - 1));
+		nbuf = (opipe->curbuf + opipe->nrbufs) & (PIPE_BUFFERS - 1);
 
 		/*
-		 * No input buffers, do the usual checks for available
-		 * writers and blocking and wait if necessary
+		 * Get a reference to this pipe buffer,
+		 * so we can copy the contents over.
 		 */
-		if (!ipipe->writers)
-			break;
-		if (!ipipe->waiting_writers) {
-			if (ret)
-				break;
-		}
+		ibuf->ops->get(ipipe, ibuf);
+
+		obuf = opipe->bufs + nbuf;
+		*obuf = *ibuf;
+
 		/*
-		 * pipe_wait() drops the ipipe mutex. To avoid deadlocks
-		 * with another process, we can only safely do that if
-		 * the ipipe lock is ordered last.
+		 * Don't inherit the gift flag, we need to
+		 * prevent multiple steals of this page.
 		 */
-		if ((flags & SPLICE_F_NONBLOCK) || ipipe_first) {
-			if (!ret)
-				ret = -EAGAIN;
-			break;
-		}
-		if (signal_pending(current)) {
-			if (!ret)
-				ret = -ERESTARTSYS;
-			break;
-		}
+		obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
 
-		if (waitqueue_active(&ipipe->wait))
-			wake_up_interruptible_sync(&ipipe->wait);
-		kill_fasync(&ipipe->fasync_writers, SIGIO, POLL_OUT);
+		if (obuf->len > len)
+			obuf->len = len;
 
-		pipe_wait(ipipe);
-	}
+		opipe->nrbufs++;
+		ret += obuf->len;
+		len -= obuf->len;
+		i++;
+	} while (len);
 
 	mutex_unlock(&ipipe->inode->i_mutex);
 	mutex_unlock(&opipe->inode->i_mutex);
 
-	if (do_wakeup) {
+	/*
+	 * If we put data in the output pipe, wakeup any potential readers.
+	 */
+	if (ret > 0) {
 		smp_mb();
 		if (waitqueue_active(&opipe->wait))
 			wake_up_interruptible(&opipe->wait);
@@ -1452,14 +1465,29 @@ static long do_tee(struct file *in, stru
 {
 	struct pipe_inode_info *ipipe = in->f_dentry->d_inode->i_pipe;
 	struct pipe_inode_info *opipe = out->f_dentry->d_inode->i_pipe;
+	int ret = -EINVAL;
 
 	/*
-	 * Link ipipe to the two output pipes, consuming as we go along.
+	 * Duplicate the contents of ipipe to opipe without actually
+	 * copying the data.
 	 */
-	if (ipipe && opipe)
-		return link_pipe(ipipe, opipe, len, flags);
+	if (ipipe && opipe && ipipe != opipe) {
+		/*
+		 * Keep going, unless we encounter an error. The ipipe/opipe
+		 * ordering doesn't really matter.
+		 */
+		ret = link_ipipe_prep(ipipe, flags);
+		if (!ret) {
+			ret = link_opipe_prep(opipe, flags);
+			if (!ret) {
+				ret = link_pipe(ipipe, opipe, len, flags);
+				if (!ret && (flags & SPLICE_F_NONBLOCK))
+					ret = -EAGAIN;
+			}
+		}
+	}
 
-	return -EINVAL;
+	return ret;
 }
 
 asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags)
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c
index ac511ab..0655cc3 100644
--- a/fs/xfs/xfs_dir2_node.c
+++ b/fs/xfs/xfs_dir2_node.c
@@ -970,7 +970,7 @@ xfs_dir2_leafn_remove(
 			/*
 			 * One less used entry in the free table.
 			 */
-			free->hdr.nused = cpu_to_be32(-1);
+			be32_add(&free->hdr.nused, -1);
 			xfs_dir2_free_log_header(tp, fbp);
 			/*
 			 * If this was the last entry in the table, we can
diff --git a/include/sound/initval.h b/include/sound/initval.h
index d29e3d3..d45170b 100644
--- a/include/sound/initval.h
+++ b/include/sound/initval.h
@@ -62,7 +62,8 @@ static int snd_legacy_find_free_irq(int 
 {
 	while (*irq_table != -1) {
 		if (!request_irq(*irq_table, snd_legacy_empty_irq_handler,
-				 SA_INTERRUPT, "ALSA Test IRQ", (void *) irq_table)) {
+				 SA_INTERRUPT | SA_PROBEIRQ, "ALSA Test IRQ",
+				 (void *) irq_table)) {
 			free_irq(*irq_table, (void *) irq_table);
 			return *irq_table;
 		}
diff --git a/mm/Kconfig b/mm/Kconfig
index 332f5c2..8b13ca3 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -115,7 +115,7 @@ config SPARSEMEM_EXTREME
 # eventually, we can have this option just 'select SPARSEMEM'
 config MEMORY_HOTPLUG
 	bool "Allow for memory hot-add"
-	depends on SPARSEMEM && HOTPLUG && !SOFTWARE_SUSPEND
+	depends on SPARSEMEM && HOTPLUG && !SOFTWARE_SUSPEND && ARCH_ENABLE_MEMORY_HOTPLUG
 
 comment "Memory hotplug is currently incompatible with Software Suspend"
 	depends on SPARSEMEM && HOTPLUG && SOFTWARE_SUSPEND
diff --git a/mm/filemap.c b/mm/filemap.c
index fd57442..4655fa0 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2004,14 +2004,21 @@ generic_file_buffered_write(struct kiocb
 	do {
 		unsigned long index;
 		unsigned long offset;
-		unsigned long maxlen;
 		size_t copied;
 
 		offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
 		index = pos >> PAGE_CACHE_SHIFT;
 		bytes = PAGE_CACHE_SIZE - offset;
-		if (bytes > count)
-			bytes = count;
+
+		/* Limit the size of the copy to the caller's write size */
+		bytes = min(bytes, count);
+
+		/*
+		 * Limit the size of the copy to that of the current segment,
+		 * because fault_in_pages_readable() doesn't know how to walk
+		 * segments.
+		 */
+		bytes = min(bytes, cur_iov->iov_len - iov_base);
 
 		/*
 		 * Bring in the user page that we will copy from _first_.
@@ -2019,10 +2026,7 @@ generic_file_buffered_write(struct kiocb
 		 * same page as we're writing to, without it being marked
 		 * up-to-date.
 		 */
-		maxlen = cur_iov->iov_len - iov_base;
-		if (maxlen > bytes)
-			maxlen = bytes;
-		fault_in_pages_readable(buf, maxlen);
+		fault_in_pages_readable(buf, bytes);
 
 		page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
 		if (!page) {
@@ -2030,6 +2034,12 @@ generic_file_buffered_write(struct kiocb
 			break;
 		}
 
+		if (unlikely(bytes == 0)) {
+			status = 0;
+			copied = 0;
+			goto zero_length_segment;
+		}
+
 		status = a_ops->prepare_write(file, page, offset, offset+bytes);
 		if (unlikely(status)) {
 			loff_t isize = i_size_read(inode);
@@ -2059,7 +2069,8 @@ generic_file_buffered_write(struct kiocb
 			page_cache_release(page);
 			continue;
 		}
-		if (likely(copied > 0)) {
+zero_length_segment:
+		if (likely(copied >= 0)) {
 			if (!status)
 				status = copied;
 
diff --git a/mm/filemap.h b/mm/filemap.h
index 13793ba..efd0142 100644
--- a/mm/filemap.h
+++ b/mm/filemap.h
@@ -78,7 +78,7 @@ filemap_set_next_iovec(const struct iove
 	const struct iovec *iov = *iovp;
 	size_t base = *basep;
 
-	while (bytes) {
+	do {
 		int copy = min(bytes, iov->iov_len - base);
 
 		bytes -= copy;
@@ -87,7 +87,7 @@ filemap_set_next_iovec(const struct iove
 			iov++;
 			base = 0;
 		}
-	}
+	} while (bytes);
 	*iovp = iov;
 	*basep = base;
 }
diff --git a/mm/pdflush.c b/mm/pdflush.c
index c4b6d0a..4842716 100644
--- a/mm/pdflush.c
+++ b/mm/pdflush.c
@@ -104,21 +104,20 @@ static int __pdflush(struct pdflush_work
 		list_move(&my_work->list, &pdflush_list);
 		my_work->when_i_went_to_sleep = jiffies;
 		spin_unlock_irq(&pdflush_lock);
-
 		schedule();
-		if (try_to_freeze()) {
-			spin_lock_irq(&pdflush_lock);
-			continue;
-		}
-
+		try_to_freeze();
 		spin_lock_irq(&pdflush_lock);
 		if (!list_empty(&my_work->list)) {
-			printk("pdflush: bogus wakeup!\n");
+			/*
+			 * Someone woke us up, but without removing our control
+			 * structure from the global list.  swsusp will do this
+			 * in try_to_freeze()->refrigerator().  Handle it.
+			 */
 			my_work->fn = NULL;
 			continue;
 		}
 		if (my_work->fn == NULL) {
-			printk("pdflush: NULL work function\n");
+			printk("pdflush: bogus wakeup\n");
 			continue;
 		}
 		spin_unlock_irq(&pdflush_lock);
diff --git a/net/core/dev.c b/net/core/dev.c
index 4fba549..7d472ed 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1246,6 +1246,7 @@ int __skb_linearize(struct sk_buff *skb,
 	atomic_set(&ninfo->dataref, 1);
 	ninfo->tso_size = skb_shinfo(skb)->tso_size;
 	ninfo->tso_segs = skb_shinfo(skb)->tso_segs;
+	ninfo->ufo_size = skb_shinfo(skb)->ufo_size;
 	ninfo->nr_frags = 0;
 	ninfo->frag_list = NULL;
 
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index c680b7e..4fe39cf 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -437,7 +437,7 @@ static int ethtool_set_pauseparam(struct
 {
 	struct ethtool_pauseparam pauseparam;
 
-	if (!dev->ethtool_ops->get_pauseparam)
+	if (!dev->ethtool_ops->set_pauseparam)
 		return -EOPNOTSUPP;
 
 	if (copy_from_user(&pauseparam, useraddr, sizeof(pauseparam)))
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index fb3770f..0280535 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -240,6 +240,7 @@ struct sk_buff *alloc_skb_from_cache(kme
 	skb_shinfo(skb)->nr_frags  = 0;
 	skb_shinfo(skb)->tso_size = 0;
 	skb_shinfo(skb)->tso_segs = 0;
+	skb_shinfo(skb)->ufo_size = 0;
 	skb_shinfo(skb)->frag_list = NULL;
 out:
 	return skb;
@@ -529,6 +530,7 @@ #endif
 	atomic_set(&new->users, 1);
 	skb_shinfo(new)->tso_size = skb_shinfo(old)->tso_size;
 	skb_shinfo(new)->tso_segs = skb_shinfo(old)->tso_segs;
+	skb_shinfo(new)->ufo_size = skb_shinfo(old)->ufo_size;
 }
 
 /**
diff --git a/net/decnet/dn_rules.c b/net/decnet/dn_rules.c
index 446faaf..2440d05 100644
--- a/net/decnet/dn_rules.c
+++ b/net/decnet/dn_rules.c
@@ -400,9 +400,10 @@ int dn_fib_dump_rules(struct sk_buff *sk
 	rcu_read_lock();
 	hlist_for_each_entry(r, node, &dn_fib_rules, r_hlist) {
 		if (idx < s_idx)
-			continue;
+			goto next;
 		if (dn_fib_fill_rule(skb, r, cb, NLM_F_MULTI) < 0)
 			break;
+next:
 		idx++;
 	}
 	rcu_read_unlock();
diff --git a/net/ieee80211/Kconfig b/net/ieee80211/Kconfig
index dbb0852..f7e84e9 100644
--- a/net/ieee80211/Kconfig
+++ b/net/ieee80211/Kconfig
@@ -58,6 +58,7 @@ config IEEE80211_CRYPT_TKIP
 	depends on IEEE80211 && NET_RADIO
 	select CRYPTO
 	select CRYPTO_MICHAEL_MIC
+	select CRC32
 	---help---
 	Include software based cipher suites in support of IEEE 802.11i
 	(aka TGi, WPA, WPA2, WPA-PSK, etc.) for use with TKIP enabled
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c
index ec566f3..a66c96a 100644
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
@@ -458,13 +458,13 @@ int inet_dump_rules(struct sk_buff *skb,
 
 	rcu_read_lock();
 	hlist_for_each_entry(r, node, &fib_rules, hlist) {
-
 		if (idx < s_idx)
-			continue;
+			goto next;
 		if (inet_fill_rule(skb, r, NETLINK_CB(cb->skb).pid,
 				   cb->nlh->nlmsg_seq,
 				   RTM_NEWRULE, NLM_F_MULTI) < 0)
 			break;
+next:
 		idx++;
 	}
 	rcu_read_unlock();
diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index 2ffa11c..eb7dc29 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -251,15 +251,17 @@ tcf_action_dump(struct sk_buff *skb, str
 		RTA_PUT(skb, a->order, 0, NULL);
 		err = tcf_action_dump_1(skb, a, bind, ref);
 		if (err < 0)
-			goto rtattr_failure;
+			goto errout;
 		r->rta_len = skb->tail - (u8*)r;
 	}
 
 	return 0;
 
 rtattr_failure:
+	err = -EINVAL;
+errout:
 	skb_trim(skb, b - skb->data);
-	return -err;
+	return err;
 }
 
 struct tc_action *tcf_action_init_1(struct rtattr *rta, struct rtattr *est,
@@ -306,6 +308,7 @@ #ifdef CONFIG_KMOD
 			goto err_mod;
 		}
 #endif
+		*err = -ENOENT;
 		goto err_out;
 	}
 
@@ -777,7 +780,7 @@ replay:
 	return ret;
 }
 
-static char *
+static struct rtattr *
 find_dump_kind(struct nlmsghdr *n)
 {
 	struct rtattr *tb1, *tb2[TCA_ACT_MAX+1];
@@ -805,7 +808,7 @@ find_dump_kind(struct nlmsghdr *n)
 		return NULL;
 	kind = tb2[TCA_ACT_KIND-1];
 
-	return (char *) RTA_DATA(kind);
+	return kind;
 }
 
 static int
@@ -818,16 +821,15 @@ tc_dump_action(struct sk_buff *skb, stru
 	struct tc_action a;
 	int ret = 0;
 	struct tcamsg *t = (struct tcamsg *) NLMSG_DATA(cb->nlh);
-	char *kind = find_dump_kind(cb->nlh);
+	struct rtattr *kind = find_dump_kind(cb->nlh);
 
 	if (kind == NULL) {
 		printk("tc_dump_action: action bad kind\n");
 		return 0;
 	}
 
-	a_o = tc_lookup_action_n(kind);
+	a_o = tc_lookup_action(kind);
 	if (a_o == NULL) {
-		printk("failed to find %s\n", kind);
 		return 0;
 	}
 
@@ -835,7 +837,7 @@ tc_dump_action(struct sk_buff *skb, stru
 	a.ops = a_o;
 
 	if (a_o->walk == NULL) {
-		printk("tc_dump_action: %s !capable of dumping table\n", kind);
+		printk("tc_dump_action: %s !capable of dumping table\n", a_o->kind);
 		goto rtattr_failure;
 	}
 
diff --git a/sound/core/timer.c b/sound/core/timer.c
index cdeeb63..4585600 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -628,8 +628,9 @@ static void snd_timer_tasklet(unsigned l
 	struct snd_timer_instance *ti;
 	struct list_head *p;
 	unsigned long resolution, ticks;
+	unsigned long flags;
 
-	spin_lock(&timer->lock);
+	spin_lock_irqsave(&timer->lock, flags);
 	/* now process all callbacks */
 	while (!list_empty(&timer->sack_list_head)) {
 		p = timer->sack_list_head.next;		/* get first item */
@@ -649,7 +650,7 @@ static void snd_timer_tasklet(unsigned l
 		spin_lock(&timer->lock);
 		ti->flags &= ~SNDRV_TIMER_IFLG_CALLBACK;
 	}
-	spin_unlock(&timer->lock);
+	spin_unlock_irqrestore(&timer->lock, flags);
 }
 
 /*
diff --git a/sound/isa/cs423x/Makefile b/sound/isa/cs423x/Makefile
index d2afaea..2fb4f74 100644
--- a/sound/isa/cs423x/Makefile
+++ b/sound/isa/cs423x/Makefile
@@ -11,6 +11,7 @@ snd-cs4236-objs := cs4236.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_AZT2320) += snd-cs4231-lib.o
+obj-$(CONFIG_SND_MIRO) += snd-cs4231-lib.o
 obj-$(CONFIG_SND_OPL3SA2) += snd-cs4231-lib.o
 obj-$(CONFIG_SND_CS4231) += snd-cs4231.o snd-cs4231-lib.o
 obj-$(CONFIG_SND_CS4232) += snd-cs4232.o snd-cs4231-lib.o
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
index a208180..8f34986 100644
--- a/sound/pci/Kconfig
+++ b/sound/pci/Kconfig
@@ -318,17 +318,19 @@ config SND_FM801
 	  To compile this driver as a module, choose M here: the module
 	  will be called snd-fm801.
 
-config SND_FM801_TEA575X
-	tristate "ForteMedia FM801 + TEA5757 tuner"
+config SND_FM801_TEA575X_BOOL
+	bool "ForteMedia FM801 + TEA5757 tuner"
 	depends on SND_FM801
-        select VIDEO_DEV
 	help
 	  Say Y here to include support for soundcards based on the ForteMedia
 	  FM801 chip with a TEA5757 tuner connected to GPIO1-3 pins (Media
-	  Forte SF256-PCS-02).
+	  Forte SF256-PCS-02) into the snd-fm801 driver.
 
-	  To compile this driver as a module, choose M here: the module
-	  will be called snd-fm801-tea575x.
+config SND_FM801_TEA575X
+       tristate
+       depends on SND_FM801_TEA575X_BOOL
+       default SND_FM801
+       select VIDEO_DEV
 
 config SND_HDA_INTEL
 	tristate "Intel HD Audio"
diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
index 873f486..118dcc7 100644
--- a/sound/pci/au88x0/au88x0_mpu401.c
+++ b/sound/pci/au88x0/au88x0_mpu401.c
@@ -47,7 +47,7 @@ static int __devinit snd_vortex_midi(vor
 	struct snd_rawmidi *rmidi;
 	int temp, mode;
 	struct snd_mpu401 *mpu;
-	int port;
+	unsigned long port;
 
 #ifdef VORTEX_MPU401_LEGACY
 	/* EnableHardCodedMPU401Port() */
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index d72fc28..09a2885 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -35,7 +35,7 @@ #include <sound/initval.h>
 
 #include <asm/io.h>
 
-#if (defined(CONFIG_SND_FM801_TEA575X) || defined(CONFIG_SND_FM801_TEA575X_MODULE)) && (defined(CONFIG_VIDEO_DEV) || defined(CONFIG_VIDEO_DEV_MODULE))
+#ifdef CONFIG_SND_FM801_TEA575X_BOOL
 #include <sound/tea575x-tuner.h>
 #define TEA575X_RADIO 1
 #endif
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index e821d65..9dd541d 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1393,10 +1393,10 @@ static int azx_free(struct azx *chip)
 		msleep(1);
 	}
 
-	if (chip->remap_addr)
-		iounmap(chip->remap_addr);
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void*)chip);
+	if (chip->remap_addr)
+		iounmap(chip->remap_addr);
 
 	if (chip->bdl.area)
 		snd_dma_free_pages(&chip->bdl);
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 40f000b..d7343dc 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -1488,6 +1488,9 @@ enum {
 /* reivision id to check workarounds */
 #define AD1988A_REV2		0x100200
 
+#define is_rev2(codec) \
+	((codec)->vendor_id == 0x11d41988 && \
+	 (codec)->revision_id == AD1988A_REV2)
 
 /*
  * mixers
@@ -1579,6 +1582,7 @@ static struct snd_kcontrol_new ad1988_6s
 	HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x05, 1, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x05, 2, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME("Side Playback Volume", 0x0a, 0x0, HDA_OUTPUT),
+	{ } /* end */
 };
 
 static struct snd_kcontrol_new ad1988_6stack_mixers1_rev2[] = {
@@ -1587,6 +1591,7 @@ static struct snd_kcontrol_new ad1988_6s
 	HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0a, 2, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME("Side Playback Volume", 0x06, 0x0, HDA_OUTPUT),
+	{ } /* end */
 };
 
 static struct snd_kcontrol_new ad1988_6stack_mixers2[] = {
@@ -1625,6 +1630,7 @@ static struct snd_kcontrol_new ad1988_3s
 	HDA_CODEC_VOLUME("Surround Playback Volume", 0x0a, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x05, 1, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x05, 2, 0x0, HDA_OUTPUT),
+	{ } /* end */
 };
 
 static struct snd_kcontrol_new ad1988_3stack_mixers1_rev2[] = {
@@ -1632,6 +1638,7 @@ static struct snd_kcontrol_new ad1988_3s
 	HDA_CODEC_VOLUME("Surround Playback Volume", 0x0a, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x06, 1, 0x0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x06, 2, 0x0, HDA_OUTPUT),
+	{ } /* end */
 };
 
 static struct snd_kcontrol_new ad1988_3stack_mixers2[] = {
@@ -2138,7 +2145,7 @@ static inline hda_nid_t ad1988_idx_to_da
 		/* A     B     C     D     E     F     G     H */
 		0x04, 0x05, 0x0a, 0x04, 0x06, 0x05, 0x0a, 0x06
 	};
-	if (codec->revision_id == AD1988A_REV2)
+	if (is_rev2(codec))
 		return idx_to_dac_rev2[idx];
 	else
 		return idx_to_dac[idx];
@@ -2507,7 +2514,7 @@ static int patch_ad1988(struct hda_codec
 	mutex_init(&spec->amp_mutex);
 	codec->spec = spec;
 
-	if (codec->revision_id == AD1988A_REV2)
+	if (is_rev2(codec))
 		snd_printk(KERN_INFO "patch_analog: AD1988A rev.2 is detected, enable workarounds\n");
 
 	board_config = snd_hda_check_board_config(codec, ad1988_cfg_tbl);
@@ -2533,13 +2540,13 @@ static int patch_ad1988(struct hda_codec
 	case AD1988_6STACK_DIG:
 		spec->multiout.max_channels = 8;
 		spec->multiout.num_dacs = 4;
-		if (codec->revision_id == AD1988A_REV2)
+		if (is_rev2(codec))
 			spec->multiout.dac_nids = ad1988_6stack_dac_nids_rev2;
 		else
 			spec->multiout.dac_nids = ad1988_6stack_dac_nids;
 		spec->input_mux = &ad1988_6stack_capture_source;
 		spec->num_mixers = 2;
-		if (codec->revision_id == AD1988A_REV2)
+		if (is_rev2(codec))
 			spec->mixers[0] = ad1988_6stack_mixers1_rev2;
 		else
 			spec->mixers[0] = ad1988_6stack_mixers1;
@@ -2555,7 +2562,7 @@ static int patch_ad1988(struct hda_codec
 	case AD1988_3STACK_DIG:
 		spec->multiout.max_channels = 6;
 		spec->multiout.num_dacs = 3;
-		if (codec->revision_id == AD1988A_REV2)
+		if (is_rev2(codec))
 			spec->multiout.dac_nids = ad1988_3stack_dac_nids_rev2;
 		else
 			spec->multiout.dac_nids = ad1988_3stack_dac_nids;
@@ -2563,7 +2570,7 @@ static int patch_ad1988(struct hda_codec
 		spec->channel_mode = ad1988_3stack_modes;
 		spec->num_channel_mode = ARRAY_SIZE(ad1988_3stack_modes);
 		spec->num_mixers = 2;
-		if (codec->revision_id == AD1988A_REV2)
+		if (is_rev2(codec))
 			spec->mixers[0] = ad1988_3stack_mixers1_rev2;
 		else
 			spec->mixers[0] = ad1988_3stack_mixers1;
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index f0e9a9c..94cf292 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3827,7 +3827,7 @@ static struct hda_board_config alc260_cf
 	{ .modelname = "hp", .config = ALC260_HP },
 	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
 	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },
-	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP },
+	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP_3013 },
 	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3013, .config = ALC260_HP_3013 },
 	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3014, .config = ALC260_HP },
 	{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3015, .config = ALC260_HP },
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 8c440fb..d862295 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -1262,13 +1262,13 @@ static int vaio_master_sw_put(struct snd
 	int change;
 
 	change = snd_hda_codec_amp_update(codec, 0x02, 0, HDA_OUTPUT, 0,
-					  0x80, valp[0] & 0x80);
+					  0x80, (valp[0] ? 0 : 0x80));
 	change |= snd_hda_codec_amp_update(codec, 0x02, 1, HDA_OUTPUT, 0,
-					   0x80, valp[1] & 0x80);
+					   0x80, (valp[1] ? 0 : 0x80));
 	snd_hda_codec_amp_update(codec, 0x05, 0, HDA_OUTPUT, 0,
-				 0x80, valp[0] & 0x80);
+				 0x80, (valp[0] ? 0 : 0x80));
 	snd_hda_codec_amp_update(codec, 0x05, 1, HDA_OUTPUT, 0,
-				 0x80, valp[1] & 0x80);
+				 0x80, (valp[1] ? 0 : 0x80));
 	return change;
 }
 
diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
index 61f82f0..10586e4 100644
--- a/sound/pci/rme9652/hdsp.c
+++ b/sound/pci/rme9652/hdsp.c
@@ -389,7 +389,7 @@ #define HDSP_DMA_AREA_KILOBYTES (HDSP_DM
 
 /* use hotplug firmeare loader? */
 #if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE)
-#ifndef HDSP_USE_HWDEP_LOADER
+#if !defined(HDSP_USE_HWDEP_LOADER) && !defined(CONFIG_SND_HDSP)
 #define HDSP_FW_LOADER
 #endif
 #endif
@@ -3169,9 +3169,10 @@ snd_hdsp_proc_read(struct snd_info_entry
 	char *clock_source;
 	int x;
 
-	if (hdsp_check_for_iobox (hdsp))
+	if (hdsp_check_for_iobox (hdsp)) {
 		snd_iprintf(buffer, "No I/O box connected.\nPlease connect one and upload firmware.\n");
 		return;
+        }
 
 	if (hdsp_check_for_firmware(hdsp, 0)) {
 		if (hdsp->state & HDSP_FirmwareCached) {

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: Linux 2.6.17.7
  2006-07-25  3:42 Linux 2.6.17.7 Greg KH
  2006-07-25  3:43 ` Greg KH
@ 2006-07-25  9:55 ` Arnaud Patard
  2006-07-25 10:23   ` Andrew de Quincey
  1 sibling, 1 reply; 19+ messages in thread
From: Arnaud Patard @ 2006-07-25  9:55 UTC (permalink / raw)
  To: Greg KH, Andrew de Quincey; +Cc: linux-kernel, stable

Greg KH <gregkh@suse.de> writes:

Hi,

> We (the -stable team) are announcing the release of the 2.6.17.7 kernel.

Sorry, but doesn't compile if DVB_BUDGET_AV is set :(


> Andrew de Quincey:
>       v4l/dvb: Fix budget-av frontend detection
>       v4l/dvb: Fix CI on old KNC1 DVBC cards

This patch is the culprit. With it, the build fails with the errors : 
drivers/media/dvb/ttpci/budget-av.c: In function 'frontend_init':
drivers/media/dvb/ttpci/budget-av.c:1063: error: 'struct budget_av' has no member named 'reinitialise_demod'
drivers/media/dvb/ttpci/budget-av.c:1068: error: request for member tuner_ops' in something not a structure or union
drivers/media/dvb/ttpci/budget-av.c:1068: error: 'philips_cu1216_tuner_set_params' undeclared (first use in this function)
drivers/media/dvb/ttpci/budget-av.c:1068: error: (Each undeclared identifier is reported only once
drivers/media/dvb/ttpci/budget-av.c:1068: error: for each function it appears in.)

The needed changes were introduced post 2.6.17 :
5c1208ba457a1668c81868060c08496a2d053be0
7eef5dd6daecf3ee305116c9cf41ae7166270c4c
e87d41c4952ceef7a9f760f38f9343d015279662

This would be great to see this fixed for the next -stable release :)

Regards,
Arnaud Patard


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Linux 2.6.17.7
  2006-07-25  9:55 ` Arnaud Patard
@ 2006-07-25 10:23   ` Andrew de Quincey
  2006-07-25 16:47     ` automated test? (was Re: Linux 2.6.17.7) David Lang
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew de Quincey @ 2006-07-25 10:23 UTC (permalink / raw)
  To: Arnaud Patard; +Cc: Greg KH, linux-kernel, stable

On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
> Greg KH <gregkh@suse.de> writes:
>
> Hi,
>
> > We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
>
> Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
>
> > Andrew de Quincey:
> >       v4l/dvb: Fix budget-av frontend detection


In fact it is just this patch causing the problem:

> >       v4l/dvb: Fix CI on old KNC1 DVBC cards
>
> This patch is the culprit. With it, the build fails with the errors :
> drivers/media/dvb/ttpci/budget-av.c: In function 'frontend_init':
> drivers/media/dvb/ttpci/budget-av.c:1063: error: 'struct budget_av' has no
> member named 'reinitialise_demod' drivers/media/dvb/ttpci/budget-av.c:1068:
> error: request for member tuner_ops' in something not a structure or union
> drivers/media/dvb/ttpci/budget-av.c:1068: error:
> 'philips_cu1216_tuner_set_params' undeclared (first use in this function)
> drivers/media/dvb/ttpci/budget-av.c:1068: error: (Each undeclared
> identifier is reported only once drivers/media/dvb/ttpci/budget-av.c:1068:
> error: for each function it appears in.)
>
> The needed changes were introduced post 2.6.17 :
> 5c1208ba457a1668c81868060c08496a2d053be0
> 7eef5dd6daecf3ee305116c9cf41ae7166270c4c
> e87d41c4952ceef7a9f760f38f9343d015279662
>
> This would be great to see this fixed for the next -stable release :)

Sorry, I had so much work going on in that area I must have diffed the wrong 
kernel when I created this patch. :(

^ permalink raw reply	[flat|nested] 19+ messages in thread

* automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 10:23   ` Andrew de Quincey
@ 2006-07-25 16:47     ` David Lang
  2006-07-25 16:56       ` Arjan van de Ven
                         ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: David Lang @ 2006-07-25 16:47 UTC (permalink / raw)
  To: Andrew de Quincey; +Cc: Arnaud Patard, Greg KH, linux-kernel, stable

On Tue, 25 Jul 2006, Andrew de Quincey wrote:

> On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
>> Greg KH <gregkh@suse.de> writes:
>>
>> Hi,
>>
>>> We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
>>
>> Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
>>
>>> Andrew de Quincey:
>>>       v4l/dvb: Fix budget-av frontend detection
>
>
> In fact it is just this patch causing the problem:
<SNIP>
> Sorry, I had so much work going on in that area I must have diffed the wrong
> kernel when I created this patch. :(

is it reasonable to have an aotomated test figure out what config options are 
relavent to a patch (or patchset) and test compile all the combinations to catch 
this sort of mistake?

David Lang


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 16:47     ` automated test? (was Re: Linux 2.6.17.7) David Lang
@ 2006-07-25 16:56       ` Arjan van de Ven
  2006-07-25 17:07         ` Michael Krufky
  2006-07-25 21:20         ` Matthias Andree
  2006-07-25 20:10       ` Arnaud Patard
  2006-07-26 13:02       ` Adrian Bunk
  2 siblings, 2 replies; 19+ messages in thread
From: Arjan van de Ven @ 2006-07-25 16:56 UTC (permalink / raw)
  To: David Lang
  Cc: Andrew de Quincey, Arnaud Patard, Greg KH, linux-kernel, stable

On Tue, 2006-07-25 at 09:47 -0700, David Lang wrote:
> On Tue, 25 Jul 2006, Andrew de Quincey wrote:
> 
> > On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
> >> Greg KH <gregkh@suse.de> writes:
> >>
> >> Hi,
> >>
> >>> We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
> >>
> >> Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
> >>
> >>> Andrew de Quincey:
> >>>       v4l/dvb: Fix budget-av frontend detection
> >
> >
> > In fact it is just this patch causing the problem:
> <SNIP>
> > Sorry, I had so much work going on in that area I must have diffed the wrong
> > kernel when I created this patch. :(
> 
> is it reasonable to have an aotomated test figure out what config options are 
> relavent to a patch (or patchset) and test compile all the combinations to catch 
> this sort of mistake?

well you can do such a thing withing statistical bounds; however... if
the patch already is in -git (as is -stable policy normally).. it should
have been found there already...


-- 
if you want to mail me at work (you don't), use arjan (at) linux.intel.com


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 16:56       ` Arjan van de Ven
@ 2006-07-25 17:07         ` Michael Krufky
  2006-07-25 18:42           ` Jean Delvare
  2006-07-25 21:20         ` Matthias Andree
  1 sibling, 1 reply; 19+ messages in thread
From: Michael Krufky @ 2006-07-25 17:07 UTC (permalink / raw)
  To: Arjan van de Ven
  Cc: David Lang, Andrew de Quincey, Arnaud Patard, Greg KH,
	linux-kernel, stable

Arjan van de Ven wrote:
> On Tue, 2006-07-25 at 09:47 -0700, David Lang wrote:
>> On Tue, 25 Jul 2006, Andrew de Quincey wrote:
>>
>>> On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
>>>> Greg KH <gregkh@suse.de> writes:
>>>>
>>>> Hi,
>>>>
>>>>> We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
>>>> Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
>>>>
>>>>> Andrew de Quincey:
>>>>>       v4l/dvb: Fix budget-av frontend detection
>>>
>>> In fact it is just this patch causing the problem:
>> <SNIP>
>>> Sorry, I had so much work going on in that area I must have diffed the wrong
>>> kernel when I created this patch. :(
>> is it reasonable to have an aotomated test figure out what config options are 
>> relavent to a patch (or patchset) and test compile all the combinations to catch 
>> this sort of mistake?
> 
> well you can do such a thing withing statistical bounds; however... if
> the patch already is in -git (as is -stable policy normally).. it should
> have been found there already...
> 
> 
In this case it isn't quite that simple...

The DVB tree is in the midst of tuner refactoring, and somehow the diff
was generated against the wrong tree.

The fix can be found here... We'll need this queued up for 2.6.17.8 ...
 I have already attached this inline in a prior email, not sure how many
people have seen that yet...

You can also get it from here:

http://linuxtv.org/~mkrufky/stable/2.6.17.y/budget-av-compile-fix.patch

---

[PATCH 2.6.17.7] Fix budget-av compile failure

From: Andrew de Quincey <adq_dvb@lidskialf.net>

Currently I am doing lots of refactoring work in the dvb tree. This
bugfix became necessary to fix 2.6.17 whilst I was in the middle of this
work. Unfortunately after I tested the original code for the patch, I
generated the diff against the wrong tree (I accidentally used a tree
with part of the refactoring code in it). This resulted in the reported
compile errors because that tree (a) was incomplete, and (b) used
features which are simply not in the mainline kernel yet.

Many apologies for the error and problems this has caused. :(

Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>

diff -Naur linux-2.6.17.7.orig/drivers/media/dvb/ttpci/budget-av.c
linux-2.6.17.7/drivers/media/dvb/ttpci/budget-av.c
--- linux-2.6.17.7.orig/drivers/media/dvb/ttpci/budget-av.c 2006-07-25
14:53:19.000000000 +0100
+++ linux-2.6.17.7/drivers/media/dvb/ttpci/budget-av.c 2006-07-25
15:25:32.000000000 +0100
@@ -58,6 +58,7 @@
 	struct tasklet_struct ciintf_irq_tasklet;
 	int slot_status;
 	struct dvb_ca_en50221 ca;
+	u8 reinitialise_demod:1;
 };

 /* GPIO Connections:
@@ -214,8 +215,9 @@
 	while (--timeout > 0 && ciintf_read_attribute_mem(ca, slot, 0) != 0x1d)
 		msleep(100);

-	/* reinitialise the frontend */
-	dvb_frontend_reinitialise(budget_av->budget.dvb_frontend);
+	/* reinitialise the frontend if necessary */
+	if (budget_av->reinitialise_demod)
+		dvb_frontend_reinitialise(budget_av->budget.dvb_frontend);

 	if (timeout <= 0)
 	{
@@ -1064,12 +1066,10 @@
 		fe = tda10021_attach(&philips_cu1216_config,
 				     &budget_av->budget.i2c_adap,
 				     read_pwm(budget_av));
-		if (fe) {
-			fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set_params;
-		}
 		break;

 	case SUBID_DVBC_KNC1_PLUS:
+		budget_av->reinitialise_demod = 1;
 		fe = tda10021_attach(&philips_cu1216_config,
 				     &budget_av->budget.i2c_adap,
 				     read_pwm(budget_av));



-- 
Michael Krufky


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 17:07         ` Michael Krufky
@ 2006-07-25 18:42           ` Jean Delvare
  2006-07-25 19:26             ` Andrew de Quincey
  0 siblings, 1 reply; 19+ messages in thread
From: Jean Delvare @ 2006-07-25 18:42 UTC (permalink / raw)
  To: Michael Krufky
  Cc: David Lang, Andrew de Quincey, Arnaud Patard, Greg KH,
	linux-kernel, stable, Arjan van de Ven

Hi Michael,

> The fix can be found here... We'll need this queued up for 2.6.17.8 ...
>  I have already attached this inline in a prior email, not sure how many
> people have seen that yet...
> 
> You can also get it from here:
> 
> http://linuxtv.org/~mkrufky/stable/2.6.17.y/budget-av-compile-fix.patch

Yes, it fixed the compilation cleanly for me (on both i386 and x86_64).
I can't test beyond that though, as I don't have that specific hardware.

Thanks,
-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 18:42           ` Jean Delvare
@ 2006-07-25 19:26             ` Andrew de Quincey
  0 siblings, 0 replies; 19+ messages in thread
From: Andrew de Quincey @ 2006-07-25 19:26 UTC (permalink / raw)
  To: Jean Delvare
  Cc: Michael Krufky, David Lang, Arnaud Patard, Greg KH, linux-kernel,
	stable, Arjan van de Ven

On Tuesday 25 July 2006 19:42, Jean Delvare wrote:
> Hi Michael,
>
> > The fix can be found here... We'll need this queued up for 2.6.17.8 ...
> >  I have already attached this inline in a prior email, not sure how many
> > people have seen that yet...
> >
> > You can also get it from here:
> >
> > http://linuxtv.org/~mkrufky/stable/2.6.17.y/budget-av-compile-fix.patch
>
> Yes, it fixed the compilation cleanly for me (on both i386 and x86_64).
> I can't test beyond that though, as I don't have that specific hardware.

Great thanks for testing!

As for not having specific hardware for testing, I have the same problem. Its 
a continuing problem with DVB and the source of many regressions :(

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 16:47     ` automated test? (was Re: Linux 2.6.17.7) David Lang
  2006-07-25 16:56       ` Arjan van de Ven
@ 2006-07-25 20:10       ` Arnaud Patard
  2006-07-26 13:02       ` Adrian Bunk
  2 siblings, 0 replies; 19+ messages in thread
From: Arnaud Patard @ 2006-07-25 20:10 UTC (permalink / raw)
  To: David Lang; +Cc: Andrew de Quincey, Greg KH, linux-kernel, stable

David Lang <dlang@digitalinsight.com> writes:

> On Tue, 25 Jul 2006, Andrew de Quincey wrote:
>
>> On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
>>> Greg KH <gregkh@suse.de> writes:
>>>
>>> Hi,
>>>
>>>> We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
>>>
>>> Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
>>>
>>>> Andrew de Quincey:
>>>>       v4l/dvb: Fix budget-av frontend detection
>>
>>
>> In fact it is just this patch causing the problem:
> <SNIP>
>> Sorry, I had so much work going on in that area I must have diffed the wrong
>> kernel when I created this patch. :(
>
> is it reasonable to have an aotomated test figure out what config options are 
> relavent to a patch (or patchset) and test compile all the combinations to catch 
> this sort of mistake?

you'll probably need to find some heuristics which may be quite hard to
do. It would be easier imho to use some scripts like this one :
http://developer.osdl.org/~cherry/compile/ 

It's often enough to catch compile failures


Arnaud Patard

>
> David Lang


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 16:56       ` Arjan van de Ven
  2006-07-25 17:07         ` Michael Krufky
@ 2006-07-25 21:20         ` Matthias Andree
  2006-07-25 21:28           ` David Lang
  1 sibling, 1 reply; 19+ messages in thread
From: Matthias Andree @ 2006-07-25 21:20 UTC (permalink / raw)
  To: Arjan van de Ven
  Cc: David Lang, Andrew de Quincey, Arnaud Patard, Greg KH,
	linux-kernel, stable

On Tue, 25 Jul 2006, Arjan van de Ven wrote:

> well you can do such a thing withing statistical bounds; however... if
> the patch already is in -git (as is -stable policy normally).. it should
> have been found there already...

The sad facts I learned from Debian bug #212762 (not kernel related) that
culminated in CVE-2005-2335 (remote root exploit against older
fetchmail) and from various qmail bugs Guninski discovered:

- a bug need not necessarily be found soon after introduction

- a bug report may not convey the hint "look at this NOW, the shit
  already hit the fan"
  (sorry, I meant to write: look NOW, it's urgent and important)

- an automated test to catch non-trivial mistakes is non-trivial in
  itself, and - what I've seen with another project I was involved with,
  and more often than I found amusing - is that the test itself can be
  buggy causing bogus results.

That doesn't mean I object to automated tests, but "it should have been
found by now" (because the source is open, someone could have tested it,
whatever) just doesn't work.

-- 
Matthias Andree

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 21:20         ` Matthias Andree
@ 2006-07-25 21:28           ` David Lang
  0 siblings, 0 replies; 19+ messages in thread
From: David Lang @ 2006-07-25 21:28 UTC (permalink / raw)
  To: Matthias Andree
  Cc: Arjan van de Ven, Andrew de Quincey, Arnaud Patard, Greg KH,
	linux-kernel, stable

On Tue, 25 Jul 2006, Matthias Andree wrote:

> On Tue, 25 Jul 2006, Arjan van de Ven wrote:
>
>> well you can do such a thing withing statistical bounds; however... if
>> the patch already is in -git (as is -stable policy normally).. it should
>> have been found there already...
>
> The sad facts I learned from Debian bug #212762 (not kernel related) that
> culminated in CVE-2005-2335 (remote root exploit against older
> fetchmail) and from various qmail bugs Guninski discovered:
>
> - a bug need not necessarily be found soon after introduction
>
> - a bug report may not convey the hint "look at this NOW, the shit
>  already hit the fan"
>  (sorry, I meant to write: look NOW, it's urgent and important)
>
> - an automated test to catch non-trivial mistakes is non-trivial in
>  itself, and - what I've seen with another project I was involved with,
>  and more often than I found amusing - is that the test itself can be
>  buggy causing bogus results.
>
> That doesn't mean I object to automated tests, but "it should have been
> found by now" (because the source is open, someone could have tested it,
> whatever) just doesn't work.

what I was intending with my origional question was a series of simple 'does it 
compile' tests that try all the config options that are affected by the patchset 
in question. the purpose being to catch simple errors like the one here where 
the patch was diffed against the wrong tree and the result doesn't compile

i.e. if the change is the the e1000 driver, try compiling a kernel with it on, 
off, and as a module

obviously such a test can't be done on the huge -rc patches (they would approach 
an exhaustive test of all config permutations), but for -stable patches (or 
better still the indivdual patches that form a -stable release)

so the first part of the question boils down to

1. Given a patch that modifies file X is it possible to know what config options 
could be affected?

and the second part would be

2. would it make sense for the LTP or one of the big compile farms to do a 
series of compiles prior to the release of a -stable kernel to catch mistakes 
like this?

David Lang

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-25 16:47     ` automated test? (was Re: Linux 2.6.17.7) David Lang
  2006-07-25 16:56       ` Arjan van de Ven
  2006-07-25 20:10       ` Arnaud Patard
@ 2006-07-26 13:02       ` Adrian Bunk
  2006-07-26 14:10         ` Andrew de Quincey
  2 siblings, 1 reply; 19+ messages in thread
From: Adrian Bunk @ 2006-07-26 13:02 UTC (permalink / raw)
  To: David Lang
  Cc: Andrew de Quincey, Arnaud Patard, Greg KH, linux-kernel, stable

On Tue, Jul 25, 2006 at 09:47:43AM -0700, David Lang wrote:
> On Tue, 25 Jul 2006, Andrew de Quincey wrote:
> 
> >On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
> >>Greg KH <gregkh@suse.de> writes:
> >>
> >>Hi,
> >>
> >>>We (the -stable team) are announcing the release of the 2.6.17.7 kernel.
> >>
> >>Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
> >>
> >>>Andrew de Quincey:
> >>>      v4l/dvb: Fix budget-av frontend detection
> >
> >
> >In fact it is just this patch causing the problem:
> <SNIP>
> >Sorry, I had so much work going on in that area I must have diffed the 
> >wrong
> >kernel when I created this patch. :(
> 
> is it reasonable to have an aotomated test figure out what config options 
> are relavent to a patch (or patchset) and test compile all the combinations 
> to catch this sort of mistake?

If you think about it, you'll notice it's definitely not reasonable:

#include <linux/module.h> brings you a dependency on 5 config options.
#include <linux/pci.h> brings you a dependency on 6 config options.

By only including these two headers you are at 2048 combinations.
The number of valid configurations will be lower, but 500 test compiles 
sound realistically.

With have a dozen #include's you might need more than a million test 
compiles.

With a dozen #include's, you might need a trilion [1] test compiles.


Compile errors are quickly catched and don't cause any serious problem.

What bothers me more is that noone tested this patch against the kernel 
it was applied against.

The submitter didn't test it works (he didn't even test the compilation).

No user tested it.

Currently, -stable kernels get an 48 hours review on linux-kernel but 
zero testing.

How could this be improved?
Longer review/testing time?
Offer them as also one 2.6.17.7-rc1 patch?

> David Lang

cu
Adrian

[1] American English

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 13:02       ` Adrian Bunk
@ 2006-07-26 14:10         ` Andrew de Quincey
  2006-07-26 14:29           ` Adrian Bunk
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew de Quincey @ 2006-07-26 14:10 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: David Lang, Arnaud Patard, Greg KH, linux-kernel, stable

On Wednesday 26 July 2006 14:02, Adrian Bunk wrote:
> On Tue, Jul 25, 2006 at 09:47:43AM -0700, David Lang wrote:
> > On Tue, 25 Jul 2006, Andrew de Quincey wrote:
> > >On Tuesday 25 July 2006 10:55, Arnaud Patard wrote:
> > >>Greg KH <gregkh@suse.de> writes:
> > >>
> > >>Hi,
> > >>
> > >>>We (the -stable team) are announcing the release of the 2.6.17.7
> > >>> kernel.
> > >>
> > >>Sorry, but doesn't compile if DVB_BUDGET_AV is set :(
> > >>
> > >>>Andrew de Quincey:
> > >>>      v4l/dvb: Fix budget-av frontend detection
> > >
> > >In fact it is just this patch causing the problem:
> >
> > <SNIP>
> >
> > >Sorry, I had so much work going on in that area I must have diffed the
> > >wrong
> > >kernel when I created this patch. :(
> >
> > is it reasonable to have an aotomated test figure out what config options
> > are relavent to a patch (or patchset) and test compile all the
> > combinations to catch this sort of mistake?
>
> If you think about it, you'll notice it's definitely not reasonable:
>
> #include <linux/module.h> brings you a dependency on 5 config options.
> #include <linux/pci.h> brings you a dependency on 6 config options.
>
> By only including these two headers you are at 2048 combinations.
> The number of valid configurations will be lower, but 500 test compiles
> sound realistically.
>
> With have a dozen #include's you might need more than a million test
> compiles.
>
> With a dozen #include's, you might need a trilion [1] test compiles.
>
>
> Compile errors are quickly catched and don't cause any serious problem.
>
> What bothers me more is that noone tested this patch against the kernel
> it was applied against.
>
> The submitter didn't test it works (he didn't even test the compilation).

Yes I did - I didn't test the final generated patch unfortunately since I 
assumed it worked. The kernel I _meant_ to diff against worked perfectly :(

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 14:10         ` Andrew de Quincey
@ 2006-07-26 14:29           ` Adrian Bunk
  2006-07-26 14:39             ` Andrew de Quincey
  0 siblings, 1 reply; 19+ messages in thread
From: Adrian Bunk @ 2006-07-26 14:29 UTC (permalink / raw)
  To: Andrew de Quincey
  Cc: David Lang, Arnaud Patard, Greg KH, linux-kernel, stable

On Wed, Jul 26, 2006 at 03:10:02PM +0100, Andrew de Quincey wrote:
> On Wednesday 26 July 2006 14:02, Adrian Bunk wrote:
>...
> > What bothers me more is that noone tested this patch against the kernel
> > it was applied against.
> >
> > The submitter didn't test it works (he didn't even test the compilation).
> 
> Yes I did - I didn't test the final generated patch unfortunately since I 
> assumed it worked. The kernel I _meant_ to diff against worked perfectly :(

Sorry if this was wrong, it wasn't meant against you personally.

Things do go wrong. That's life.
And you aren't the first person who sent a patch that broke the 
compilation of the next -stable kernel.

The real problem is:
How do we get some testing coverage of -stable kernels by users to catch 
issues?
And compile errors are the least of my worries.

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 14:29           ` Adrian Bunk
@ 2006-07-26 14:39             ` Andrew de Quincey
  2006-07-26 15:00               ` Adrian Bunk
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew de Quincey @ 2006-07-26 14:39 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: David Lang, Arnaud Patard, Greg KH, linux-kernel, stable

On Wednesday 26 July 2006 15:29, Adrian Bunk wrote:
> On Wed, Jul 26, 2006 at 03:10:02PM +0100, Andrew de Quincey wrote:
> > On Wednesday 26 July 2006 14:02, Adrian Bunk wrote:
> >...
> >
> > > What bothers me more is that noone tested this patch against the kernel
> > > it was applied against.
> > >
> > > The submitter didn't test it works (he didn't even test the
> > > compilation).
> >
> > Yes I did - I didn't test the final generated patch unfortunately since I
> > assumed it worked. The kernel I _meant_ to diff against worked perfectly
> > :(
>
> Sorry if this was wrong, it wasn't meant against you personally.
>
> Things do go wrong. That's life.
> And you aren't the first person who sent a patch that broke the
> compilation of the next -stable kernel.

thanks. I feel a little bit better :)

> The real problem is:
> How do we get some testing coverage of -stable kernels by users to catch
> issues?
> And compile errors are the least of my worries.

Yeah - I believe some people did test the DVB -stable patches, but obviously 
without the budget-av driver compile option enabled, so it didn't compile 
that code. DVB supports quite a few cards, so its easy to accidentally leave 
off one of the options when doing a mass compile of all drivers.

The only thing I can think of would be to require -stable patch submitters to 
supply a list of CONFIG options that must be on to enable compilation of the 
new code so people know exactly how to enable it for testing... but obviously 
since those would be manually specified, they can be wrong too. But at least 
it would show they'd thought about it a bit....

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 14:39             ` Andrew de Quincey
@ 2006-07-26 15:00               ` Adrian Bunk
  2006-07-26 15:07                 ` Andrew de Quincey
  2006-07-26 17:11                 ` David Lang
  0 siblings, 2 replies; 19+ messages in thread
From: Adrian Bunk @ 2006-07-26 15:00 UTC (permalink / raw)
  To: Andrew de Quincey
  Cc: David Lang, Arnaud Patard, Greg KH, linux-kernel, stable

On Wed, Jul 26, 2006 at 03:39:49PM +0100, Andrew de Quincey wrote:
> On Wednesday 26 July 2006 15:29, Adrian Bunk wrote:
>...
> > The real problem is:
> > How do we get some testing coverage of -stable kernels by users to catch
> > issues?
> > And compile errors are the least of my worries.
> 
> Yeah - I believe some people did test the DVB -stable patches, but obviously 
> without the budget-av driver compile option enabled, so it didn't compile 
> that code. DVB supports quite a few cards, so its easy to accidentally leave 
> off one of the options when doing a mass compile of all drivers.
> 
> The only thing I can think of would be to require -stable patch submitters to 
> supply a list of CONFIG options that must be on to enable compilation of the 
> new code so people know exactly how to enable it for testing... but obviously 
> since those would be manually specified, they can be wrong too. But at least 
> it would show they'd thought about it a bit....

This helps only with compilation errors, which are as I said the least 
of my worries.

But does the hardware driven by this driver work?
And if it does, is there a bug in the patch that causes the kernel to 
crash after some hours?

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 15:00               ` Adrian Bunk
@ 2006-07-26 15:07                 ` Andrew de Quincey
  2006-07-26 17:11                 ` David Lang
  1 sibling, 0 replies; 19+ messages in thread
From: Andrew de Quincey @ 2006-07-26 15:07 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: David Lang, Arnaud Patard, Greg KH, linux-kernel, stable

On Wednesday 26 July 2006 16:00, Adrian Bunk wrote:
> On Wed, Jul 26, 2006 at 03:39:49PM +0100, Andrew de Quincey wrote:
> > On Wednesday 26 July 2006 15:29, Adrian Bunk wrote:
> >...
> >
> > > The real problem is:
> > > How do we get some testing coverage of -stable kernels by users to
> > > catch issues?
> > > And compile errors are the least of my worries.
> >
> > Yeah - I believe some people did test the DVB -stable patches, but
> > obviously without the budget-av driver compile option enabled, so it
> > didn't compile that code. DVB supports quite a few cards, so its easy to
> > accidentally leave off one of the options when doing a mass compile of
> > all drivers.
> >
> > The only thing I can think of would be to require -stable patch
> > submitters to supply a list of CONFIG options that must be on to enable
> > compilation of the new code so people know exactly how to enable it for
> > testing... but obviously since those would be manually specified, they
> > can be wrong too. But at least it would show they'd thought about it a
> > bit....
>
> This helps only with compilation errors, which are as I said the least
> of my worries.
>
> But does the hardware driven by this driver work?
> And if it does, is there a bug in the patch that causes the kernel to
> crash after some hours?

That is a major problem with DVB development; no developer has all the 
hardware (in fact there is lots of hardware no developer has regular access 
to). Non-developers do test stuff in our HG repository, but again, the test 
coverage is very quite, since only some people do this, and most 
non-developers have only a few pieces of hardware. 

Many people wait till it comes out in the vanilla kernel... which is why there 
were so many bugfixes from me in 2.6.17.7, as it was the first real test of 
several new features/card supports.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: automated test? (was Re: Linux 2.6.17.7)
  2006-07-26 15:00               ` Adrian Bunk
  2006-07-26 15:07                 ` Andrew de Quincey
@ 2006-07-26 17:11                 ` David Lang
  1 sibling, 0 replies; 19+ messages in thread
From: David Lang @ 2006-07-26 17:11 UTC (permalink / raw)
  To: Adrian Bunk
  Cc: Andrew de Quincey, Arnaud Patard, Greg KH, linux-kernel, stable

On Wed, 26 Jul 2006, Adrian Bunk wrote:

> On Wed, Jul 26, 2006 at 03:39:49PM +0100, Andrew de Quincey wrote:
>> On Wednesday 26 July 2006 15:29, Adrian Bunk wrote:
>> ...
>>> The real problem is:
>>> How do we get some testing coverage of -stable kernels by users to catch
>>> issues?
>>> And compile errors are the least of my worries.
>>
>> Yeah - I believe some people did test the DVB -stable patches, but obviously
>> without the budget-av driver compile option enabled, so it didn't compile
>> that code. DVB supports quite a few cards, so its easy to accidentally leave
>> off one of the options when doing a mass compile of all drivers.
>>
>> The only thing I can think of would be to require -stable patch submitters to
>> supply a list of CONFIG options that must be on to enable compilation of the
>> new code so people know exactly how to enable it for testing... but obviously
>> since those would be manually specified, they can be wrong too. But at least
>> it would show they'd thought about it a bit....
>
> This helps only with compilation errors, which are as I said the least
> of my worries.

however, this can be automaticly tested (or at least the config options 
specified can be tested)

> But does the hardware driven by this driver work?
> And if it does, is there a bug in the patch that causes the kernel to
> crash after some hours?

this cannot be tested by anyone who doesn't use the driver in question, and 
frequently that includes the programmer who makes the changes.

there's no way to protect against a logic error in a driver, however it is 
possible to put a safety net in place to catch compile problems due to mistakes.

should such a net be put into place? (along with asking submitters what compile 
options are relavent to their code), or is this a mistake that is rare enough to 
just live with it when it happens?

David Lang

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2006-07-26 17:17 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-07-25  3:42 Linux 2.6.17.7 Greg KH
2006-07-25  3:43 ` Greg KH
2006-07-25  9:55 ` Arnaud Patard
2006-07-25 10:23   ` Andrew de Quincey
2006-07-25 16:47     ` automated test? (was Re: Linux 2.6.17.7) David Lang
2006-07-25 16:56       ` Arjan van de Ven
2006-07-25 17:07         ` Michael Krufky
2006-07-25 18:42           ` Jean Delvare
2006-07-25 19:26             ` Andrew de Quincey
2006-07-25 21:20         ` Matthias Andree
2006-07-25 21:28           ` David Lang
2006-07-25 20:10       ` Arnaud Patard
2006-07-26 13:02       ` Adrian Bunk
2006-07-26 14:10         ` Andrew de Quincey
2006-07-26 14:29           ` Adrian Bunk
2006-07-26 14:39             ` Andrew de Quincey
2006-07-26 15:00               ` Adrian Bunk
2006-07-26 15:07                 ` Andrew de Quincey
2006-07-26 17:11                 ` David Lang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).