diff -ur --new-file old/atm/CHANGES new/atm/CHANGES
--- old/atm/CHANGES	Fri Feb 19 18:00:11 1999
+++ new/atm/CHANGES	Mon Mar  1 16:07:19 1999
@@ -1,3 +1,21 @@
+Version 0.54 to 0.55 (1-MAR-1999)
+====================
+
+Bug fixes
+---------
+
+ - SELECT_TOP_PCR didn't take intro account the "pcr" field, causing SVC with
+   QoS pcr=xxx to be set up at link speed
+ - qos_equal didn't detect differences in the "pcr" fields
+ - sch_atm only accepted parent == root or absent (reported by John Loughney)
+ - sch_atm:atm_tc_put accessed flow structure after kfree'ing it
+ - sch_atm:atm_tc_change didn't put excess traffic class if class creation
+   failed
+ - sch_atm:atm_tc_dump_class didn't return class ID in tcm->tcm_handle
+ - sch_atm:atm_tc_delete refused to delete classes because it expected
+   ref == 1, but ref == 2 (reported by John Loughney)
+
+
 Version 0.53 to 0.54 (19-FEB-1999)
 ====================
 
diff -ur --new-file old/atm/README new/atm/README
--- old/atm/README	Fri Feb 19 17:12:41 1999
+++ new/atm/README	Mon Mar  1 15:57:59 1999
@@ -1,4 +1,4 @@
-ATM on Linux, release 0.54 (alpha)        by Werner Almesberger, EPFL ICA
+ATM on Linux, release 0.55 (alpha)        by Werner Almesberger, EPFL ICA
 ============================================== Werner.Almesberger@epfl.ch
 
 This is experimental software. There are known major bugs and certainly
diff -ur --new-file old/atm/USAGE new/atm/USAGE
--- old/atm/USAGE	Fri Feb 19 18:01:42 1999
+++ new/atm/USAGE	Mon Mar  1 16:09:07 1999
@@ -1,4 +1,4 @@
-Usage instructions  -  ATM on Linux, release 0.54
+Usage instructions  -  ATM on Linux, release 0.55
 -------------------------------------------------
 
 For updates of ATM on Linux, please check the Web page at  
@@ -17,7 +17,7 @@
 In order to install this package, you need 
 
   - the package itself  
-    ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.54.tar.gz  
+    ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.55.tar.gz  
   - the Linux kernel, version 2.2.1, e.g. from  
     ftp://ftp.kernel.org/pub/linux/kernel/v2.1/linux-2.2.1.tar.gz  
   - Perl, version 4 or 5 
@@ -33,7 +33,7 @@
 all the files listed above there. Then extract the ATM on Linux 
 distribution:
 
-tar xfz atm-0.54.tar.gz
+tar xfz atm-0.55.tar.gz
 
 and the kernel source:
 
diff -ur --new-file old/atm/VERSION new/atm/VERSION
--- old/atm/VERSION	Fri Feb 19 17:12:02 1999
+++ new/atm/VERSION	Mon Mar  1 16:42:59 1999
@@ -1 +1 @@
-0.54
+0.55
diff -ur --new-file old/atm/atm.patch new/atm/atm.patch
--- old/atm/atm.patch	Fri Feb 19 18:00:54 1999
+++ new/atm/atm.patch	Mon Mar  1 16:08:09 1999
@@ -14914,11 +14914,11 @@
 +
 +#endif
 --- /dev/null	Tue Jan  1 05:00:00 1980
-+++ work/include/linux/atmsvc.h	Tue Feb  9 18:09:24 1999
-@@ -0,0 +1,52 @@
++++ work/include/linux/atmsvc.h	Mon Mar  1 15:01:23 1999
+@@ -0,0 +1,53 @@
 +/* atmsvc.h - ATM signaling kernel-demon interface definitions */
 + 
-+/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
++/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
 + 
 +
 +#ifndef _LINUX_ATMSVC_H
@@ -14964,8 +14964,9 @@
 + * if signaling only uses one ATM interface).
 + */
 +
