## Automatically generated incremental diff
## From:   linux-2.4.22-bk43
## To:     linux-2.4.22-bk44
## Robot:  $Id: make-incremental-diff,v 1.11 2002/02/20 02:59:33 hpa Exp $

diff -urN linux-2.4.22-bk43/MAINTAINERS linux-2.4.22-bk44/MAINTAINERS
--- linux-2.4.22-bk43/MAINTAINERS	2003-10-30 02:50:55.000000000 -0800
+++ linux-2.4.22-bk44/MAINTAINERS	2003-10-30 02:51:04.000000000 -0800
@@ -1237,7 +1237,7 @@
 L:	linux-scsi@vger.kernel.org
 S:	Maintained
 
-NETFILTER/IPTABLES
+NETFILTER/IPTABLES/IPCHAINS
 P:	Rusty Russell
 P:	Marc Boucher
 P:	James Morris
diff -urN linux-2.4.22-bk43/Makefile linux-2.4.22-bk44/Makefile
--- linux-2.4.22-bk43/Makefile	2003-10-30 02:50:55.000000000 -0800
+++ linux-2.4.22-bk44/Makefile	2003-10-30 02:51:04.000000000 -0800
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 22
-EXTRAVERSION = -bk43
+EXTRAVERSION = -bk44
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.22-bk43/arch/x86_64/kernel/acpi.c linux-2.4.22-bk44/arch/x86_64/kernel/acpi.c
--- linux-2.4.22-bk43/arch/x86_64/kernel/acpi.c	2003-10-30 02:50:57.000000000 -0800
+++ linux-2.4.22-bk44/arch/x86_64/kernel/acpi.c	2003-10-30 02:51:04.000000000 -0800
@@ -292,6 +292,33 @@
 	return 0;
 } 
 
+#ifdef CONFIG_ACPI_BUS
+/*
+ * Set specified PIC IRQ to level triggered mode.
+ *
+ * Port 0x4d0-4d1 are ECLR1 and ECLR2, the Edge/Level Control Registers
+ * for the 8259 PIC.  bit[n] = 1 means irq[n] is Level, otherwise Edge.
+ * ECLR1 is IRQ's 0-7 (IRQ 0, 1, 2 must be 0)
+ * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0)
+ *
+ * As the BIOS should have done this for us,
+ * print a warning if the IRQ wasn't already set to level.
+ */
+
+void acpi_pic_set_level_irq(unsigned int irq)
+{
+	unsigned char mask = 1 << (irq & 7);
+	unsigned int port = 0x4d0 + (irq >> 3);
+	unsigned char val = inb(port);
+
+	if (!(val & mask)) {
+		printk(KERN_WARNING PREFIX "IRQ %d was Edge Triggered, "
+			"setting to Level Triggerd\n", irq);
+		outb(val | mask, port);
+	}
+}
+#endif /* CONFIG_ACPI_BUS */
+
 static unsigned long __init
 acpi_scan_rsdp (
 	unsigned long		start,
@@ -441,7 +468,7 @@
 		printk(KERN_INFO PREFIX "Skipping IOAPIC probe "
 			"due to 'noapic' option.\n");
 		return 1;
-        }
+	}
 
 	/* 
 	 * I/O APIC 
diff -urN linux-2.4.22-bk43/drivers/acpi/dispatcher/dsopcode.c linux-2.4.22-bk44/drivers/acpi/dispatcher/dsopcode.c
--- linux-2.4.22-bk43/drivers/acpi/dispatcher/dsopcode.c	2003-10-30 02:50:57.000000000 -0800
+++ linux-2.4.22-bk44/drivers/acpi/dispatcher/dsopcode.c	2003-10-30 02:51:04.000000000 -0800
@@ -514,16 +514,14 @@
 		goto cleanup;
 	}
 
+
 	/* Entire field must fit within the current length of the buffer */
 
 	if ((bit_offset + bit_count) >
 		(8 * (u32) buffer_desc->buffer.length)) {
 		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-			"Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)\n",
-			((struct acpi_namespace_node *) result_desc)->name.ascii,
-			 bit_offset + bit_count,
-			 buffer_desc->buffer.node->name.ascii,
-			 8 * (u32) buffer_desc->buffer.length));
+			"Field size %d exceeds Buffer size %d (bits)\n",
+			 bit_offset + bit_count, 8 * (u32) buffer_desc->buffer.length));
 		status = AE_AML_BUFFER_LIMIT;
 		goto cleanup;
 	}
