aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@cc.helsinki.fi>1993-12-10 14:29:01 +0000
committerNicolas Pitre <nico@cam.org>2007-08-19 14:19:22 -0400
commit89fc4813f91b51c803c68c9256d538270035eeae (patch)
tree5304bcec26c9e22ce669a66c70c028a87c312193
parent3d40b9081a8372ab0152d49d1c43b62264eab0bd (diff)
downloadarchive-89fc4813f91b51c803c68c9256d538270035eeae.tar.gz
ALPHA-pl14c
-rw-r--r--Makefile2
-rw-r--r--drivers/net/CONFIG4
-rw-r--r--drivers/net/Makefile2
-rw-r--r--drivers/net/slhc.c5
-rw-r--r--drivers/net/slip.c3
-rw-r--r--include/linux/in.h8
-rw-r--r--kernel/sched.c23
7 files changed, 30 insertions, 17 deletions
diff --git a/Makefile b/Makefile
index 8e94fff..626f0f2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
VERSION = 0.99
PATCHLEVEL = 14
-ALPHA = b
+ALPHA = c
all: Version zImage
diff --git a/drivers/net/CONFIG b/drivers/net/CONFIG
index c17d07f..882a654 100644
--- a/drivers/net/CONFIG
+++ b/drivers/net/CONFIG
@@ -27,9 +27,6 @@
# LANCE_DEBUG Set the debugging message level.
# DEFAULT_DMA Change the default DMA to other than 5.
# CONFIG_PLIP The Crynwr-protocol PL/IP driver
-# SLIP The MicroWalt SLIP driver
-# SL_DUMP Uses the "dump frame" debug code
-# SL_COMPRESSED Use CSLIP
# D_LINK The D-Link DE-600 Portable Ethernet Adaptor.
# D_LINK_IO The D-Link I/O address (0x378 == default)
# D_LINK_IRQ The D-Link IRQ number to use (IRQ7 == default)
@@ -42,6 +39,5 @@ EL2_OPTS = #-UEL2_AUI
NE_OPTS =
HP_OPTS =
PLIP_OPTS =
-SLIP_OPTS = -DSL_DUMP -DSL_COMPRESSED
DL_OPTS = -DD_LINK_IO=0x378 -DD_LINK_IRQ=7 -UD_LINK_DEBUG
AT_OPTS = # -DLANCE_DMA=5
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index c535be7..2a958fd 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -70,7 +70,7 @@ endif
ifdef CONFIG_SLIP
NETDRV_OBJS := $(NETDRV_OBJS) net.a(slip.o) net.a(slhc.o)
slip.o: slip.c CONFIG
- $(CC) $(CPPFLAGS) $(CFLAGS) $(SLIP_OPTS) -c $<
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
endif
ifdef CONFIG_DE600
diff --git a/drivers/net/slhc.c b/drivers/net/slhc.c
index 32e10d3..9ba15d0 100644
--- a/drivers/net/slhc.c
+++ b/drivers/net/slhc.c
@@ -593,7 +593,10 @@ slhc_uncompress(struct slcompress *comp, unsigned char *icp, int isize)
* packet. Recalculate IP checksum (but not TCP checksum).
*/
- len = isize - (cp - icp) + hdrlen;
+ len = isize - (cp - icp);
+ if (len < 0)
+ goto bad;
+ len += hdrlen;
ip->tot_len = htons(len);
ip->check = 0;
diff --git a/drivers/net/slip.c b/drivers/net/slip.c
index 0c3720f..bf8410a 100644
--- a/drivers/net/slip.c
+++ b/drivers/net/slip.c
@@ -20,6 +20,8 @@
*/
#include <asm/segment.h>
#include <asm/system.h>
+
+#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
@@ -47,7 +49,6 @@
#include "slip.h"
#include "slhc.h"
-
#define SLIP_VERSION "0.7.5"
/* Define some IP layer stuff. Not all systems have it. */
diff --git a/include/linux/in.h b/include/linux/in.h
index c3c656b..7ea0923 100644
--- a/include/linux/in.h
+++ b/include/linux/in.h
@@ -124,9 +124,9 @@ extern unsigned short int htons(unsigned short int);
static __inline__ unsigned long int
__ntohl(unsigned long int x)
{
- __asm__("xchgb %l0,%h0\n\t" /* swap lower bytes */
+ __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */
"rorl $16,%0\n\t" /* swap words */
- "xchgb %l0,%h0" /* swap higher bytes */
+ "xchgb %b0,%h0" /* swap higher bytes */
:"=q" (x)
: "0" (x));
return x;
@@ -144,9 +144,9 @@ __ntohs(unsigned short int x)
static __inline__ unsigned long int
__htonl(unsigned long int x)
{
- __asm__("xchgb %l0,%h0\n\t" /* swap lower bytes */
+ __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */
"rorl $16,%0\n\t" /* swap words */
- "xchgb %l0,%h0" /* swap higher bytes */
+ "xchgb %b0,%h0" /* swap higher bytes */
:"=q" (x)
: "0" (x));
return x;
diff --git a/kernel/sched.c b/kernel/sched.c
index 7a9a01d..809329b 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -533,6 +533,9 @@ static void second_overflow(void)
*/
static void timer_bh(void * unused)
{
+ unsigned long mask;
+ struct timer_struct *tp;
+
cli();
while (next_timer && next_timer->expires == 0) {
void (*fn)(unsigned long) = next_timer->function;
@@ -543,6 +546,18 @@ static void timer_bh(void * unused)
cli();
}
sti();
+
+ for (mask = 1, tp = timer_table+0 ; mask ; tp++,mask += mask) {
+ if (mask > timer_active)
+ break;
+ if (!(mask & timer_active))
+ continue;
+ if (tp->expires > jiffies)
+ continue;
+ timer_active &= ~mask;
+ tp->fn();
+ sti();
+ }
}
/*
@@ -554,7 +569,7 @@ static void timer_bh(void * unused)
static void do_timer(struct pt_regs * regs)
{
unsigned long mask;
- struct timer_struct *tp = timer_table+0;
+ struct timer_struct *tp;
long ltemp;
@@ -636,16 +651,14 @@ static void do_timer(struct pt_regs * regs)
current->it_prof_value = current->it_prof_incr;
send_sig(SIGPROF,current,1);
}
- for (mask = 1 ; mask ; tp++,mask += mask) {
+ for (mask = 1, tp = timer_table+0 ; mask ; tp++,mask += mask) {
if (mask > timer_active)
break;
if (!(mask & timer_active))
continue;
if (tp->expires > jiffies)
continue;
- timer_active &= ~mask;
- tp->fn();
- sti();
+ mark_bh(TIMER_BH);
}
cli();
itimer_ticks++;