-+#define SELECT_TOP_PCR(tp) ((tp).max_pcr && (tp).max_pcr != ATM_MAX_PCR ? \
-+  (tp).max_pcr : (tp).min_pcr ? (tp).min_pcr : ATM_MAX_PCR)
++#define SELECT_TOP_PCR(tp) ((tp).pcr ? (tp).pcr : \
++  (tp).max_pcr && (tp).max_pcr != ATM_MAX_PCR ? (tp).max_pcr : \
++  (tp).min_pcr ? (tp).min_pcr : ATM_MAX_PCR)
 +
 +#endif
 --- ref/include/linux/capability.h	Thu Jan 28 21:43:10 1999
@@ -15365,8 +15366,8 @@
  	tc_filter_init();
  #endif
 --- /dev/null	Tue Jan  1 05:00:00 1980
-+++ work/net/sched/sch_atm.c	Fri Feb 19 17:30:10 1999
-@@ -0,0 +1,614 @@
++++ work/net/sched/sch_atm.c	Mon Mar  1 16:03:42 1999
+@@ -0,0 +1,625 @@
 +/* net/sched/sch_atm.c - ATM VC selection "queueing discipline" */
 +
 +/* Written 1998,1999 by Werner Almesberger, EPFL ICA */
@@ -15539,12 +15540,12 @@
 +		DPRINTK("atm_tc_put: f_count %d\n",flow->sock->file->f_count);
 +		sockfd_put(flow->sock);
 +	}
++	if (flow->excess) atm_tc_put(sch,(unsigned long) flow->excess);
 +	if (flow != &p->link) kfree(flow);
 +	/*
 +	 * If flow == &p->link, the qdisc no longer works at this point and
 +	 * needs to be removed. (By the caller of atm_tc_put.)
 +	 */
-+	if (flow->excess) atm_tc_put(sch,(unsigned long) flow->excess);
 +}
 +
 +
@@ -15553,7 +15554,7 @@
 +{
 +	struct atm_qdisc_data *p = PRIV(sch);
 +	struct atm_flow_data *flow = (struct atm_flow_data *) *arg;
-+	struct atm_flow_data *excess;
++	struct atm_flow_data *excess = NULL;
 +	struct rtattr *opt = tca[TCA_OPTIONS-1];
 +	struct rtattr *tb[TCA_ATM_MAX];
 +	struct socket *sock;
@@ -15565,7 +15566,8 @@
 +	/*
 +	 * The concept of parents doesn't apply for this qdisc.
 +	 */
-+	if (parent && parent != TC_H_ROOT) return -EINVAL;
++	if (parent && parent != TC_H_ROOT && parent != sch->handle)
++		return -EINVAL;
 +	/*
 +	 * ATM classes cannot be changed. In order to change properties of the
 +	 * ATM connection, that socket needs to be modified directly (via the
@@ -15656,6 +15658,7 @@
 +	*arg = (unsigned long) flow;
 +	return 0;
 +err_out:
++	if (excess) atm_tc_put(sch,(unsigned long) excess);
 +	sockfd_put(sock);
 +	return error;
 +}
@@ -15669,7 +15672,15 @@
 +	DPRINTK("atm_tc_delete(sch %p,[qdisc %p],flow %p)\n",sch,p,flow);
 +	if (!find_flow(PRIV(sch),flow)) return -EINVAL;
 +	if (flow->filter_list || flow == &p->link) return -EBUSY;
-+	if (flow->ref > 1) return -EBUSY; /* catch references via excess, etc.*/
++	/*
++	 * Reference count must be 2: one for "keepalive" (set at class
++	 * creation), and one for the reference held when calling delete.
++	 */
++	if (flow->ref < 2) {
++		printk(KERN_ERR "atm_tc_delete: flow->ref == %d\n",flow->ref);
++		return -EINVAL;
++	}
++	if (flow->ref > 2) return -EBUSY; /* catch references via excess, etc.*/
 +	atm_tc_put(sch,arg);
 +	return 0;
 +}
