Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
98c4b45f
Commit
98c4b45f
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 1.2.4
parent
d0a516d5
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
242 additions
and
111 deletions
+242
-111
Makefile
Makefile
+1
-1
README
README
+2
-2
drivers/block/README.aztcd
drivers/block/README.aztcd
+1
-1
drivers/block/blk.h
drivers/block/blk.h
+0
-5
drivers/block/floppy.c
drivers/block/floppy.c
+30
-5
drivers/block/hd.c
drivers/block/hd.c
+2
-0
drivers/block/ll_rw_blk.c
drivers/block/ll_rw_blk.c
+44
-17
drivers/net/README.arcnet-jumpers
drivers/net/README.arcnet-jumpers
+37
-37
drivers/net/arcnet.c
drivers/net/arcnet.c
+1
-1
drivers/net/ne.c
drivers/net/ne.c
+13
-2
drivers/scsi/st.c
drivers/scsi/st.c
+1
-1
fs/ext2/CHANGES
fs/ext2/CHANGES
+1
-1
fs/ext2/truncate.c
fs/ext2/truncate.c
+1
-1
fs/hpfs/hpfs.h
fs/hpfs/hpfs.h
+6
-4
fs/hpfs/hpfs_caps.c
fs/hpfs/hpfs_caps.c
+21
-12
fs/namei.c
fs/namei.c
+1
-1
fs/proc/array.c
fs/proc/array.c
+3
-2
include/linux/pci.h
include/linux/pci.h
+37
-6
include/linux/sched.h
include/linux/sched.h
+2
-0
kernel/exit.c
kernel/exit.c
+1
-0
kernel/fork.c
kernel/fork.c
+4
-0
kernel/ksyms.c
kernel/ksyms.c
+7
-0
kernel/sched.c
kernel/sched.c
+6
-2
mm/memory.c
mm/memory.c
+2
-2
mm/swap.c
mm/swap.c
+1
-1
net/inet/icmp.c
net/inet/icmp.c
+1
-1
net/inet/ip.c
net/inet/ip.c
+3
-2
net/inet/ipx.c
net/inet/ipx.c
+13
-4
No files found.
Makefile
View file @
98c4b45f
VERSION
=
1
PATCHLEVEL
=
2
SUBLEVEL
=
3
SUBLEVEL
=
4
ARCH
=
i386
...
...
README
View file @
98c4b45f
...
...
@@ -58,8 +58,8 @@ INSTALLING the kernel:
cd /usr/include
rm -rf linux
rm -rf asm
ln -s /usr/src/linux/include/linux
.
ln -s /usr/src/linux/include/asm-i386
.
ln -s /usr/src/linux/include/linux
linux
ln -s /usr/src/linux/include/asm-i386
asm
- make sure you have no stale .o files and dependencies lying around:
...
...
drivers/block/README.aztcd
View file @
98c4b45f
...
...
@@ -129,7 +129,7 @@ during runtime via insmod and rmmod. To build aztcd as a loadable module you
must *not* configure your kernel for AZTECH support. But you need to have
the ISO9660-filesystem included! So rebuild your kernel, if necessary.
Now edit the base adress of your AZTECH interface card in
Now edit the base ad
d
ress of your AZTECH interface card in
/usr/src/linux/include/linux/aztcd.h to the appropriate value. Then change
to /usr/src/linux and do a
make modules
...
...
drivers/block/blk.h
View file @
98c4b45f
...
...
@@ -9,11 +9,6 @@
* NR_REQUEST is the number of entries in the request-queue.
* NOTE that writes may use only the low 2/3 of these: reads
* take precedence.
*
* 32 seems to be a reasonable number: enough to get some benefit
* from the elevator-mechanism, but not so much as to lock a lot of
* buffers when they are in the queue. 64 seems to be too many (easily
* long pauses in reading when heavy writing/syncing is going on)
*/
#define NR_REQUEST 64
...
...
drivers/block/floppy.c
View file @
98c4b45f
...
...
@@ -844,6 +844,17 @@ static void floppy_enable_hlt(void)
static
void
setup_DMA
(
void
)
{
#ifdef CONFIG_FLOPPY_SANITY
if
(
raw_cmd
.
length
==
0
){
int
i
;
printk
(
"zero dma transfer size:"
);
for
(
i
=
0
;
i
<
raw_cmd
.
cmd_count
;
i
++
)
printk
(
"%x,"
,
raw_cmd
.
cmd
[
i
]);
printk
(
"
\n
"
);
cont
->
done
(
0
);
FDCS
->
reset
=
1
;
return
;
}
if
((
!
CURRENT
||
CURRENT
->
buffer
!=
current_addr
||
raw_cmd
.
length
>
512
*
CURRENT
->
nr_sectors
)
&&
...
...
@@ -2306,15 +2317,21 @@ static int make_raw_rw_request(void)
* This means we should be able to read a sector even if there
* are other bad sectors on this track.
*/
if
(
(
indirect
-
sector_t
)
*
2
>
(
direct
-
sector_t
)
*
3
&&
*
errors
<
DP
->
max_errors
.
read_track
&&
/*!TESTF( FD_NEED_TWADDLE) &&*/
(
(
!
probing
||
(
DP
->
read_track
&
(
1
<<
DRS
->
probed_format
))))){
if
(
!
direct
||
(
indirect
*
2
>
direct
*
3
&&
*
errors
<
DP
->
max_errors
.
read_track
&&
/*!TESTF( FD_NEED_TWADDLE) &&*/
((
!
probing
||
(
DP
->
read_track
&
(
1
<<
DRS
->
probed_format
)
))))){
max_size
=
CURRENT
->
nr_sectors
;
}
else
{
current_addr
=
CURRENT
->
buffer
;
raw_cmd
.
length
=
current_count_sectors
<<
9
;
if
(
raw_cmd
.
length
==
0
){
DPRINT
(
"zero dma transfer attempted from make_raw_request
\n
"
);
DPRINT3
(
"indirect=%d direct=%d sector_t=%d"
,
indirect
,
direct
,
sector_t
);
return
0
;
}
return
2
;
}
}
...
...
@@ -2411,6 +2428,10 @@ static int make_raw_rw_request(void)
printk
(
"bytes=%ld
\n
"
,
raw_cmd
.
length
>>
9
);
printk
(
"sectors=%ld
\n
"
,
current_count_sectors
);
}
if
(
raw_cmd
.
length
==
0
){
DPRINT
(
"zero dma transfer attempted from make_raw_request
\n
"
);
return
0
;
}
#endif
return
2
;
}
...
...
@@ -2652,6 +2673,10 @@ static int raw_cmd_ioctl(void *param)
if
(
raw_cmd
.
flags
&
(
FD_RAW_WRITE
|
FD_RAW_READ
)){
if
(
count
>
max_buffer_sectors
*
1024
)
return
-
ENOMEM
;
if
(
count
==
0
){
printk
(
"attempt to do a 0 byte dma transfer
\n
"
);
return
-
EINVAL
;
}
buffer_track
=
-
1
;
}
if
(
raw_cmd
.
flags
&
FD_RAW_WRITE
){
...
...
drivers/block/hd.c
View file @
98c4b45f
...
...
@@ -893,6 +893,8 @@ static int hd_open(struct inode * inode, struct file * filp)
int
target
;
target
=
DEVICE_NR
(
inode
->
i_rdev
);
if
(
target
>=
NR_HD
)
return
-
ENODEV
;
while
(
busy
[
target
])
sleep_on
(
&
busy_wait
);
access_count
[
target
]
++
;
...
...
drivers/block/ll_rw_blk.c
View file @
98c4b45f
...
...
@@ -99,6 +99,43 @@ int * blksize_size[MAX_BLKDEV] = { NULL, NULL, };
*/
int
*
hardsect_size
[
MAX_BLKDEV
]
=
{
NULL
,
NULL
,
};
/*
* "plug" the device if there are no outstanding requests: this will
* force the transfer to start only after we have put all the requests
* on the list.
*/
static
void
plug_device
(
struct
blk_dev_struct
*
dev
,
struct
request
*
plug
)
{
unsigned
long
flags
;
plug
->
dev
=
-
1
;
plug
->
cmd
=
-
1
;
plug
->
next
=
NULL
;
save_flags
(
flags
);
cli
();
if
(
!
dev
->
current_request
)
dev
->
current_request
=
plug
;
restore_flags
(
flags
);
}
/*
* remove the plug and let it rip..
*/
static
void
unplug_device
(
struct
blk_dev_struct
*
dev
)
{
struct
request
*
req
;
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
req
=
dev
->
current_request
;
if
(
req
&&
req
->
dev
==
-
1
&&
req
->
cmd
==
-
1
)
{
dev
->
current_request
=
req
->
next
;
(
dev
->
request_fn
)();
}
restore_flags
(
flags
);
}
/*
* look for a free request in the first N entries.
* NOTE: interrupts must be disabled on the way in, and will still
...
...
@@ -139,8 +176,10 @@ static inline struct request * get_request_wait(int n, int dev)
{
register
struct
request
*
req
;
while
((
req
=
get_request
(
n
,
dev
))
==
NULL
)
while
((
req
=
get_request
(
n
,
dev
))
==
NULL
)
{
unplug_device
(
MAJOR
(
dev
)
+
blk_dev
);
sleep_on
(
&
wait_for_request
);
}
return
req
;
}
...
...
@@ -332,6 +371,7 @@ static void make_request(int major,int rw, struct buffer_head * bh)
unlock_buffer
(
bh
);
return
;
}
unplug_device
(
major
+
blk_dev
);
sleep_on
(
&
wait_for_request
);
sti
();
goto
repeat
;
...
...
@@ -395,7 +435,6 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bh[])
{
unsigned
int
major
;
struct
request
plug
;
int
plugged
;
int
correct_size
;
struct
blk_dev_struct
*
dev
;
int
i
;
...
...
@@ -445,15 +484,8 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bh[])
from starting until we have shoved all of the blocks into the
queue, and then we let it rip. */
plugged
=
0
;
cli
();
if
(
!
dev
->
current_request
&&
nr
>
1
)
{
dev
->
current_request
=
&
plug
;
plug
.
dev
=
-
1
;
plug
.
next
=
NULL
;
plugged
=
1
;
}
sti
();
if
(
nr
>
1
)
plug_device
(
dev
,
&
plug
);
for
(
i
=
0
;
i
<
nr
;
i
++
)
{
if
(
bh
[
i
])
{
bh
[
i
]
->
b_req
=
1
;
...
...
@@ -464,12 +496,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bh[])
kstat
.
pgpgout
++
;
}
}
if
(
plugged
)
{
cli
();
dev
->
current_request
=
plug
.
next
;
(
dev
->
request_fn
)();
sti
();
}
unplug_device
(
dev
);
return
;
sorry:
...
...
drivers/net/README.arcnet-jumpers
View file @
98c4b45f
This diff is collapsed.
Click to expand it.
drivers/net/arcnet.c
View file @
98c4b45f
...
...
@@ -291,7 +291,7 @@ struct ClientData
* but WE MUST GET RID OF IT BEFORE SENDING A
* PACKET!!
*/
u_char
saddr
;
/* Source address - nec
ce
sary for IPX protocol */
u_char
saddr
;
/* Source address - nec
es
sary for IPX protocol */
/* data that IS part of real packet */
u_char
protocol_id
,
/* ARC_P_IP, ARC_P_ARP, or ARC_P_RARP */
...
...
drivers/net/ne.c
View file @
98c4b45f
#define rw_bugfix
/* ne.c: A general non-shared-memory NS8390 ethernet driver for linux. */
/*
Written 1992-94 by Donald Becker.
...
...
@@ -348,6 +347,7 @@ ne_block_input(struct device *dev, int count, char *buf, int ring_offset)
encountering problems that it is still here. If you see
this message you either 1) have a slightly incompatible clone
or 2) have noise/speed problems with your bus. */
#ifdef CONFIG_NE_SANITY
if
(
ei_debug
>
1
)
{
/* DMA termination address check... */
int
addr
,
tries
=
20
;
do
{
...
...
@@ -364,6 +364,7 @@ ne_block_input(struct device *dev, int count, char *buf, int ring_offset)
"%#4.4x (expected) vs. %#4.4x (actual).
\n
"
,
dev
->
name
,
ring_offset
+
xfer_count
,
addr
);
}
#endif
ei_status
.
dmaing
&=
~
0x01
;
return
ring_offset
+
count
;
}
...
...
@@ -409,7 +410,14 @@ ne_block_output(struct device *dev, int count,
SLOW_DOWN_IO
;
#endif
/* rw_bugfix */
/* Now the normal output. */
/*
Now the normal output. I believe that if we don't lock this, a
race condition will munge the remote byte count values, and then
the ne2k will hang the machine by holding I/O CH RDY because it
expects more data. Hopefully fixes the lockups. -- Paul Gortmaker.
*/
cli
();
outb_p
(
count
&
0xff
,
nic_base
+
EN0_RCNTLO
);
outb_p
(
count
>>
8
,
nic_base
+
EN0_RCNTHI
);
outb_p
(
0x00
,
nic_base
+
EN0_RSARLO
);
...
...
@@ -421,7 +429,9 @@ ne_block_output(struct device *dev, int count,
}
else
{
outsb
(
NE_BASE
+
NE_DATAPORT
,
buf
,
count
);
}
sti
();
#ifdef CONFIG_NE_SANITY
/* This was for the ALPHA version only, but enough people have
encountering problems that it is still here. */
if
(
ei_debug
>
1
)
{
/* DMA termination address check... */
...
...
@@ -443,6 +453,7 @@ ne_block_output(struct device *dev, int count,
goto
retry
;
}
}
#endif
ei_status
.
dmaing
&=
~
0x02
;
return
;
}
...
...
drivers/scsi/st.c
View file @
98c4b45f
...
...
@@ -572,7 +572,7 @@ scsi_tape_open(struct inode * inode, struct file * filp)
save_flags
(
processor_flags
);
cli
();
if
(
SCpnt
->
request
.
dev
==
dev
)
sleep_on
(
&
(
STp
->
waiting
)
);
restore_flags
(
flags
);
restore_flags
(
processor_
flags
);
if
((
STp
->
buffer
)
->
last_result_fatal
!=
0
)
{
#ifdef DEBUG
...
...
fs/ext2/CHANGES
View file @
98c4b45f
...
...
@@ -2,7 +2,7 @@ Changes from version 0.5 to version 0.5a
========================================
- Zero the partial block following the end of the file when a file
is truncated.
- Dates updated in the copyrig
th
.
- Dates updated in the copyrig
ht
.
- More checks when the filesystem is mounted: the count of blocks,
fragments, and inodes per group is checked against the block size.
- The buffers used by the error routines are now static variables, to
...
...
fs/ext2/truncate.c
View file @
98c4b45f
...
...
@@ -351,7 +351,7 @@ void ext2_truncate (struct inode * inode)
/*
* If the file is not being truncated to a block boundary, the
* contents of the partial block following the end of the file must be
* zero
'ed in case it ever become
accessible again because of
* zero
ed in case it ever becomes
accessible again because of
* subsequent file growth.
*/
offset
=
inode
->
i_size
%
inode
->
i_sb
->
s_blocksize
;
...
...
fs/hpfs/hpfs.h
View file @
98c4b45f
...
...
@@ -134,8 +134,9 @@ struct hpfs_spare_block
/* The code page info pointed to by the spare block consists of an index
block and blocks containing character maps. The following is pretty
sketchy, but Linux doesn't use code pages so it doesn't matter. */
block and blocks containing uppercasing tables. I don't know what
these are for (CHKDSK, maybe?) -- OS/2 does not seem to use them
itself. Linux doesn't use them either. */
/* block pointed to by spareblock->code_page_dir */
...
...
@@ -174,7 +175,7 @@ struct code_page_data
unsigned
short
ix
;
/* index */
unsigned
short
code_page_number
;
/* code page number */
unsigned
short
zero1
;
unsigned
char
map
[
128
];
/*
map
for chars 80..ff */
unsigned
char
map
[
128
];
/*
upcase table
for chars 80..ff */
unsigned
short
zero2
;
}
code_page
[
3
];
unsigned
char
incognita
[
78
];
...
...
@@ -256,7 +257,8 @@ struct hpfs_dirent {
time_t
creation_date
;
/* ctime */
unsigned
ea_size
;
/* total EA length, bytes */
unsigned
char
zero1
;
unsigned
char
locality
;
/* 0=unk 1=seq 2=random 3=both */
unsigned
char
ix
;
/* code page index (of filename), see
struct code_page_data */
unsigned
char
namelen
,
name
[
1
];
/* file name */
/* dnode_secno down; btree down pointer, if present,
follows name on next word boundary, or maybe it
...
...
fs/hpfs/hpfs_caps.c
View file @
98c4b45f
...
...
@@ -27,8 +27,10 @@
necessary case folding this is impossible.)
There is a map from Latin-1 into code page 850 for every printing
character in Latin-1. Most, maybe all, OS/2 installations have code
page 850 available, and surely all (on PC hardware) have 437 available.
character in Latin-1. The NLS documentation of OS/2 shows that
everybody has 850 available unless they don't have Western latin
chars available at all (so fitting them to Linux without Unicode
is a doomed exercise).
It is not clear exactly how HPFS.IFS handles the situation when
multiple code pages are in use. Experiments show that
...
...
@@ -45,8 +47,8 @@
This means, I think, that HPFS.IFS operates in the current code
page, without regard to the uppercasing information recorded in
the tables on the disk. It does record the uppercasing rules
it used, perhaps for
alien operating systems such as us, but it
does not appear to use them
itself.
it used, perhaps for
CHKDSK, but it does not appear to use them
itself.
So: Linux, a Latin-1 system, will operate in code page 850. We
recode between 850 and Latin-1 when dealing with the names actually
...
...
@@ -102,22 +104,29 @@ static const unsigned char tb_latin1_to_cp850[128] =
};
#endif
#define A_GRAVE 0300
#define THORN 0336
#define MULTIPLY 0327
#define a_grave 0340
#define thorn 0376
#define divide 0367
static
inline
unsigned
latin1_upcase
(
unsigned
c
)
{
if
(
c
-
(
unsigned
char
)
'a'
<=
(
unsigned
char
)
'z'
-
(
unsigned
char
)
'a'
||
(
c
-
(
unsigned
char
)
'`'
<=
(
unsigned
char
)
'~'
-
(
unsigned
char
)
'`'
&&
c
!=
(
unsigned
char
)
'w'
))
return
c
-
(
unsigned
char
)
'a'
+
(
unsigned
char
)
'A'
;
if
(
c
-
'a'
<=
'z'
-
'a'
||
(
c
-
a_grave
<=
thorn
-
a_grave
&&
c
!=
divide
))
return
c
-
'a'
+
'A'
;
else
return
c
;
}
static
inline
unsigned
latin1_downcase
(
unsigned
c
)
{
if
(
c
-
(
unsigned
char
)
'A'
<=
(
unsigned
char
)
'Z'
-
(
unsigned
char
)
'A'
||
(
c
-
(
unsigned
char
)
'@'
<=
(
unsigned
char
)
'^'
-
(
unsigned
char
)
'@'
&&
c
!=
(
unsigned
char
)
'W'
))
return
c
+
(
unsigned
char
)
'a'
-
(
unsigned
char
)
'A'
;
if
(
c
-
'A'
<=
'Z'
-
'A'
||
(
c
-
A_GRAVE
<=
THORN
-
A_GRAVE
&&
c
!=
MULTIPLY
))
return
c
+
'a'
-
'A'
;
else
return
c
;
}
...
...
fs/namei.c
View file @
98c4b45f
...
...
@@ -483,7 +483,7 @@ asmlinkage int sys_mknod(const char * filename, int mode, dev_t dev)
case
0
:
mode
|=
S_IFREG
;
break
;
case
S_IFREG
:
case
S_IFCHR
:
case
S_IFBLK
:
case
S_IFIFO
:
case
S_IFREG
:
case
S_IFCHR
:
case
S_IFBLK
:
case
S_IFIFO
:
case
S_IFSOCK
:
break
;
default:
return
-
EINVAL
;
...
...
fs/proc/array.c
View file @
98c4b45f
...
...
@@ -177,10 +177,11 @@ static int get_loadavg(char * buffer)
a
=
avenrun
[
0
]
+
(
FIXED_1
/
200
);
b
=
avenrun
[
1
]
+
(
FIXED_1
/
200
);
c
=
avenrun
[
2
]
+
(
FIXED_1
/
200
);
return
sprintf
(
buffer
,
"%d.%02d %d.%02d %d.%02d
\n
"
,
return
sprintf
(
buffer
,
"%d.%02d %d.%02d %d.%02d
%d/%d
\n
"
,
LOAD_INT
(
a
),
LOAD_FRAC
(
a
),
LOAD_INT
(
b
),
LOAD_FRAC
(
b
),
LOAD_INT
(
c
),
LOAD_FRAC
(
c
));
LOAD_INT
(
c
),
LOAD_FRAC
(
c
),
nr_running
,
nr_tasks
);
}
static
int
get_kstat
(
char
*
buffer
)
...
...
include/linux/pci.h
View file @
98c4b45f
...
...
@@ -200,6 +200,7 @@ struct pci_class_type {
#define PCI_VENDOR_ID_ADAPTEC 0x9004
#define PCI_DEVICE_ID_ADAPTEC_2940 0x7178
#define PCI_DEVICE_ID_ADAPTEC_294x 0x7078
#define PCI_VENDOR_ID_DPT 0x1044
#define PCI_DEVICE_ID_DPT 0xa400
...
...
@@ -220,7 +221,7 @@ struct pci_class_type {
#define PCI_DEVICE_ID_UMC_UM8881F 0x8881
#define PCI_DEVICE_ID_UMC_UM8891A 0x0891
#define PCI_DEVICE_ID_UMC_UM8886F 0x8886
#define PCI_DEVICE_ID_UMC_UM8673F 0x
0101
#define PCI_DEVICE_ID_UMC_UM8673F 0x
886a
#define PCI_VENDOR_ID_DEC 0x1011
#define PCI_DEVICE_ID_DEC_TULIP 0x0002
...
...
@@ -253,12 +254,14 @@ struct pci_class_type {
#define PCI_DEVICE_ID_WEITEK_P9100 0x9100
#define PCI_VENDOR_ID_CIRRUS 0x1013
#define PCI_DEVICE_ID_CIRRUS_5430 0x00A0
#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00A4
#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00A8
#define PCI_DEVICE_ID_CIRRUS_6729 0x1100
#define PCI_VENDOR_ID_BUSLOGIC 0x104B
#define PCI_DEVICE_ID_BUSLOGIC_946C 0x1040
#define PCI_DEVICE_ID_BUSLOGIC_946C_2 0x0140
#define PCI_VENDOR_ID_N9 0x105D
#define PCI_DEVICE_ID_N9_I128 0x2309
...
...
@@ -267,6 +270,7 @@ struct pci_class_type {
#define PCI_DEVICE_ID_AI_M1435 0x1435
#define PCI_VENDOR_ID_AL 0x10b9
#define PCI_DEVICE_ID_AL_M1445 0x1445
#define PCI_DEVICE_ID_AL_M1449 0x1449
#define PCI_DEVICE_ID_AL_M1451 0x1451
#define PCI_DEVICE_ID_AL_M4803 0x5215
...
...
@@ -282,6 +286,7 @@ struct pci_class_type {
#define PCI_VENDOR_ID_VISION 0x1098
#define PCI_DEVICE_ID_VISION_QD8500 0x0001
#define PCI_DEVICE_ID_VISION_QD8580 0x0002
#define PCI_VENDOR_ID_AMD 0x1022
#define PCI_DEVICE_ID_AMD_LANCE 0x2000
...
...
@@ -335,13 +340,25 @@ struct pci_class_type {
#define PCI_VENDOR_ID_CT 0x102c
#define PCI_DEVICE_ID_CT_65545 0x00d8
#define PCI_VENDOR_ID_FUTUR 0x1036
#define PCI_DEVICE_ID_FUTUR_18C30 0x0000
#define PCI_VENDOR_ID_WINBOND 0x10ad
#define PCI_DEVICE_ID_WINBOND_83769 0x0001
#define PCI_VENDOR_ID_3COM 0x10b7
#define PCI_DEVICE_ID_3COM_3C590 0x5900
#define PCI_DEVICE_ID_3COM_3C595TX 0x5950
#define PCI_DEVICE_ID_3COM_3C595T4 0x5951
#define PCI_DEVICE_ID_3COM_3C595MII 0x5952
struct
pci_vendor_type
{
unsigned
short
vendor_id
;
char
*
vendor_name
;
};
#define PCI_VENDOR_NUM 3
6
#define PCI_VENDOR_NUM 3
9
#define PCI_VENDOR_TYPE { \
{PCI_VENDOR_ID_NCR, "NCR"}, \
{PCI_VENDOR_ID_ADAPTEC, "Adaptec"}, \
...
...
@@ -378,7 +395,10 @@ struct pci_vendor_type {
{PCI_VENDOR_ID_EF, "Efficient Networks"}, \
{PCI_VENDOR_ID_HER, "Hercules"}, \
{PCI_VENDOR_ID_ATRONICS, "Atronics"}, \
{PCI_VENDOR_ID_CT, "Chips & Technologies"} \
{PCI_VENDOR_ID_CT, "Chips & Technologies"}, \
{PCI_VENDOR_ID_FUTUR, "Future Domain"},\
{PCI_VENDOR_ID_WINBOND, "Winbond"}, \
{PCI_VENDOR_ID_3COM, "3Com"} \
}
...
...
@@ -397,13 +417,14 @@ struct pci_device_type {
char
*
device_name
;
};
#define PCI_DEVICE_NUM
71
#define PCI_DEVICE_NUM
82
#define PCI_DEVICE_TYPE { \
{0xff, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, "53c810"}, \
{0xff, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C815, "53c815"}, \
{0xff, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C820, "53c820"}, \
{0xff, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C825, "53c825"}, \
{0xff, PCI_VENDOR_ID_ADAPTEC, PCI_DEVICE_ID_ADAPTEC_2940, "2940"}, \
{0xff, PCI_VENDOR_ID_ADAPTEC, PCI_DEVICE_ID_ADAPTEC_294x, "294x"}, \
{0xff, PCI_VENDOR_ID_DPT, PCI_DEVICE_ID_DPT, "SmartCache/Raid"}, \
{0xff, PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_864_1, "Vision 864-P"}, \
{0xff, PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_864_2, "Vision 864-P"}, \
...
...
@@ -435,12 +456,15 @@ struct pci_device_type {
{0xff, PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_M64, "Mach 64"}, \
{0xff, PCI_VENDOR_ID_WEITEK, PCI_DEVICE_ID_WEITEK_P9000, "P9000"}, \
{0xff, PCI_VENDOR_ID_WEITEK, PCI_DEVICE_ID_WEITEK_P9100, "P9100"}, \
{0xff, PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5430, "GD 5430"}, \
{0xff, PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_4, "GD 5434"}, \
{0xff, PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_8, "GD 5434"}, \
{0xff, PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_6729, "CL 6729"}, \
{0xff, PCI_VENDOR_ID_BUSLOGIC,PCI_DEVICE_ID_BUSLOGIC_946C, "946C"}, \
{0xff, PCI_VENDOR_ID_BUSLOGIC,PCI_DEVICE_ID_BUSLOGIC_946C_2, "946C"}, \
{0xff, PCI_VENDOR_ID_N9, PCI_DEVICE_ID_N9_I128, "Imagine 128"}, \
{0xff, PCI_VENDOR_ID_AI, PCI_DEVICE_ID_AI_M1435, "M1435"}, \
{0xff, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1445, "M1445"}, \
{0xff, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1449, "M1449"}, \
{0xff, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1451, "M1451"}, \
{0xff, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M4803, "MS4803"}, \
...
...
@@ -449,7 +473,8 @@ struct pci_device_type {
{0xff, PCI_VENDOR_ID_TSENG, PCI_DEVICE_ID_TSENG_W32P_c, "ET4000W32P rev C"}, \
{0xff, PCI_VENDOR_ID_TSENG, PCI_DEVICE_ID_TSENG_W32P_d, "ET4000W32P rev D"}, \
{0xff, PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_640, "640A"}, \
{0xff, PCI_VENDOR_ID_VISION, PCI_DEVICE_ID_VISION_QD8500, "QD-8500PCI"}, \
{0xff, PCI_VENDOR_ID_VISION, PCI_DEVICE_ID_VISION_QD8500, "QD-8500"}, \
{0xff, PCI_VENDOR_ID_VISION, PCI_DEVICE_ID_VISION_QD8580, "QD-8580"}, \
{0xff, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, "79C970"}, \
{0xff, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_SCSI, "53C974"}, \
{0xff, PCI_VENDOR_ID_VLSI, PCI_DEVICE_ID_VLSI_82C593, "82C593-FC1"}, \
...
...
@@ -469,7 +494,13 @@ struct pci_device_type {
{0xff, PCI_VENDOR_ID_EF, PCI_DEVICE_ID_EF_ATM, "155P-MF1"}, \
{0xff, PCI_VENDOR_ID_HER, PCI_DEVICE_ID_HER_STING, "Stingray"}, \
{0xff, PCI_VENDOR_ID_ATRONICS, PCI_DEVICE_ID_ATRONICS_2015, "IDE-2015PL"}, \
{0xff, PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_65545, "65545"} \
{0xff, PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_65545, "65545"}, \
{0xff, PCI_VENDOR_ID_FUTUR, PCI_DEVICE_ID_FUTUR_18C30, "TMC-18C30"}, \
{0xff, PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_83769, "W83769F"}, \
{0xff, PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590, "3C590 10bT"}, \
{0xff, PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595TX, "3C595 100bTX"}, \
{0xff, PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595T4, "3C595 100bT4"}, \
{0xff, PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595MII, "3C595 100b-MII"} \
}
/* An item of this structure has the following meaning */
...
...
include/linux/sched.h
View file @
98c4b45f
...
...
@@ -47,6 +47,8 @@ extern unsigned long avenrun[]; /* Load averages */
#define CT_TO_SECS(x) ((x) / HZ)
#define CT_TO_USECS(x) (((x) % HZ) * 1000000/HZ)
extern
int
nr_running
,
nr_tasks
;
#define FIRST_TASK task[0]
#define LAST_TASK task[NR_TASKS-1]
...
...
kernel/exit.c
View file @
98c4b45f
...
...
@@ -91,6 +91,7 @@ void release(struct task_struct * p)
}
for
(
i
=
1
;
i
<
NR_TASKS
;
i
++
)
if
(
task
[
i
]
==
p
)
{
nr_tasks
--
;
task
[
i
]
=
NULL
;
REMOVE_LINKS
(
p
);
if
(
STACK_MAGIC
!=
*
(
unsigned
long
*
)
p
->
kernel_stack_page
)
...
...
kernel/fork.c
View file @
98c4b45f
...
...
@@ -24,6 +24,8 @@
#include <asm/segment.h>
#include <asm/system.h>
int
nr_tasks
=
1
;
int
nr_running
=
1
;
long
last_pid
=
0
;
static
int
find_empty_process
(
void
)
...
...
@@ -203,6 +205,7 @@ int do_fork(unsigned long clone_flags, unsigned long usp, struct pt_regs *regs)
p
->
mm
->
swappable
=
0
;
/* don't try to swap it out before it's set up */
task
[
nr
]
=
p
;
SET_LINKS
(
p
);
nr_tasks
++
;
/* copy all the process information */
copy_thread
(
nr
,
clone_flags
,
usp
,
p
,
regs
);
...
...
@@ -221,6 +224,7 @@ int do_fork(unsigned long clone_flags, unsigned long usp, struct pt_regs *regs)
bad_fork_cleanup:
task
[
nr
]
=
NULL
;
REMOVE_LINKS
(
p
);
nr_tasks
--
;
bad_fork_free:
free_page
(
new_stack
);
free_page
((
long
)
p
);
...
...
kernel/ksyms.c
View file @
98c4b45f
...
...
@@ -38,8 +38,10 @@
#include <linux/net.h>
#include <linux/netdevice.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include "../net/inet/protocol.h"
#include "../net/inet/arp.h"
#include "../drivers/net/slhc.h"
#endif
#ifdef CONFIG_PCI
#include <linux/pci.h>
...
...
@@ -271,6 +273,11 @@ struct symbol_table symbol_table = {
#ifdef CONFIG_INET
X
(
inet_add_protocol
),
X
(
inet_del_protocol
),
X
(
slhc_init
),
X
(
slhc_free
),
X
(
slhc_remember
),
X
(
slhc_compress
),
X
(
slhc_uncompress
),
#endif
/* Device callback registration */
X
(
register_netdevice_notifier
),
...
...
kernel/sched.c
View file @
98c4b45f
...
...
@@ -125,6 +125,7 @@ asmlinkage void schedule(void)
itimer_next
=
~
0
;
sti
();
need_resched
=
0
;
nr_running
=
0
;
p
=
&
init_task
;
for
(;;)
{
if
((
p
=
p
->
next_task
)
==
&
init_task
)
...
...
@@ -174,8 +175,11 @@ asmlinkage void schedule(void)
for
(;;)
{
if
((
p
=
p
->
next_task
)
==
&
init_task
)
goto
confuse_gcc2
;
if
(
p
->
state
==
TASK_RUNNING
&&
p
->
counter
>
c
)
c
=
p
->
counter
,
next
=
p
;
if
(
p
->
state
==
TASK_RUNNING
)
{
nr_running
++
;
if
(
p
->
counter
>
c
)
c
=
p
->
counter
,
next
=
p
;
}
}
confuse_gcc2:
if
(
!
c
)
{
...
...
mm/memory.c
View file @
98c4b45f
...
...
@@ -159,7 +159,7 @@ void clear_page_tables(struct task_struct * tsk)
panic
(
"task[0] (swapper) doesn't support exec()
\n
"
);
page_dir
=
pgd_offset
(
tsk
,
0
);
if
(
!
page_dir
||
page_dir
==
swapper_pg_dir
)
{
printk
(
"
Trying to clear kernel page-directory: not good
\n
"
);
printk
(
"
%s trying to clear kernel page-directory: not good
\n
"
,
tsk
->
comm
);
return
;
}
if
(
pgd_inuse
(
page_dir
))
{
...
...
@@ -197,7 +197,7 @@ void free_page_tables(struct task_struct * tsk)
}
page_dir
=
pgd_offset
(
tsk
,
0
);
if
(
!
page_dir
||
page_dir
==
swapper_pg_dir
)
{
printk
(
"
Trying to free kernel page-directory: not good
\n
"
);
printk
(
"
%s trying to free kernel page-directory: not good
\n
"
,
tsk
->
comm
);
return
;
}
SET_PAGE_DIR
(
tsk
,
swapper_pg_dir
);
...
...
mm/swap.c
View file @
98c4b45f
...
...
@@ -523,7 +523,7 @@ static int swap_out(unsigned int priority)
int
loop
,
counter
;
struct
task_struct
*
p
;
counter
=
2
*
NR_TASKS
>>
priority
;
counter
=
2
*
nr_tasks
>>
priority
;
for
(;
counter
>=
0
;
counter
--
)
{
/*
* Check that swap_task is suitable for swapping. If not, look for
...
...
net/inet/icmp.c
View file @
98c4b45f
...
...
@@ -210,7 +210,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, unsigned long info, s
*/
len
=
dev
->
hard_header_len
+
sizeof
(
struct
iphdr
)
+
sizeof
(
struct
icmphdr
)
+
sizeof
(
struct
iphdr
)
+
8
;
/* amount of header to return */
sizeof
(
struct
iphdr
)
+
32
;
/* amount of header to return */
skb
=
(
struct
sk_buff
*
)
alloc_skb
(
len
,
GFP_ATOMIC
);
if
(
skb
==
NULL
)
...
...
net/inet/ip.c
View file @
98c4b45f
...
...
@@ -68,6 +68,7 @@
* Bjorn Ekwall : Removed ip_csum (from slhc.c too)
* Bjorn Ekwall : Moved ip_fast_csum to ip.h (inline!)
* Stefan Becker : Send out ICMP HOST REDIRECT
* Alan Cox : Only send ICMP_REDIRECT if src/dest are the same net.
*
*
* To Fix:
...
...
@@ -1365,11 +1366,11 @@ static void ip_forward(struct sk_buff *skb, struct device *dev, int is_frag)
* arrived upon. We now generate an ICMP HOST REDIRECT giving the route
* we calculated.
*/
#ifdef IP_NO_ICMP_REDIRECT
#ifdef
CONFIG_
IP_NO_ICMP_REDIRECT
if
(
dev
==
dev2
)
return
;
#else
if
(
dev
==
dev2
)
if
(
dev
==
dev2
&&
(
iph
->
saddr
&
dev
->
pa_mask
)
==
(
iph
->
daddr
&
dev
->
pa_mask
)
)
icmp_send
(
skb
,
ICMP_REDIRECT
,
ICMP_REDIR_HOST
,
raddr
,
dev
);
#endif
...
...
net/inet/ipx.c
View file @
98c4b45f
...
...
@@ -431,6 +431,8 @@ ipxitf_adjust_skbuff(ipx_interface *intrfc, struct sk_buff *skb)
/* Hopefully, most cases */
if
(
in_offset
==
out_offset
)
{
skb
->
len
+=
out_offset
;
skb
->
arp
=
skb
->
free
=
1
;
return
skb
;
}
...
...
@@ -440,6 +442,7 @@ ipxitf_adjust_skbuff(ipx_interface *intrfc, struct sk_buff *skb)
skb
->
h
.
raw
=
&
(
skb
->
data
[
out_offset
]);
memmove
(
skb
->
h
.
raw
,
oldraw
,
skb
->
len
);
skb
->
len
+=
out_offset
;
skb
->
arp
=
skb
->
free
=
1
;
return
skb
;
}
...
...
@@ -570,6 +573,11 @@ ipxitf_rcv(ipx_interface *intrfc, struct sk_buff *skb)
}
}
if
(
ipx
->
ipx_dest
.
net
==
0L
)
ipx
->
ipx_dest
.
net
=
intrfc
->
if_netnum
;
if
(
ipx
->
ipx_source
.
net
==
0L
)
ipx
->
ipx_source
.
net
=
intrfc
->
if_netnum
;
if
(
intrfc
->
if_netnum
!=
ipx
->
ipx_dest
.
net
)
{
/* We only route point-to-point packets. */
if
((
skb
->
pkt_type
!=
PACKET_BROADCAST
)
&&
...
...
@@ -1708,9 +1716,9 @@ static int ipx_recvfrom(struct socket *sock, void *ubuf, int size, int noblock,
{
ipx_socket
*
sk
=
(
ipx_socket
*
)
sock
->
data
;
struct
sockaddr_ipx
*
sipx
=
(
struct
sockaddr_ipx
*
)
sip
;
struct
ipx_packet
*
ipx
=
NULL
;
/* FILL ME IN */
struct
ipx_packet
*
ipx
=
NULL
;
int
copied
=
0
;
int
truesize
;
struct
sk_buff
*
skb
;
int
er
;
...
...
@@ -1732,7 +1740,8 @@ static int ipx_recvfrom(struct socket *sock, void *ubuf, int size, int noblock,
return
er
;
ipx
=
(
ipx_packet
*
)(
skb
->
h
.
raw
);
copied
=
ntohs
(
ipx
->
ipx_pktsize
)
-
sizeof
(
ipx_packet
);
truesize
=
ntohs
(
ipx
->
ipx_pktsize
)
-
sizeof
(
ipx_packet
);
copied
=
(
truesize
>
size
)
?
size
:
truesize
;
skb_copy_datagram
(
skb
,
sizeof
(
struct
ipx_packet
),
ubuf
,
copied
);
if
(
sipx
)
...
...
@@ -1744,7 +1753,7 @@ static int ipx_recvfrom(struct socket *sock, void *ubuf, int size, int noblock,
sipx
->
sipx_type
=
ipx
->
ipx_type
;
}
skb_free_datagram
(
skb
);
return
(
copied
);
return
(
truesize
);
}
static
int
ipx_write
(
struct
socket
*
sock
,
char
*
ubuf
,
int
size
,
int
noblock
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment