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

diff -urN linux-2.4.23-bk19/MAINTAINERS linux-2.4.23-bk20/MAINTAINERS
--- linux-2.4.23-bk19/MAINTAINERS	2003-12-31 02:50:24.000000000 -0800
+++ linux-2.4.23-bk20/MAINTAINERS	2003-12-31 02:50:29.000000000 -0800
@@ -1689,8 +1689,10 @@
 S:	Maintained
 
 SPARC (sparc32):
+P:	Keith M. Wesolowski
+M:	wesolows@foobazco.org
 L:	sparclinux@vger.kernel.org
-S:	Unmaintained - please send patches to mailing list
+S:	Maintained
 
 SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
 P:	Roger Wolff
diff -urN linux-2.4.23-bk19/Makefile linux-2.4.23-bk20/Makefile
--- linux-2.4.23-bk19/Makefile	2003-12-31 02:50:24.000000000 -0800
+++ linux-2.4.23-bk20/Makefile	2003-12-31 02:50:29.000000000 -0800
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 23
-EXTRAVERSION = -bk19
+EXTRAVERSION = -bk20
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.23-bk19/arch/sparc64/defconfig linux-2.4.23-bk20/arch/sparc64/defconfig
--- linux-2.4.23-bk19/arch/sparc64/defconfig	2003-12-31 02:50:24.000000000 -0800
+++ linux-2.4.23-bk20/arch/sparc64/defconfig	2003-12-31 02:50:29.000000000 -0800
@@ -719,6 +719,7 @@
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
 CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_UINPUT=m
 
 #
 # File systems
@@ -1058,7 +1059,7 @@
 # Bluetooth device drivers
 #
 CONFIG_BLUEZ_HCIUSB=m
-CONFIG_BLUEZ_USB_SCO=y
+CONFIG_BLUEZ_HCIUSB_SCO=y
 CONFIG_BLUEZ_HCIUART=m
 CONFIG_BLUEZ_HCIUART_H4=y
 CONFIG_BLUEZ_HCIUART_BCSP=y
diff -urN linux-2.4.23-bk19/arch/sparc64/kernel/pci_sabre.c linux-2.4.23-bk20/arch/sparc64/kernel/pci_sabre.c
--- linux-2.4.23-bk19/arch/sparc64/kernel/pci_sabre.c	2003-11-28 10:26:19.000000000 -0800
+++ linux-2.4.23-bk20/arch/sparc64/kernel/pci_sabre.c	2003-12-31 02:50:29.000000000 -0800
@@ -325,16 +325,22 @@
 	return PCIBIOS_SUCCESSFUL;
 }
 