@@ -15891,6 +15902,7 @@
 +	DPRINTK("atm_tc_dump_class(sch %p,[qdisc %p],flow %p,skb %p,tcm %p)\n",
 +	    sch,p,flow,skb,tcm);
 +	if (!find_flow(p,flow)) return -EINVAL;
++	tcm->tcm_handle = flow->classid;
 +	rta = (struct rtattr *) b;
 +	RTA_PUT(skb,TCA_OPTIONS,0,NULL);
 +	RTA_PUT(skb,TCA_ATM_HDR,flow->hdr_len,flow->hdr);
@@ -17948,11 +17960,11 @@
 +
 +#endif
 --- /dev/null	Tue Jan  1 05:00:00 1980
-+++ work/net/atm/misc.c	Tue Feb  9 15:49:58 1999
++++ work/net/atm/misc.c	Mon Mar  1 15:03:23 1999
 @@ -0,0 +1,184 @@
 +/* net/atm/misc.c - Various functions for use by ATM drivers */
 +
-+/* Written 1995-1998 by Werner Almesberger, EPFL ICA */
++/* Written 1995-1999 by Werner Almesberger, EPFL ICA */
 +
 +
 +#include <linux/config.h>
@@ -18059,7 +18071,7 @@
 + *	-   y   *	y-		x   y   *	y-
 + *	-   y   z	z-		x   y   z	z-
 + *
-+ * All non-error cases can be convered with the following simple set of rules:
++ * All non-error cases can be converted with the following simple set of rules:
 + *
 + *   if pcr == z then z-
 + *   else if min == x && pcr == - then x+
@@ -24550,7 +24562,7 @@
 +	return 0;
 +}
 --- /dev/null	Tue Jan  1 05:00:00 1980
-+++ work/net/atm/signaling.h	Fri Feb 19 17:30:58 1999
++++ work/net/atm/signaling.h	Mon Mar  1 15:19:20 1999
 @@ -0,0 +1,25 @@
 +/* net/atm/signaling.h - ATM signaling */
 + 
@@ -24578,11 +24590,11 @@
 +
 +#endif
 --- /dev/null	Tue Jan  1 05:00:00 1980
-+++ work/net/atm/svc.c	Tue Feb  9 15:49:58 1999
-@@ -0,0 +1,388 @@
++++ work/net/atm/svc.c	Mon Mar  1 15:03:13 1999
+@@ -0,0 +1,389 @@
 +/* net/atm/svc.c - ATM SVC sockets */
 +
-+/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
++/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
 +
 +
 +#include <linux/string.h>
@@ -24780,6 +24792,7 @@
 + * #ifndef CONFIG_SINGLE_SIGITF
 + */
 +	vcc->qos.txtp.max_pcr = SELECT_TOP_PCR(vcc->qos.txtp);