diff -urN linux-2.4.22-bk43/drivers/acpi/ec.c linux-2.4.22-bk44/drivers/acpi/ec.c
--- linux-2.4.22-bk43/drivers/acpi/ec.c	2003-10-30 02:50:57.000000000 -0800
+++ linux-2.4.22-bk44/drivers/acpi/ec.c	2003-10-30 02:51:04.000000000 -0800
@@ -90,13 +90,6 @@
 /* External interfaces use first EC only, so remember */
 static struct acpi_device *first_ec;
 
-/*
- * We use kernel thread to handle ec's gpe query, so the query may defer.
- * The query need a context, which can be freed when we replace ec_ecdt
- * with EC device. So defered query may have a wrong context.
- * We use an indication to avoid it
- */
-static int ec_device_init = 0;
 /* --------------------------------------------------------------------------
                              Transaction Management
    -------------------------------------------------------------------------- */
@@ -396,11 +389,8 @@
 
 	acpi_disable_gpe(NULL, ec->gpe_bit, ACPI_ISR);
 
-	if (!ec_device_init)
-		acpi_ec_gpe_query(ec); /* directly query when device didn't init */
-	else
-		status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
-			acpi_ec_gpe_query, ec);
+	status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
+		acpi_ec_gpe_query, ec);
 }
 
 /* --------------------------------------------------------------------------
@@ -595,8 +585,6 @@
 	   we now have the *real* EC info, so kill the makeshift one.*/
 	acpi_evaluate_integer(ec->handle, "_UID", NULL, &uid);
 	if (ec_ecdt && ec_ecdt->uid == uid) {
-		acpi_disable_gpe(NULL, ec_ecdt->gpe_bit, ACPI_NOT_ISR);
-		ec_device_init = 1;
 		acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
 			ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
 	
diff -urN linux-2.4.22-bk43/drivers/net/3c527.c linux-2.4.22-bk44/drivers/net/3c527.c
--- linux-2.4.22-bk43/drivers/net/3c527.c	2003-10-30 02:50:58.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/3c527.c	2003-10-30 02:51:15.000000000 -0800
@@ -111,6 +111,8 @@
 
 #include "3c527.h"
 
+MODULE_LICENSE("GPL");
+
 /*
  * The name of the card. Is used for messages and in the requests for
  * io regions, irqs and dma channels
diff -urN linux-2.4.22-bk43/drivers/net/8139too.c linux-2.4.22-bk44/drivers/net/8139too.c
--- linux-2.4.22-bk43/drivers/net/8139too.c	2003-10-30 02:50:58.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/8139too.c	2003-10-30 02:51:16.000000000 -0800
@@ -244,6 +244,7 @@
 	{0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+	{0x1259, 0xa11e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x14ea, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x14ea, 0xab07, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x11db, 0x1234, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
diff -urN linux-2.4.22-bk43/drivers/net/bonding/bond_main.c linux-2.4.22-bk44/drivers/net/bonding/bond_main.c
--- linux-2.4.22-bk43/drivers/net/bonding/bond_main.c	2003-10-30 02:50:58.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/bonding/bond_main.c	2003-10-30 02:51:17.000000000 -0800
@@ -3048,6 +3048,10 @@
 		case SIOCBONDRELEASE:	
 			ret = bond_release(master_dev, slave_dev); 
 			break;
+		case BOND_SETHWADDR_OLD:
+		case SIOCBONDSETHWADDR:
+			ret = bond_sethwaddr(master_dev, slave_dev);
+			break;
 		case BOND_CHANGE_ACTIVE_OLD:
 		case SIOCBONDCHANGEACTIVE:
 			if (USES_PRIMARY(bond_mode)) {
diff -urN linux-2.4.22-bk43/drivers/net/pcmcia/fmvj18x_cs.c linux-2.4.22-bk44/drivers/net/pcmcia/fmvj18x_cs.c
--- linux-2.4.22-bk43/drivers/net/pcmcia/fmvj18x_cs.c	2003-10-30 02:50:58.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/pcmcia/fmvj18x_cs.c	2003-10-30 02:51:19.000000000 -0800
@@ -536,6 +536,8 @@
     }
 
     if (link->io.NumPorts2 != 0) {
+    	link->irq.Attributes =
+		IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED|IRQ_HANDLE_PRESENT;
 	ret = mfc_try_io_port(link);
 	if (ret != CS_SUCCESS) goto cs_failed;
     } else if (cardtype == UNGERMANN) {
diff -urN linux-2.4.22-bk43/drivers/net/r8169.c linux-2.4.22-bk44/drivers/net/r8169.c
--- linux-2.4.22-bk43/drivers/net/r8169.c	2003-08-25 04:44:42.000000000 -0700
+++ linux-2.4.22-bk44/drivers/net/r8169.c	2003-10-30 02:51:20.000000000 -0800
@@ -292,6 +292,7 @@
 MODULE_AUTHOR("Realtek");
 MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
 MODULE_PARM(media, "1-" __MODULE_STRING(MAX_UNITS) "i");
+MODULE_LICENSE("GPL");
 
 static int rtl8169_open(struct net_device *dev);
 static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev);
diff -urN linux-2.4.22-bk43/drivers/net/sis900.c linux-2.4.22-bk44/drivers/net/sis900.c
--- linux-2.4.22-bk43/drivers/net/sis900.c	2003-10-30 02:50:58.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/sis900.c	2003-10-30 02:51:21.000000000 -0800
@@ -1439,7 +1439,7 @@
 			pci_unmap_single(sis_priv->pci_dev, 
 				sis_priv->tx_ring[i].bufptr, skb->len,
 				PCI_DMA_TODEVICE);
-			dev_kfree_skb(skb);
+			dev_kfree_skb_irq(skb);
 			sis_priv->tx_skbuff[i] = 0;
 			sis_priv->tx_ring[i].cmdsts = 0;
 			sis_priv->tx_ring[i].bufptr = 0;
diff -urN linux-2.4.22-bk43/drivers/net/starfire.c linux-2.4.22-bk44/drivers/net/starfire.c
--- linux-2.4.22-bk43/drivers/net/starfire.c	2003-06-13 07:51:35.000000000 -0700
+++ linux-2.4.22-bk44/drivers/net/starfire.c	2003-10-30 02:51:24.000000000 -0800
@@ -130,6 +130,7 @@
 #include <linux/config.h>
 #include <linux/version.h>
 #include <linux/module.h>
+#include <asm/io.h>
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/netdevice.h>
@@ -1121,15 +1122,9 @@
 	       TX_DESC_SPACING | TX_DESC_TYPE,
 	       ioaddr + TxDescCtrl);
 
-#if defined(ADDR_64BITS)
-	writel(np->queue_mem_dma >> 32, ioaddr + RxDescQHiAddr);
-	writel(np->queue_mem_dma >> 32, ioaddr + TxRingHiAddr);
-	writel(np->queue_mem_dma >> 32, ioaddr + CompletionHiAddr);
-#else
-	writel(0, ioaddr + RxDescQHiAddr);
-	writel(0, ioaddr + TxRingHiAddr);
-	writel(0, ioaddr + CompletionHiAddr);
-#endif
+	writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + RxDescQHiAddr);
+	writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + TxRingHiAddr);
+	writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + CompletionHiAddr);
 	writel(np->rx_ring_dma, ioaddr + RxDescQAddr);
 	writel(np->tx_ring_dma, ioaddr + TxRingPtr);
 
diff -urN linux-2.4.22-bk43/drivers/net/wireless/airo.c linux-2.4.22-bk44/drivers/net/wireless/airo.c
--- linux-2.4.22-bk43/drivers/net/wireless/airo.c	2003-10-30 02:50:59.000000000 -0800
+++ linux-2.4.22-bk44/drivers/net/wireless/airo.c	2003-10-30 02:51:27.000000000 -0800
@@ -989,6 +989,7 @@
 static int airo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 #ifdef WIRELESS_EXT
 struct iw_statistics *airo_get_wireless_stats (struct net_device *dev);
+static void airo_read_wireless_stats (struct airo_info *local);
 #endif /* WIRELESS_EXT */
 #ifdef CISCO_EXT
 static int readrids(struct net_device *dev, aironet_ioctl *comp);
@@ -1034,7 +1035,7 @@
 #define FLAG_PENDING_XMIT 9
 #define FLAG_PENDING_XMIT11 10
 #define FLAG_PCI	11
-#define JOB_MASK	0xff0000
+#define JOB_MASK	0x1ff0000
 #define JOB_DIE		16
 #define JOB_XMIT	17
 #define JOB_XMIT11	18
@@ -1043,6 +1044,7 @@
 #define JOB_MIC		21
 #define JOB_EVENT	22
 #define JOB_AUTOWEP	23
+#define JOB_WSTATS	24
 	int (*bap_read)(struct airo_info*, u16 *pu16Dst, int bytelen,
 			int whichbap);
 	unsigned short *flash;
@@ -1699,8 +1701,8 @@
 
 	return PC4500_writerid( ai, RID_CONFIG, &cfgr, sizeof(cfgr), lock);
 }