+/* When accessing PCI config space of the PCI controller itself (bus
+ * 0, device slot 0, function 0) there are restrictions.  Each
+ * register must be accessed as it's natural size.  Thus, for example
+ * the Vendor ID must be accessed as a 16-bit quantity.
+ */
+
 static int sabre_read_byte(struct pci_dev *dev, int where, u8 *value)
 {
-	if (dev->bus->number)
-		return __sabre_read_byte(dev, where, value);
-
-	if (sabre_out_of_range(dev->devfn)) {
+	if (!dev->bus->number && sabre_out_of_range(dev->devfn)) {
 		*value = 0xff;
 		return PCIBIOS_SUCCESSFUL;
 	}
 
+	if (dev->bus->number || PCI_SLOT(dev->devfn))
+		return __sabre_read_byte(dev, where, value);
+
 	if (where < 8) {
 		u16 tmp;
 
@@ -350,14 +356,14 @@
 
 static int sabre_read_word(struct pci_dev *dev, int where, u16 *value)
 {
-	if (dev->bus->number)
-		return __sabre_read_word(dev, where, value);
-
-	if (sabre_out_of_range(dev->devfn)) {
+	if (!dev->bus->number && sabre_out_of_range(dev->devfn)) {
 		*value = 0xffff;
 		return PCIBIOS_SUCCESSFUL;
 	}
 
+	if (dev->bus->number || PCI_SLOT(dev->devfn))
+		return __sabre_read_word(dev, where, value);
+
 	if (where < 8)
 		return __sabre_read_word(dev, where, value);
 	else {
@@ -375,14 +381,14 @@
 {
 	u16 tmp;
 
-	if (dev->bus->number)
-		return __sabre_read_dword(dev, where, value);
-
-	if (sabre_out_of_range(dev->devfn)) {
+	if (!dev->bus->number && sabre_out_of_range(dev->devfn)) {
 		*value = 0xffffffff;
 		return PCIBIOS_SUCCESSFUL;
 	}
 
+	if (dev->bus->number || PCI_SLOT(dev->devfn))
+		return __sabre_read_dword(dev, where, value);
+
 	sabre_read_word(dev, where, &tmp);
 	*value = tmp;
 	sabre_read_word(dev, where + 2, &tmp);
diff -urN linux-2.4.23-bk19/drivers/block/genhd.c linux-2.4.23-bk20/drivers/block/genhd.c
--- linux-2.4.23-bk19/drivers/block/genhd.c	2002-11-28 15:53:12.000000000 -0800
+++ linux-2.4.23-bk20/drivers/block/genhd.c	2003-12-31 02:50:29.000000000 -0800
@@ -201,7 +201,7 @@
 
 			disk_round_stats(hd);
 			seq_printf(s, "%4d  %4d %10d %s "
-				      "%d %d %d %d %d %d %d %d %d %d %d\n",
+				      "%u %u %u %u %u %u %u %u %u %u %u\n",
 				      gp->major, n, gp->sizes[n],
 				      disk_name(gp, n, buf),
 				      hd->rd_ios, hd->rd_merges,
diff -urN linux-2.4.23-bk19/drivers/net/tokenring/Config.in linux-2.4.23-bk20/drivers/net/tokenring/Config.in
--- linux-2.4.23-bk19/drivers/net/tokenring/Config.in	2002-08-02 17:39:44.000000000 -0700
+++ linux-2.4.23-bk20/drivers/net/tokenring/Config.in	2003-12-31 02:50:30.000000000 -0800
@@ -20,12 +20,12 @@
    dep_tristate '  IBM Lanstreamer chipset PCI adapter support' CONFIG_IBMLS $CONFIG_TR $CONFIG_PCI
    dep_tristate '  3Com 3C359 Token Link Velocity XL adapter support' CONFIG_3C359 $CONFIG_TR $CONFIG_PCI
    tristate '  Generic TMS380 Token Ring ISA/PCI adapter support' CONFIG_TMS380TR
-   if [ "$CONFIG_TMS380TR" != "n" ]; then
-      dep_tristate '    Generic TMS380 PCI support' CONFIG_TMSPCI $CONFIG_PCI
-      dep_tristate '    Generic TMS380 ISA support' CONFIG_TMSISA $CONFIG_ISA
-      dep_tristate '    Madge Smart 16/4 PCI Mk2 support' CONFIG_ABYSS $CONFIG_PCI
-      dep_tristate '    Madge Smart 16/4 Ringnode MicroChannel' CONFIG_MADGEMC $CONFIG_MCA
-   fi
+
+   dep_tristate '    Generic TMS380 PCI support' CONFIG_TMSPCI $CONFIG_PCI $CONFIG_TMS380TR
+   dep_tristate '    Generic TMS380 ISA support' CONFIG_TMSISA $CONFIG_ISA $CONFIG_TMS380TR
+   dep_tristate '    Madge Smart 16/4 PCI Mk2 support' CONFIG_ABYSS $CONFIG_PCI $CONFIG_TMS380TR
+   dep_tristate '    Madge Smart 16/4 Ringnode MicroChannel' CONFIG_MADGEMC $CONFIG_MCA $CONFIG_TMS380TR
+
    if [ "$CONFIG_ISA" = "y" -o "$CONFIG_MCA" = "y" ]; then
       tristate '  SMC ISA/MCA adapter support' CONFIG_SMCTR
    fi
diff -urN linux-2.4.23-bk19/include/net/pkt_cls.h linux-2.4.23-bk20/include/net/pkt_cls.h
--- linux-2.4.23-bk19/include/net/pkt_cls.h	2000-09-18 15:04:13.000000000 -0700
+++ linux-2.4.23-bk20/include/net/pkt_cls.h	2003-12-31 02:50:30.000000000 -0800
@@ -77,7 +77,11 @@
 	return -1;
 }
 
-
+static inline void tcf_destroy(struct tcf_proto *tp)
+{
+	tp->ops->destroy(tp);
+	kfree(tp);
+}
 
 extern int register_tcf_proto_ops(struct tcf_proto_ops *ops);
 extern int unregister_tcf_proto_ops(struct tcf_proto_ops *ops);
diff -urN linux-2.4.23-bk19/net/core/dev.c linux-2.4.23-bk20/net/core/dev.c
--- linux-2.4.23-bk19/net/core/dev.c	2003-11-28 10:26:21.000000000 -0800
+++ linux-2.4.23-bk20/net/core/dev.c	2003-12-31 02:50:30.000000000 -0800
@@ -1501,8 +1501,8 @@
 #endif /* CONFIG_NET_DIVERT */
 			
 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
-	if (skb->dev->br_port != NULL &&
-	    br_handle_frame_hook != NULL) {
+	if (skb->dev->br_port != NULL && br_handle_frame_hook != NULL &&
+	    skb->pkt_type != PACKET_LOOPBACK) {
 		return handle_bridge(skb, pt_prev);
 	}
 #endif
diff -urN linux-2.4.23-bk19/net/core/neighbour.c linux-2.4.23-bk20/net/core/neighbour.c
--- linux-2.4.23-bk19/net/core/neighbour.c	2003-11-28 10:26:21.000000000 -0800
+++ linux-2.4.23-bk20/net/core/neighbour.c	2003-12-31 02:50:30.000000000 -0800
@@ -97,7 +97,7 @@
 /*
  * It is random distribution in the interval (1/2)*base...(3/2)*base.
  * It corresponds to default IPv6 settings and is not overridable,
- * because it is really reasonbale choice.
+ * because it is really reasonable choice.
  */
 
 unsigned long neigh_rand_reach_time(unsigned long base)
@@ -119,7 +119,7 @@
 		while ((n = *np) != NULL) {
 			/* Neighbour record may be discarded if:
 			   - nobody refers to it.
-			   - it is not premanent
+			   - it is not permanent
 			   - (NEW and probably wrong)
 			     INCOMPLETE entries are kept at least for
 			     n->parms->retrans_time, otherwise we could
@@ -504,7 +504,7 @@
 {
 	struct hh_cache *hh;
 
-	NEIGH_PRINTK2("neigh %p is suspecteded.\n", neigh);
+	NEIGH_PRINTK2("neigh %p is suspected.\n", neigh);
 
 	neigh->output = neigh->ops->output;
 
@@ -531,7 +531,7 @@
 
 /*
    Transitions NUD_STALE <-> NUD_REACHABLE do not occur
-   when fast path is built: we have no timers assotiated with
+   when fast path is built: we have no timers associated with
    these states, we do not have time to check state when sending.
    neigh_periodic_timer check periodically neigh->confirmed
    time and moves NUD_REACHABLE -> NUD_STALE.
@@ -945,7 +945,7 @@
 
 /* This function can be used in contexts, where only old dev_queue_xmit
    worked, f.e. if you want to override normal output path (eql, shaper),
-   but resoltution is not made yet.
+   but resolution is not made yet.
  */
 
 int neigh_compat_output(struct sk_buff *skb)
diff -urN linux-2.4.23-bk19/net/sched/cls_api.c linux-2.4.23-bk20/net/sched/cls_api.c
--- linux-2.4.23-bk19/net/sched/cls_api.c	2001-12-21 09:42:06.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/cls_api.c	2003-12-31 02:50:30.000000000 -0800
@@ -246,9 +246,7 @@
 			*back = tp->next;
 			spin_unlock_bh(&dev->queue_lock);
 			write_unlock(&qdisc_tree_lock);
-
-			tp->ops->destroy(tp);
-			kfree(tp);
+			tcf_destroy(tp);
 			err = 0;
 			goto errout;
 		}
diff -urN linux-2.4.23-bk19/net/sched/sch_atm.c linux-2.4.23-bk20/net/sched/sch_atm.c
--- linux-2.4.23-bk19/net/sched/sch_atm.c	2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.23-bk20/net/sched/sch_atm.c	2003-12-31 02:50:30.000000000 -0800
@@ -165,7 +165,7 @@
 	while ((filter = flow->filter_list)) {
 		DPRINTK("destroy_filters: destroying filter %p\n",filter);
 		flow->filter_list = filter->next;
-		filter->ops->destroy(filter);
+		tcf_destroy(filter);
 	}
 }
 
diff -urN linux-2.4.23-bk19/net/sched/sch_cbq.c linux-2.4.23-bk20/net/sched/sch_cbq.c
--- linux-2.4.23-bk19/net/sched/sch_cbq.c	2003-12-31 02:50:27.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/sch_cbq.c	2003-12-31 02:50:30.000000000 -0800
@@ -1708,7 +1708,7 @@
 
 	while ((tp = cl->filter_list) != NULL) {
 		cl->filter_list = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 }
 
diff -urN linux-2.4.23-bk19/net/sched/sch_csz.c linux-2.4.23-bk20/net/sched/sch_csz.c
--- linux-2.4.23-bk19/net/sched/sch_csz.c	2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.23-bk20/net/sched/sch_csz.c	2003-12-31 02:50:30.000000000 -0800
@@ -752,7 +752,7 @@
 
 	while ((tp = q->filter_list) != NULL) {
 		q->filter_list = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 
 	MOD_DEC_USE_COUNT;
diff -urN linux-2.4.23-bk19/net/sched/sch_dsmark.c linux-2.4.23-bk20/net/sched/sch_dsmark.c
--- linux-2.4.23-bk19/net/sched/sch_dsmark.c	2003-12-31 02:50:27.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/sch_dsmark.c	2003-12-31 02:50:30.000000000 -0800
@@ -378,7 +378,7 @@
 	while (p->filter_list) {
 		tp = p->filter_list;
 		p->filter_list = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 	qdisc_destroy(p->q);
 	p->q = &noop_qdisc;
diff -urN linux-2.4.23-bk19/net/sched/sch_htb.c linux-2.4.23-bk20/net/sched/sch_htb.c
--- linux-2.4.23-bk19/net/sched/sch_htb.c	2003-11-28 10:26:21.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/sch_htb.c	2003-12-31 02:50:30.000000000 -0800
@@ -1348,7 +1348,7 @@
 
 	while ((tp = *fl) != NULL) {
 		*fl = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 }
 
diff -urN linux-2.4.23-bk19/net/sched/sch_ingress.c linux-2.4.23-bk20/net/sched/sch_ingress.c
--- linux-2.4.23-bk19/net/sched/sch_ingress.c	2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.23-bk20/net/sched/sch_ingress.c	2003-12-31 02:50:30.000000000 -0800
@@ -294,7 +294,7 @@
 	while (p->filter_list) {
 		tp = p->filter_list;
 		p->filter_list = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 	memset(p, 0, sizeof(*p));
 	p->filter_list = NULL;
diff -urN linux-2.4.23-bk19/net/sched/sch_prio.c linux-2.4.23-bk20/net/sched/sch_prio.c
--- linux-2.4.23-bk19/net/sched/sch_prio.c	2003-12-31 02:50:27.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/sch_prio.c	2003-12-31 02:50:30.000000000 -0800
@@ -162,7 +162,7 @@
 
 	while ((tp = q->filter_list) != NULL) {
 		q->filter_list = tp->next;
-		tp->ops->destroy(tp);
+		tcf_destroy(tp);
 	}
 
 	for (prio=0; prio<q->bands; prio++) {
diff -urN linux-2.4.23-bk19/net/sched/sch_tbf.c linux-2.4.23-bk20/net/sched/sch_tbf.c
--- linux-2.4.23-bk19/net/sched/sch_tbf.c	2003-12-31 02:50:27.000000000 -0800
+++ linux-2.4.23-bk20/net/sched/sch_tbf.c	2003-12-31 02:50:30.000000000 -0800
@@ -108,6 +108,10 @@
 	Note that the peak rate TBF is much more tough: with MTU 1500
 	P_crit = 150Kbytes/sec. So, if you need greater peak
 	rates, use alpha with HZ=1000 :-)
+
+	With classful TBF, limit is just kept for backwards compatibility.
+	It is passed to the default bfifo qdisc - if the inner qdisc is
+	changed the limit is not effective anymore.
 */
 
 struct tbf_sched_data
@@ -136,7 +140,7 @@
 	struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
 	int ret;
 
-	if (skb->len > q->max_size || sch->stats.backlog + skb->len > q->limit) {
+	if (skb->len > q->max_size) {
 		sch->stats.drops++;
 #ifdef CONFIG_NET_CLS_POLICE
 		if (sch->reshape_fail == NULL || sch->reshape_fail(skb, sch))
@@ -152,7 +156,6 @@
 	}	
 	
 	sch->q.qlen++;
-	sch->stats.backlog += skb->len;
 	sch->stats.bytes += skb->len;
 	sch->stats.packets++;
 	return 0;
@@ -163,10 +166,8 @@
 	struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
 	int ret;
 	
-	if ((ret = q->qdisc->ops->requeue(skb, q->qdisc)) == 0) {
+	if ((ret = q->qdisc->ops->requeue(skb, q->qdisc)) == 0)
 		sch->q.qlen++; 
-		sch->stats.backlog += skb->len;
-	}
 	
 	return ret;
 }
@@ -178,7 +179,6 @@
 	
 	if ((len = q->qdisc->ops->drop(q->qdisc)) != 0) {
 		sch->q.qlen--;
-		sch->stats.backlog -= len;
 		sch->stats.drops++;
 	}
 	return len;
@@ -224,7 +224,6 @@
 			q->t_c = now;
 			q->tokens = toks;
 			q->ptokens = ptoks;
-			sch->stats.backlog -= len;
 			sch->q.qlen--;
 			sch->flags &= ~TCQ_F_THROTTLED;
 			return skb;
@@ -253,7 +252,6 @@
 		if (q->qdisc->ops->requeue(skb, q->qdisc) != NET_XMIT_SUCCESS) {
 			/* When requeue fails skb is dropped */ 
 			sch->q.qlen--;
-			sch->stats.backlog -= len;
 			sch->stats.drops++;
 		}	
 		
@@ -269,7 +267,6 @@
 
 	qdisc_reset(q->qdisc);
 	sch->q.qlen = 0;
-	sch->stats.backlog = 0;
 	PSCHED_GET_TIME(q->t_c);
 	q->tokens = q->buffer;
 	q->ptokens = q->mtu;
@@ -464,7 +461,6 @@
 	*old = xchg(&q->qdisc, new);
 	qdisc_reset(*old);
 	sch->q.qlen = 0;
-	sch->stats.backlog = 0;
 	sch_tree_unlock(sch);
 	
 	return 0;