++	vcc->qos.txtp.pcr = 0;
 +	vcc->qos.txtp.min_pcr = 0;
 +/*
 + * #endif
diff -ur --new-file old/atm/doc/usage.tex new/atm/doc/usage.tex
--- old/atm/doc/usage.tex	Fri Feb 19 17:13:19 1999
+++ new/atm/doc/usage.tex	Mon Mar  1 15:58:15 1999
@@ -1,7 +1,7 @@
 %%def%:=
 
 %:\begin{verbatim}
-%:Usage instructions  -  ATM on Linux, release 0.54
+%:Usage instructions  -  ATM on Linux, release 0.55
 %:-------------------------------------------------
 %:
 %:\end{verbatim}
@@ -38,7 +38,7 @@
 
 \title{ATM on Linux \\
   User's guide \\
-  Release 0.54 (alpha)}
+  Release 0.55 (alpha)}
 \author{Werner Almesberger \\
   {\tt Werner.Almesberger@epfl.ch} \\
   \\
@@ -82,7 +82,7 @@
 In order to install this package, you need
 \begin{itemize}
   \item the package itself
-    \url{ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.54.tar.gz}
+    \url{ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.55.tar.gz}
   \item the Linux kernel, version 2.2.1, e.g. from
     \url{ftp://ftp.kernel.org/pub/linux/kernel/v2.1/linux-2.2.1.tar.gz}
   \item Perl, version 4 or 5
@@ -99,7 +99,7 @@
 distribution:
 
 \begin{verbatim}
-tar xfz atm-0.54.tar.gz
+tar xfz atm-0.55.tar.gz
 \end{verbatim}
 
 and the kernel source:
diff -ur --new-file old/atm/doc/usage.txt new/atm/doc/usage.txt
--- old/atm/doc/usage.txt	Fri Feb 19 18:01:42 1999
+++ new/atm/doc/usage.txt	Mon Mar  1 16:09:07 1999
@@ -1,4 +1,4 @@
-Usage instructions  -  ATM on Linux, release 0.54
+Usage instructions  -  ATM on Linux, release 0.55
 -------------------------------------------------
 
 For updates of ATM on Linux, please check the Web page at  
@@ -17,7 +17,7 @@
 In order to install this package, you need 
 
   - the package itself  
-    ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.54.tar.gz  
+    ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.55.tar.gz  
   - the Linux kernel, version 2.2.1, e.g. from  
     ftp://ftp.kernel.org/pub/linux/kernel/v2.1/linux-2.2.1.tar.gz  
   - Perl, version 4 or 5 
@@ -33,7 +33,7 @@
 all the files listed above there. Then extract the ATM on Linux 
 distribution:
 
-tar xfz atm-0.54.tar.gz
+tar xfz atm-0.55.tar.gz
 
 and the kernel source:
 
diff -ur --new-file old/atm/extra/tc/README new/atm/extra/tc/README
--- old/atm/extra/tc/README	Fri Feb 19 17:59:56 1999
+++ new/atm/extra/tc/README	Mon Mar  1 15:48:55 1999
@@ -42,10 +42,10 @@
    Verify that the operation succeeded:
 
      % ./tc qdisc show dev eth0
-     qdisc atm 1: root 
+     qdisc atm 1: root refcnt 0
      % ./tc class show dev eth0
      class atm 1: parent 1: hdr . excess clp 
-     class atm 1: parent 1: pvc 0.0.100 hdr aa.aa.03.00.00.00.08.00 excess clp
+     class atm 1:1 parent 1: pvc 0.0.100 hdr aa.aa.03.00.00.00.08.00 excess clp
        CONNECTED 
 
    (The first class is used to send all traffic that isn't explicitly
diff -ur --new-file old/atm/lib/qosequal.c new/atm/lib/qosequal.c
--- old/atm/lib/qosequal.c	Thu Oct 10 23:51:25 1996
+++ new/atm/lib/qosequal.c	Mon Mar  1 15:55:53 1999
@@ -1,6 +1,6 @@
 /* qosequal.c - Compares QOS specifications for equality */
 
-/* Written 1996 by Werner Almesberger, EPFL-LRC */
+/* Written 1996,1999 by Werner Almesberger, EPFL-LRC */
 
 
 #include "atm.h"
@@ -21,7 +21,8 @@
     }
     if (!a.max_pcr && !a.min_pcr) a.max_pcr = ATM_MAX_PCR;
     if (!b.max_pcr && !b.min_pcr) b.max_pcr = ATM_MAX_PCR;
-    if (a.max_pcr != b.max_pcr || a.min_pcr != b.min_pcr) return 0;
+    if (a.max_pcr != b.max_pcr || a.pcr != b.pcr || a.min_pcr != b.min_pcr)
+	return 0;
     return a.max_sdu == b.max_sdu;
 }
 
diff -ur --new-file old/atm/sigd/atmsigd.c new/atm/sigd/atmsigd.c
--- old/atm/sigd/atmsigd.c	Tue Jan  5 16:35:04 1999
+++ new/atm/sigd/atmsigd.c	Tue Feb 23 13:51:03 1999
@@ -200,7 +200,7 @@
 
 void poll_signals(void)
 {
-    static status_num = 0,trace_num = 0;
+    static int status_num = 0,trace_num = 0;
     char path[PATH_MAX+1];
     FILE *file;