-static int readStatusRid(struct airo_info*ai, StatusRid *statr) {
-	int rc = PC4500_readrid(ai, RID_STATUS, statr, sizeof(*statr), 1);
+static int readStatusRid(struct airo_info*ai, StatusRid *statr, int lock) {
+	int rc = PC4500_readrid(ai, RID_STATUS, statr, sizeof(*statr), lock);
 	u16 *s;
 
 	statr->len = le16_to_cpu(statr->len);
@@ -2428,6 +2430,8 @@
 			airo_end_xmit11(dev);
 		else if (test_bit(JOB_STATS, &ai->flags))
 			airo_read_stats(ai);
+		else if (test_bit(JOB_WSTATS, &ai->flags))
+			airo_read_wireless_stats(ai);
 		else if (test_bit(JOB_PROMISC, &ai->flags))
 			airo_set_promisc(ai);
 #ifdef MICSUPPORT
@@ -2954,7 +2958,6 @@
 		ai->config.opmode = adhoc ? MODE_STA_IBSS : MODE_STA_ESS;
 		ai->config.authType = AUTH_OPEN;
 		ai->config.modulation = MOD_CCK;
-		ai->config._reserved1a[0] = 2; /* ??? */
 
 #ifdef MICSUPPORT
 		if ((cap_rid.len>=sizeof(cap_rid)) && (cap_rid.extSoftCap&1) &&
@@ -3726,7 +3729,7 @@
 		return -ENOMEM;
 	}
 
-	readStatusRid(apriv, &status_rid);
+	readStatusRid(apriv, &status_rid, 1);
 	readCapabilityRid(apriv, &cap_rid);
 
         i = sprintf(data->rbuffer, "Status: %s%s%s%s%s%s%s%s%s\n",
@@ -4783,7 +4786,7 @@
 	if ((local->config.opmode & 0xFF) == MODE_STA_ESS)
 		status_rid.channel = local->config.channelSet;
 	else
-		readStatusRid(local, &status_rid);
+		readStatusRid(local, &status_rid, 1);
 
 #ifdef WEXT_USECHANNELS
 	fwrq->m = ((int)status_rid.channel) + 1;
@@ -4858,7 +4861,7 @@
 	struct airo_info *local = dev->priv;
 	StatusRid status_rid;		/* Card status info */
 
-	readStatusRid(local, &status_rid);
+	readStatusRid(local, &status_rid, 1);
 
 	/* Note : if dwrq->flags != 0, we should
 	 * get the relevant SSID from the SSID list... */
@@ -4922,7 +4925,7 @@
 	struct airo_info *local = dev->priv;
 	StatusRid status_rid;		/* Card status info */
 
-	readStatusRid(local, &status_rid);
+	readStatusRid(local, &status_rid, 1);
 
 	/* Tentative. This seems to work, wow, I'm lucky !!! */
 	memcpy(awrq->sa_data, status_rid.bssid[0], ETH_ALEN);
@@ -5055,7 +5058,7 @@
 	struct airo_info *local = dev->priv;
 	StatusRid status_rid;		/* Card status info */
 
-	readStatusRid(local, &status_rid);
+	readStatusRid(local, &status_rid, 1);
 
 	vwrq->value = status_rid.currentXmitRate * 500000;
 	/* If more than one rate, set auto */
@@ -5771,7 +5774,7 @@
 	}
 	if (!i) {
 		StatusRid status_rid;		/* Card status info */
-		readStatusRid(local, &status_rid);
+		readStatusRid(local, &status_rid, 1);
 		for (i = 0;
 		     i < min(IW_MAX_AP, 4) &&
 			     (status_rid.bssid[i][0]
@@ -6577,16 +6580,17 @@
  *
  * Jean
  */
-struct iw_statistics *airo_get_wireless_stats(struct net_device *dev)
+static void airo_read_wireless_stats(struct airo_info *local)
 {
-	struct airo_info *local = dev->priv;
 	StatusRid status_rid;
 	StatsRid stats_rid;
 	u32 *vals = stats_rid.vals;
 
 	/* Get stats out of the card */
-	readStatusRid(local, &status_rid);
-	readStatsRid(local, &stats_rid, RID_STATS, 1);
+	clear_bit(JOB_WSTATS, &local->flags);
+	readStatusRid(local, &status_rid, 0);
+	readStatsRid(local, &stats_rid, RID_STATS, 0);
+	up(&local->sem);
 
 	/* The status */
 	local->wstats.status = status_rid.mode;
@@ -6613,6 +6617,19 @@
 	local->wstats.discard.retries = vals[10];
 	local->wstats.discard.misc = vals[1] + vals[32];
 	local->wstats.miss.beacon = vals[34];
+}
+
+struct iw_statistics *airo_get_wireless_stats(struct net_device *dev)
+{
+	struct airo_info *local =  dev->priv;
+
+	/* Get stats out of the card if available */
+	if (down_trylock(&local->sem) != 0) {
+		set_bit(JOB_WSTATS, &local->flags);
+		wake_up_interruptible(&local->thr_wait);
+	} else
+		airo_read_wireless_stats(local);
+
 	return &local->wstats;
 }
 #endif /* WIRELESS_EXT */
diff -urN linux-2.4.22-bk43/fs/jfs/jfs_metapage.c linux-2.4.22-bk44/fs/jfs/jfs_metapage.c
--- linux-2.4.22-bk43/fs/jfs/jfs_metapage.c	2003-10-30 02:50:59.000000000 -0800
+++ linux-2.4.22-bk44/fs/jfs/jfs_metapage.c	2003-10-30 02:51:33.000000000 -0800
@@ -558,9 +558,6 @@
 		if (mp) {
 			set_bit(META_discard, &mp->flag);
 			spin_unlock(&meta_lock);
-			lock_page(mp->page);
-			block_flushpage(mp->page, 0);
-			UnlockPage(mp->page);
 		} else {
 			spin_unlock(&meta_lock);
 			page = find_lock_page(mapping, lblock>>l2BlocksPerPage);
diff -urN linux-2.4.22-bk43/fs/lockd/svclock.c linux-2.4.22-bk44/fs/lockd/svclock.c
--- linux-2.4.22-bk43/fs/lockd/svclock.c	2003-10-30 02:50:59.000000000 -0800
+++ linux-2.4.22-bk44/fs/lockd/svclock.c	2003-10-30 02:51:34.000000000 -0800
@@ -317,8 +317,6 @@
 				(long long)lock->fl.fl_end,
 				wait);
 
-	/* Lock file against concurrent access */
-	down(&file->f_sema);
 
 	/* Get existing block (in case client is busy-waiting) */
 	block = nlmsvc_lookup_block(file, lock, 0);
@@ -326,6 +324,9 @@
 	lock->fl.fl_flags |= FL_LOCKD;
 
 again:
+	/* Lock file against concurrent access */
+	down(&file->f_sema);
+
 	if (!(conflock = posix_test_lock(&file->f_file, &lock->fl))) {
 		error = posix_lock_file(&file->f_file, &lock->fl, 0);
 
@@ -358,7 +359,10 @@
 
 	/* If we don't have a block, create and initialize it. Then
 	 * retry because we may have slept in kmalloc. */
+	/* We have to release f_sema as nlmsvc_create_block may try to
+	 * claim it while doing host garbage collection */
 	if (block == NULL) {
+		up(&file->f_sema);
 		dprintk("lockd: blocking on this lock (allocating).\n");
 		if (!(block = nlmsvc_create_block(rqstp, file, lock, cookie)))
 			return nlm_lck_denied_nolocks;
diff -urN linux-2.4.22-bk43/lib/vsprintf.c linux-2.4.22-bk44/lib/vsprintf.c
--- linux-2.4.22-bk43/lib/vsprintf.c	2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.22-bk44/lib/vsprintf.c	2003-10-30 02:51:37.000000000 -0800
@@ -21,6 +21,7 @@
 #include <linux/kernel.h>
 
 #include <asm/div64.h>
+#include <asm/page.h>
 
 /**
  * simple_strtoul - convert a string to an unsigned long
@@ -341,7 +342,7 @@
 
 			case 's':
 				s = va_arg(args, char *);
-				if (!s)
+				if ((unsigned long)s < PAGE_SIZE)
 					s = "<NULL>";
 
 				len = strnlen(s, precision);
diff -urN linux-2.4.22-bk43/net/ipv4/tcp_input.c linux-2.4.22-bk44/net/ipv4/tcp_input.c
--- linux-2.4.22-bk43/net/ipv4/tcp_input.c	2003-06-13 07:51:39.000000000 -0700
+++ linux-2.4.22-bk44/net/ipv4/tcp_input.c	2003-10-30 02:51:39.000000000 -0800
@@ -1952,7 +1952,10 @@
 				 struct sk_buff *skb, u32 ack, u32 ack_seq)
 {
 	int flag = 0;
-	u32 nwin = ntohs(skb->h.th->window) << tp->snd_wscale;
+	u32 nwin = ntohs(skb->h.th->window);
+
+	if (likely(!skb->h.th->syn))
+		nwin <<= tp->snd_wscale;
 
 	if (tcp_may_update_window(tp, ack, ack_seq, nwin)) {
 		flag |= FLAG_WIN_UPDATE;
