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
99bb573c
Commit
99bb573c
authored
May 07, 2003
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge nuts.ninka.net:/home/davem/src/BK/network-2.5
into nuts.ninka.net:/home/davem/src/BK/net-2.5
parents
438ea4e5
53ec4969
Changes
25
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
150 additions
and
158 deletions
+150
-158
drivers/atm/eni.c
drivers/atm/eni.c
+13
-8
drivers/atm/he.c
drivers/atm/he.c
+38
-45
drivers/atm/he.h
drivers/atm/he.h
+10
-2
drivers/atm/horizon.c
drivers/atm/horizon.c
+5
-2
drivers/atm/idt77252.c
drivers/atm/idt77252.c
+2
-3
drivers/atm/iphase.c
drivers/atm/iphase.c
+0
-1
drivers/atm/lanai.c
drivers/atm/lanai.c
+0
-1
drivers/atm/nicstar.c
drivers/atm/nicstar.c
+25
-20
drivers/atm/nicstar.h
drivers/atm/nicstar.h
+10
-0
drivers/atm/zatm.c
drivers/atm/zatm.c
+2
-2
drivers/net/acenic.c
drivers/net/acenic.c
+2
-0
include/linux/atmdev.h
include/linux/atmdev.h
+3
-13
net/atm/br2684.c
net/atm/br2684.c
+1
-0
net/atm/clip.c
net/atm/clip.c
+1
-1
net/atm/common.c
net/atm/common.c
+6
-34
net/atm/lec.c
net/atm/lec.c
+1
-1
net/atm/mpc.c
net/atm/mpc.c
+2
-2
net/atm/pppoatm.c
net/atm/pppoatm.c
+0
-1
net/atm/raw.c
net/atm/raw.c
+1
-1
net/atm/signaling.c
net/atm/signaling.c
+1
-1
net/decnet/dn_fib.c
net/decnet/dn_fib.c
+3
-3
net/econet/af_econet.c
net/econet/af_econet.c
+1
-1
net/ipv4/route.c
net/ipv4/route.c
+14
-12
net/ipx/af_ipx.c
net/ipx/af_ipx.c
+9
-3
net/sched/sch_atm.c
net/sched/sch_atm.c
+0
-1
No files found.
drivers/atm/eni.c
View file @
99bb573c
...
...
@@ -1100,9 +1100,9 @@ static enum enq_res do_tx(struct sk_buff *skb)
dma_rd
=
eni_in
(
MID_DMA_RD_TX
);
dma_size
=
3
;
/* JK for descriptor and final fill, plus final size
mis-alignment fix */
DPRINTK
(
"iovcnt = %d
\n
"
,
ATM_SKB
(
skb
)
->
iovcnt
);
if
(
!
ATM_SKB
(
skb
)
->
iovcnt
)
dma_size
+=
5
;
else
dma_size
+=
5
*
ATM_SKB
(
skb
)
->
iovcnt
;
DPRINTK
(
"iovcnt = %d
\n
"
,
skb_shinfo
(
skb
)
->
nr_frags
);
if
(
!
skb_shinfo
(
skb
)
->
nr_frags
)
dma_size
+=
5
;
else
dma_size
+=
5
*
(
skb_shinfo
(
skb
)
->
nr_frags
+
1
)
;
if
(
dma_size
>
TX_DMA_BUF
)
{
printk
(
KERN_CRIT
DEV_LABEL
"(itf %d): needs %d DMA entries "
"(got only %d)
\n
"
,
vcc
->
dev
->
number
,
dma_size
,
TX_DMA_BUF
);
...
...
@@ -1123,15 +1123,20 @@ DPRINTK("iovcnt = %d\n",ATM_SKB(skb)->iovcnt);
MID_DMA_COUNT_SHIFT
)
|
(
tx
->
index
<<
MID_DMA_CHAN_SHIFT
)
|
MID_DT_JK
;
j
++
;
if
(
!
ATM_SKB
(
skb
)
->
iovcnt
)
if
(
!
skb_shinfo
(
skb
)
->
nr_frags
)
if
(
aal5
)
put_dma
(
tx
->
index
,
eni_dev
->
dma
,
&
j
,
paddr
,
skb
->
len
);
else
put_dma
(
tx
->
index
,
eni_dev
->
dma
,
&
j
,
paddr
+
4
,
skb
->
len
-
4
);
else
{
DPRINTK
(
"doing direct send
\n
"
);
/* @@@ well, this doesn't work anyway */
for
(
i
=
0
;
i
<
ATM_SKB
(
skb
)
->
iovcnt
;
i
++
)
for
(
i
=
-
1
;
i
<
skb_shinfo
(
skb
)
->
nr_frags
;
i
++
)
if
(
i
==
-
1
)
put_dma
(
tx
->
index
,
eni_dev
->
dma
,
&
j
,(
unsigned
long
)
((
struct
iovec
*
)
skb
->
data
)[
i
].
iov_base
,
((
struct
iovec
*
)
skb
->
data
)[
i
].
iov_len
);
skb
->
data
,
skb
->
len
-
skb
->
data_len
);
else
put_dma
(
tx
->
index
,
eni_dev
->
dma
,
&
j
,(
unsigned
long
)
skb_shinfo
(
skb
)
->
frags
[
i
].
page
+
skb_shinfo
(
skb
)
->
frags
[
i
].
page_offset
,
skb_shinfo
(
skb
)
->
frags
[
i
].
size
);
}
if
(
skb
->
len
&
3
)
put_dma
(
tx
->
index
,
eni_dev
->
dma
,
&
j
,
zeroes
,
4
-
(
skb
->
len
&
3
));
...
...
drivers/atm/he.c
View file @
99bb573c
...
...
@@ -51,7 +51,7 @@
4096 supported 'connections'
group 0 is used for all traffic
interrupt queue 0 is used for all interrupts
aal0 support
for receive only
aal0 support
(based on work from ulrich.u.muller@nokia.com)
*/
...
...
@@ -114,16 +114,13 @@ void sn_delete_polled_interrupt(int irq);
#include <linux/atm_he.h>
#define hprintk(fmt,args...) printk(DEV_LABEL "%d: " fmt, he_dev->number, args)
#define hprintk1(fmt) printk(DEV_LABEL "%d: " fmt, he_dev->number)
#define hprintk(fmt,args...) printk(KERN_ERR DEV_LABEL "%d: " fmt, he_dev->number, ##args)
#undef DEBUG
#ifdef DEBUG
#define HPRINTK(fmt,args...) hprintk(fmt,args)
#define HPRINTK1(fmt) hprintk1(fmt)
#else
#define HPRINTK(fmt,args...)
#define HPRINTK1(fmt,args...)
#define HPRINTK(fmt,args...) do { } while(0)
#endif
/* DEBUG */
...
...
@@ -131,10 +128,6 @@ void sn_delete_polled_interrupt(int irq);
static
char
*
version
=
"$Id: he.c,v 1.18 2003/05/06 22:57:15 chas Exp $"
;
/* defines */
#define ALIGN_ADDRESS(addr, alignment) \
((((unsigned long) (addr)) + (((unsigned long) (alignment)) - 1)) & ~(((unsigned long) (alignment)) - 1))
/* declarations */
static
int
he_open
(
struct
atm_vcc
*
vcc
,
short
vpi
,
int
vci
);
...
...
@@ -555,7 +548,7 @@ he_init_tpdrq(struct he_dev *he_dev)
CONFIG_TPDRQ_SIZE
*
sizeof
(
struct
he_tpdrq
),
&
he_dev
->
tpdrq_phys
);
if
(
he_dev
->
tpdrq_base
==
NULL
)
{
hprintk
1
(
"failed to alloc tpdrq
\n
"
);
hprintk
(
"failed to alloc tpdrq
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
tpdrq_base
,
0
,
...
...
@@ -799,14 +792,14 @@ he_init_group(struct he_dev *he_dev, int group)
#endif
if
(
he_dev
->
rbps_pool
==
NULL
)
{
hprintk
1
(
"unable to create rbps pages
\n
"
);
hprintk
(
"unable to create rbps pages
\n
"
);
return
-
ENOMEM
;
}
#else
/* !USE_RBPS_POOL */
he_dev
->
rbps_pages
=
pci_alloc_consistent
(
he_dev
->
pci_dev
,
CONFIG_RBPS_SIZE
*
CONFIG_RBPS_BUFSIZE
,
&
he_dev
->
rbps_pages_phys
);
if
(
he_dev
->
rbps_pages
==
NULL
)
{
hprintk
1
(
"unable to create rbps page pool
\n
"
);
hprintk
(
"unable to create rbps page pool
\n
"
);
return
-
ENOMEM
;
}
#endif
/* USE_RBPS_POOL */
...
...
@@ -815,7 +808,7 @@ he_init_group(struct he_dev *he_dev, int group)
CONFIG_RBPS_SIZE
*
sizeof
(
struct
he_rbp
),
&
he_dev
->
rbps_phys
);
if
(
he_dev
->
rbps_base
==
NULL
)
{
hprintk
1
(
"failed to alloc rbps
\n
"
);
hprintk
(
"failed to alloc rbps
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
rbps_base
,
0
,
CONFIG_RBPS_SIZE
*
sizeof
(
struct
he_rbp
));
...
...
@@ -871,7 +864,7 @@ he_init_group(struct he_dev *he_dev, int group)
#endif
if
(
he_dev
->
rbpl_pool
==
NULL
)
{
hprintk
1
(
"unable to create rbpl pool
\n
"
);
hprintk
(
"unable to create rbpl pool
\n
"
);
return
-
ENOMEM
;
}
#else
/* !USE_RBPL_POOL */
...
...
@@ -879,7 +872,7 @@ he_init_group(struct he_dev *he_dev, int group)
CONFIG_RBPL_SIZE
*
CONFIG_RBPL_BUFSIZE
,
&
he_dev
->
rbpl_pages_phys
);
if
(
he_dev
->
rbpl_pages
==
NULL
)
{
hprintk
1
(
"unable to create rbpl pages
\n
"
);
hprintk
(
"unable to create rbpl pages
\n
"
);
return
-
ENOMEM
;
}
#endif
/* USE_RBPL_POOL */
...
...
@@ -888,7 +881,7 @@ he_init_group(struct he_dev *he_dev, int group)
CONFIG_RBPL_SIZE
*
sizeof
(
struct
he_rbp
),
&
he_dev
->
rbpl_phys
);
if
(
he_dev
->
rbpl_base
==
NULL
)
{
hprintk
1
(
"failed to alloc rbpl
\n
"
);
hprintk
(
"failed to alloc rbpl
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
rbpl_base
,
0
,
CONFIG_RBPL_SIZE
*
sizeof
(
struct
he_rbp
));
...
...
@@ -932,7 +925,7 @@ he_init_group(struct he_dev *he_dev, int group)
CONFIG_RBRQ_SIZE
*
sizeof
(
struct
he_rbrq
),
&
he_dev
->
rbrq_phys
);
if
(
he_dev
->
rbrq_base
==
NULL
)
{
hprintk
1
(
"failed to allocate rbrq
\n
"
);
hprintk
(
"failed to allocate rbrq
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
rbrq_base
,
0
,
CONFIG_RBRQ_SIZE
*
sizeof
(
struct
he_rbrq
));
...
...
@@ -945,7 +938,7 @@ he_init_group(struct he_dev *he_dev, int group)
G0_RBRQ_Q
+
(
group
*
16
));
if
(
irq_coalesce
)
{
hprintk
1
(
"coalescing interrupts
\n
"
);
hprintk
(
"coalescing interrupts
\n
"
);
he_writel
(
he_dev
,
RBRQ_TIME
(
768
)
|
RBRQ_COUNT
(
7
),
G0_RBRQ_I
+
(
group
*
16
));
}
...
...
@@ -959,7 +952,7 @@ he_init_group(struct he_dev *he_dev, int group)
CONFIG_TBRQ_SIZE
*
sizeof
(
struct
he_tbrq
),
&
he_dev
->
tbrq_phys
);
if
(
he_dev
->
tbrq_base
==
NULL
)
{
hprintk
1
(
"failed to allocate tbrq
\n
"
);
hprintk
(
"failed to allocate tbrq
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
tbrq_base
,
0
,
CONFIG_TBRQ_SIZE
*
sizeof
(
struct
he_tbrq
));
...
...
@@ -986,7 +979,7 @@ he_init_irq(struct he_dev *he_dev)
(
CONFIG_IRQ_SIZE
+
1
)
*
sizeof
(
struct
he_irq
),
&
he_dev
->
irq_phys
);
if
(
he_dev
->
irq_base
==
NULL
)
{
hprintk
1
(
"failed to allocate irq
\n
"
);
hprintk
(
"failed to allocate irq
\n
"
);
return
-
ENOMEM
;
}
he_dev
->
irq_tailoffset
=
(
unsigned
*
)
...
...
@@ -1074,32 +1067,32 @@ he_start(struct atm_dev *dev)
/* 4.3 pci bus controller-specific initialization */
if
(
pci_read_config_dword
(
pci_dev
,
GEN_CNTL_0
,
&
gen_cntl_0
)
!=
0
)
{
hprintk
1
(
"can't read GEN_CNTL_0
\n
"
);
hprintk
(
"can't read GEN_CNTL_0
\n
"
);
return
-
EINVAL
;
}
gen_cntl_0
|=
(
MRL_ENB
|
MRM_ENB
|
IGNORE_TIMEOUT
);
if
(
pci_write_config_dword
(
pci_dev
,
GEN_CNTL_0
,
gen_cntl_0
)
!=
0
)
{
hprintk
1
(
"can't write GEN_CNTL_0.
\n
"
);
hprintk
(
"can't write GEN_CNTL_0.
\n
"
);
return
-
EINVAL
;
}
if
(
pci_read_config_word
(
pci_dev
,
PCI_COMMAND
,
&
command
)
!=
0
)
{
hprintk
1
(
"can't read PCI_COMMAND.
\n
"
);
hprintk
(
"can't read PCI_COMMAND.
\n
"
);
return
-
EINVAL
;
}
command
|=
(
PCI_COMMAND_MEMORY
|
PCI_COMMAND_MASTER
|
PCI_COMMAND_INVALIDATE
);
if
(
pci_write_config_word
(
pci_dev
,
PCI_COMMAND
,
command
)
!=
0
)
{
hprintk
1
(
"can't enable memory.
\n
"
);
hprintk
(
"can't enable memory.
\n
"
);
return
-
EINVAL
;
}
if
(
pci_read_config_byte
(
pci_dev
,
PCI_CACHE_LINE_SIZE
,
&
cache_size
))
{
hprintk
1
(
"can't read cache line size?
\n
"
);
hprintk
(
"can't read cache line size?
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1112,7 +1105,7 @@ he_start(struct atm_dev *dev)
if
(
pci_read_config_byte
(
pci_dev
,
PCI_LATENCY_TIMER
,
&
timer
))
{
hprintk
1
(
"can't read latency timer?
\n
"
);
hprintk
(
"can't read latency timer?
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1134,7 +1127,7 @@ he_start(struct atm_dev *dev)
}
if
(
!
(
he_dev
->
membase
=
(
unsigned
long
)
ioremap
(
he_dev
->
membase
,
HE_REGMAP_SIZE
)))
{
hprintk
1
(
"can't set up page mapping
\n
"
);
hprintk
(
"can't set up page mapping
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1146,7 +1139,7 @@ he_start(struct atm_dev *dev)
status
=
he_readl
(
he_dev
,
RESET_CNTL
);
if
((
status
&
BOARD_RST_STATUS
)
==
0
)
{
hprintk
1
(
"reset failed
\n
"
);
hprintk
(
"reset failed
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1159,11 +1152,11 @@ he_start(struct atm_dev *dev)
if
(
disable64
==
1
)
{
hprintk
1
(
"disabling 64-bit pci bus transfers
\n
"
);
hprintk
(
"disabling 64-bit pci bus transfers
\n
"
);
gen_cntl_0
&=
~
ENBL_64
;
}
if
(
gen_cntl_0
&
ENBL_64
)
hprintk
1
(
"64-bit transfers enabled
\n
"
);
if
(
gen_cntl_0
&
ENBL_64
)
hprintk
(
"64-bit transfers enabled
\n
"
);
pci_write_config_dword
(
pci_dev
,
GEN_CNTL_0
,
gen_cntl_0
);
...
...
@@ -1535,7 +1528,7 @@ he_start(struct atm_dev *dev)
#endif
if
(
he_dev
->
tpd_pool
==
NULL
)
{
hprintk
1
(
"unable to create tpd pci_pool
\n
"
);
hprintk
(
"unable to create tpd pci_pool
\n
"
);
return
-
ENOMEM
;
}
...
...
@@ -1592,7 +1585,7 @@ he_start(struct atm_dev *dev)
sizeof
(
struct
he_hsp
),
&
he_dev
->
hsp_phys
);
if
(
he_dev
->
hsp
==
NULL
)
{
hprintk
1
(
"failed to allocate host status page
\n
"
);
hprintk
(
"failed to allocate host status page
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
hsp
,
0
,
sizeof
(
struct
he_hsp
));
...
...
@@ -1632,7 +1625,7 @@ he_start(struct atm_dev *dev)
(
1
<<
(
he_dev
->
vcibits
+
he_dev
->
vpibits
)),
GFP_KERNEL
);
if
(
he_dev
->
he_vcc_table
==
NULL
)
{
hprintk
1
(
"failed to alloc he_vcc_table
\n
"
);
hprintk
(
"failed to alloc he_vcc_table
\n
"
);
return
-
ENOMEM
;
}
memset
(
he_dev
->
he_vcc_table
,
0
,
sizeof
(
struct
he_vcc_table
)
*
...
...
@@ -1868,7 +1861,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
struct
sk_buff
*
skb
;
struct
atm_vcc
*
vcc
=
NULL
;
struct
he_vcc
*
he_vcc
;
struct
iovec
*
iov
;
struct
he_
iovec
*
iov
;
int
pdus_assembled
=
0
;
int
updated
=
0
;
...
...
@@ -1934,7 +1927,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
goto
return_host_buffers
;
}
he_vcc
->
iov_tail
->
iov_base
=
(
void
*
)
RBRQ_ADDR
(
he_dev
->
rbrq_head
);
he_vcc
->
iov_tail
->
iov_base
=
RBRQ_ADDR
(
he_dev
->
rbrq_head
);
he_vcc
->
iov_tail
->
iov_len
=
buf_len
;
he_vcc
->
pdu_len
+=
buf_len
;
++
he_vcc
->
iov_tail
;
...
...
@@ -1948,7 +1941,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
}
#ifdef notdef
if
(
he_vcc
->
iov_tail
-
he_vcc
->
iov_head
>
32
)
if
(
(
he_vcc
->
iov_tail
-
he_vcc
->
iov_head
)
>
HE_MAXIOV
)
{
hprintk
(
"iovec full! cid 0x%x
\n
"
,
cid
);
goto
return_host_buffers
;
...
...
@@ -2000,7 +1993,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
iov
<
he_vcc
->
iov_tail
;
++
iov
)
{
#ifdef USE_RBPS
if
(
(
u32
)
iov
->
iov_base
&
RBP_SMALLBUF
)
if
(
iov
->
iov_base
&
RBP_SMALLBUF
)
memcpy
(
skb_put
(
skb
,
iov
->
iov_len
),
he_dev
->
rbps_virt
[
RBP_INDEX
(
iov
->
iov_base
)].
virt
,
iov
->
iov_len
);
else
...
...
@@ -2055,7 +2048,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
iov
<
he_vcc
->
iov_tail
;
++
iov
)
{
#ifdef USE_RBPS
if
(
(
u32
)
iov
->
iov_base
&
RBP_SMALLBUF
)
if
(
iov
->
iov_base
&
RBP_SMALLBUF
)
rbp
=
&
he_dev
->
rbps_base
[
RBP_INDEX
(
iov
->
iov_base
)];
else
#endif
...
...
@@ -2309,13 +2302,13 @@ he_tasklet(unsigned long data)
he_dev
->
atm_dev
->
phy
->
interrupt
(
he_dev
->
atm_dev
);
HE_SPIN_LOCK
(
he_dev
,
flags
);
#endif
HPRINTK
1
(
"phy interrupt
\n
"
);
HPRINTK
(
"phy interrupt
\n
"
);
break
;
case
ITYPE_OTHER
:
switch
(
type
|
group
)
{
case
ITYPE_PARITY
:
hprintk
1
(
"parity error
\n
"
);
hprintk
(
"parity error
\n
"
);
break
;
case
ITYPE_ABORT
:
hprintk
(
"abort 0x%x
\n
"
,
he_readl
(
he_dev
,
ABORT_ADDR
));
...
...
@@ -2387,7 +2380,7 @@ he_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
if
(
he_dev
->
irq_tail
==
he_dev
->
irq_head
)
{
HPRINTK
1
(
"tailoffset not updated?
\n
"
);
HPRINTK
(
"tailoffset not updated?
\n
"
);
he_dev
->
irq_tail
=
(
struct
he_irq
*
)
((
unsigned
long
)
he_dev
->
irq_base
|
((
he_readl
(
he_dev
,
IRQ0_BASE
)
&
IRQ_MASK
)
<<
2
));
(
void
)
he_readl
(
he_dev
,
INT_FIFO
);
/* 8.1.2 controller errata */
...
...
@@ -2395,7 +2388,7 @@ he_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
#ifdef DEBUG
if
(
he_dev
->
irq_head
==
he_dev
->
irq_tail
/* && !IRQ_PENDING */
)
hprintk
1
(
"spurious (or shared) interrupt?
\n
"
);
hprintk
(
"spurious (or shared) interrupt?
\n
"
);
#endif
if
(
he_dev
->
irq_head
!=
he_dev
->
irq_tail
)
...
...
@@ -2527,7 +2520,7 @@ he_open(struct atm_vcc *vcc, short vpi, int vci)
he_vcc
=
(
struct
he_vcc
*
)
kmalloc
(
sizeof
(
struct
he_vcc
),
GFP_ATOMIC
);
if
(
he_vcc
==
NULL
)
{
hprintk
1
(
"unable to allocate he_vcc during open
\n
"
);
hprintk
(
"unable to allocate he_vcc during open
\n
"
);
return
-
ENOMEM
;
}
...
...
@@ -2987,7 +2980,7 @@ he_send(struct atm_vcc *vcc, struct sk_buff *skb)
#ifndef USE_SCATTERGATHER
if
(
skb_shinfo
(
skb
)
->
nr_frags
)
{
hprintk
1
(
"no scatter/gather support
\n
"
);
hprintk
(
"no scatter/gather support
\n
"
);
if
(
vcc
->
pop
)
vcc
->
pop
(
vcc
,
skb
);
else
...
...
drivers/atm/he.h
View file @
99bb573c
...
...
@@ -355,10 +355,18 @@ struct he_dev {
struct
he_dev
*
next
;
};
struct
he_iovec
{
u32
iov_base
;
u32
iov_len
;
};
#define HE_MAXIOV 20
struct
he_vcc
{
struct
iovec
iov_head
[
32
];
struct
iovec
*
iov_tail
;
struct
he_iovec
iov_head
[
HE_MAXIOV
];
struct
he_
iovec
*
iov_tail
;
int
pdu_len
;
int
rc_index
;
...
...
drivers/atm/horizon.c
View file @
99bb573c
...
...
@@ -1768,17 +1768,20 @@ static int hrz_send (struct atm_vcc * atm_vcc, struct sk_buff * skb) {
{
unsigned
int
tx_len
=
skb
->
len
;
unsigned
int
tx_iovcnt
=
ATM_SKB
(
skb
)
->
iovcnt
;
unsigned
int
tx_iovcnt
=
skb_shinfo
(
skb
)
->
nr_frags
;
// remember this so we can free it later
dev
->
tx_skb
=
skb
;
if
(
tx_iovcnt
)
{
// scatter gather transfer
dev
->
tx_regions
=
tx_iovcnt
;
dev
->
tx_iovec
=
(
struct
iovec
*
)
skb
->
data
;
dev
->
tx_iovec
=
0
;
/* @@@ needs rewritten */
dev
->
tx_bytes
=
0
;
PRINTD
(
DBG_TX
|
DBG_BUS
,
"TX start scatter-gather transfer (iovec %p, len %d)"
,
skb
->
data
,
tx_len
);
tx_release
(
dev
);
hrz_kfree_skb
(
skb
);
return
-
EIO
;
}
else
{
// simple transfer
dev
->
tx_regions
=
0
;
...
...
drivers/atm/idt77252.c
View file @
99bb573c
...
...
@@ -1986,7 +1986,7 @@ idt77252_send_skb(struct atm_vcc *vcc, struct sk_buff *skb, int oam)
return
-
EINVAL
;
}
if
(
ATM_SKB
(
skb
)
->
iovcnt
!=
0
)
{
if
(
skb_shinfo
(
skb
)
->
nr_frags
!=
0
)
{
printk
(
"%s: No scatter-gather yet.
\n
"
,
card
->
name
);
atomic_inc
(
&
vcc
->
stats
->
tx_err
);
dev_kfree_skb
(
skb
);
...
...
@@ -2023,8 +2023,7 @@ idt77252_send_oam(struct atm_vcc *vcc, void *cell, int flags)
atomic_inc
(
&
vcc
->
stats
->
tx_err
);
return
-
ENOMEM
;
}
atomic_add
(
skb
->
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
atomic_add
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
memcpy
(
skb_put
(
skb
,
52
),
cell
,
52
);
...
...
drivers/atm/iphase.c
View file @
99bb573c
...
...
@@ -1167,7 +1167,6 @@ static int rx_pkt(struct atm_dev *dev)
skb_put
(
skb
,
len
);
// pwang_test
ATM_SKB
(
skb
)
->
vcc
=
vcc
;
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
ATM_DESC
(
skb
)
=
desc
;
skb_queue_tail
(
&
iadev
->
rx_dma_q
,
skb
);
...
...
drivers/atm/lanai.c
View file @
99bb573c
...
...
@@ -2846,7 +2846,6 @@ static const struct atmdev_ops ops = {
.
phy_get
=
NULL
,
.
feedback
=
NULL
,
.
change_qos
=
lanai_change_qos
,
.
free_rx_skb
=
NULL
,
.
proc_read
=
lanai_proc_read
};
...
...
drivers/atm/nicstar.c
View file @
99bb573c
...
...
@@ -882,9 +882,14 @@ static int __init ns_init_card(int i, struct pci_dev *pcidev)
return
error
;
}
if
(
ns_parse_mac
(
mac
[
i
],
card
->
atmdev
->
esi
))
if
(
ns_parse_mac
(
mac
[
i
],
card
->
atmdev
->
esi
))
{
nicstar_read_eprom
(
card
->
membase
,
NICSTAR_EPROM_MAC_ADDR_OFFSET
,
card
->
atmdev
->
esi
,
6
);
if
(
memcmp
(
card
->
atmdev
->
esi
,
"
\x00\x00\x00\x00\x00\x00
"
,
6
)
==
0
)
{
nicstar_read_eprom
(
card
->
membase
,
NICSTAR_EPROM_MAC_ADDR_OFFSET_ALT
,
card
->
atmdev
->
esi
,
6
);
}
}
printk
(
"nicstar%d: MAC address %02X:%02X:%02X:%02X:%02X:%02X
\n
"
,
i
,
card
->
atmdev
->
esi
[
0
],
card
->
atmdev
->
esi
[
1
],
card
->
atmdev
->
esi
[
2
],
...
...
@@ -1601,9 +1606,9 @@ static void ns_close(struct atm_vcc *vcc)
card
->
index
);
iovb
=
vc
->
rx_iov
;
recycle_iovec_rx_bufs
(
card
,
(
struct
iovec
*
)
iovb
->
data
,
ATM
_SKB
(
iovb
)
->
iovcnt
);
ATM
_SKB
(
iovb
)
->
iovcnt
=
0
;
ATM
_SKB
(
iovb
)
->
vcc
=
NULL
;
NS
_SKB
(
iovb
)
->
iovcnt
);
NS
_SKB
(
iovb
)
->
iovcnt
=
0
;
NS
_SKB
(
iovb
)
->
vcc
=
NULL
;
ns_grab_int_lock
(
card
,
flags
);
recycle_iov_buf
(
card
,
iovb
);
spin_unlock_irqrestore
(
&
card
->
int_lock
,
flags
);
...
...
@@ -1801,7 +1806,7 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
return
-
EINVAL
;
}
if
(
ATM_SKB
(
skb
)
->
iovcnt
!=
0
)
if
(
skb_shinfo
(
skb
)
->
nr_frags
!=
0
)
{
printk
(
"nicstar%d: No scatter-gather yet.
\n
"
,
card
->
index
);
atomic_inc
(
&
vcc
->
stats
->
tx_err
);
...
...
@@ -2226,30 +2231,30 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
}
}
vc
->
rx_iov
=
iovb
;
ATM
_SKB
(
iovb
)
->
iovcnt
=
0
;
NS
_SKB
(
iovb
)
->
iovcnt
=
0
;
iovb
->
len
=
0
;
iovb
->
tail
=
iovb
->
data
=
iovb
->
head
;
ATM
_SKB
(
iovb
)
->
vcc
=
vcc
;
NS
_SKB
(
iovb
)
->
vcc
=
vcc
;
/* IMPORTANT: a pointer to the sk_buff containing the small or large
buffer is stored as iovec base, NOT a pointer to the
small or large buffer itself. */
}
else
if
(
ATM
_SKB
(
iovb
)
->
iovcnt
>=
NS_MAX_IOVECS
)
else
if
(
NS
_SKB
(
iovb
)
->
iovcnt
>=
NS_MAX_IOVECS
)
{
printk
(
"nicstar%d: received too big AAL5 SDU.
\n
"
,
card
->
index
);
atomic_inc
(
&
vcc
->
stats
->
rx_err
);
recycle_iovec_rx_bufs
(
card
,
(
struct
iovec
*
)
iovb
->
data
,
NS_MAX_IOVECS
);
ATM
_SKB
(
iovb
)
->
iovcnt
=
0
;
NS
_SKB
(
iovb
)
->
iovcnt
=
0
;
iovb
->
len
=
0
;
iovb
->
tail
=
iovb
->
data
=
iovb
->
head
;
ATM
_SKB
(
iovb
)
->
vcc
=
vcc
;
NS
_SKB
(
iovb
)
->
vcc
=
vcc
;
}
iov
=
&
((
struct
iovec
*
)
iovb
->
data
)[
ATM
_SKB
(
iovb
)
->
iovcnt
++
];
iov
=
&
((
struct
iovec
*
)
iovb
->
data
)[
NS
_SKB
(
iovb
)
->
iovcnt
++
];
iov
->
iov_base
=
(
void
*
)
skb
;
iov
->
iov_len
=
ns_rsqe_cellcount
(
rsqe
)
*
48
;
iovb
->
len
+=
iov
->
iov_len
;
if
(
ATM
_SKB
(
iovb
)
->
iovcnt
==
1
)
if
(
NS
_SKB
(
iovb
)
->
iovcnt
==
1
)
{
if
(
skb
->
list
!=
&
card
->
sbpool
.
queue
)
{
...
...
@@ -2263,7 +2268,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
return
;
}
}
else
/*
ATM
_SKB(iovb)->iovcnt >= 2 */
else
/*
NS
_SKB(iovb)->iovcnt >= 2 */
{
if
(
skb
->
list
!=
&
card
->
lbpool
.
queue
)
{
...
...
@@ -2272,7 +2277,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
which_list
(
card
,
skb
);
atomic_inc
(
&
vcc
->
stats
->
rx_err
);
recycle_iovec_rx_bufs
(
card
,
(
struct
iovec
*
)
iovb
->
data
,
ATM
_SKB
(
iovb
)
->
iovcnt
);
NS
_SKB
(
iovb
)
->
iovcnt
);
vc
->
rx_iov
=
NULL
;
recycle_iov_buf
(
card
,
iovb
);
return
;
...
...
@@ -2296,7 +2301,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
printk
(
".
\n
"
);
atomic_inc
(
&
vcc
->
stats
->
rx_err
);
recycle_iovec_rx_bufs
(
card
,
(
struct
iovec
*
)
iovb
->
data
,
ATM
_SKB
(
iovb
)
->
iovcnt
);
NS
_SKB
(
iovb
)
->
iovcnt
);
vc
->
rx_iov
=
NULL
;
recycle_iov_buf
(
card
,
iovb
);
return
;
...
...
@@ -2304,7 +2309,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
/* By this point we (hopefully) have a complete SDU without errors. */
if
(
ATM
_SKB
(
iovb
)
->
iovcnt
==
1
)
/* Just a small buffer */
if
(
NS
_SKB
(
iovb
)
->
iovcnt
==
1
)
/* Just a small buffer */
{
/* skb points to a small buffer */
if
(
!
atm_charge
(
vcc
,
skb
->
truesize
))
...
...
@@ -2326,7 +2331,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
atomic_inc
(
&
vcc
->
stats
->
rx
);
}
}
else
if
(
ATM
_SKB
(
iovb
)
->
iovcnt
==
2
)
/* One small plus one large buffer */
else
if
(
NS
_SKB
(
iovb
)
->
iovcnt
==
2
)
/* One small plus one large buffer */
{
struct
sk_buff
*
sb
;
...
...
@@ -2403,7 +2408,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
printk
(
"nicstar%d: Out of huge buffers.
\n
"
,
card
->
index
);
atomic_inc
(
&
vcc
->
stats
->
rx_drop
);
recycle_iovec_rx_bufs
(
card
,
(
struct
iovec
*
)
iovb
->
data
,
ATM
_SKB
(
iovb
)
->
iovcnt
);
NS
_SKB
(
iovb
)
->
iovcnt
);
vc
->
rx_iov
=
NULL
;
recycle_iov_buf
(
card
,
iovb
);
return
;
...
...
@@ -2441,7 +2446,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
if
(
!
atm_charge
(
vcc
,
hb
->
truesize
))
{
recycle_iovec_rx_bufs
(
card
,
iov
,
ATM
_SKB
(
iovb
)
->
iovcnt
);
recycle_iovec_rx_bufs
(
card
,
iov
,
NS
_SKB
(
iovb
)
->
iovcnt
);
if
(
card
->
hbpool
.
count
<
card
->
hbnr
.
max
)
{
skb_queue_tail
(
&
card
->
hbpool
.
queue
,
hb
);
...
...
@@ -2464,7 +2469,7 @@ static void dequeue_rx(ns_dev *card, ns_rsqe *rsqe)
0
,
0
);
/* Copy all large buffers to the huge buffer and free them */
for
(
j
=
1
;
j
<
ATM
_SKB
(
iovb
)
->
iovcnt
;
j
++
)
for
(
j
=
1
;
j
<
NS
_SKB
(
iovb
)
->
iovcnt
;
j
++
)
{
lb
=
(
struct
sk_buff
*
)
iov
->
iov_base
;
tocopy
=
MIN
(
remaining
,
iov
->
iov_len
);
...
...
drivers/atm/nicstar.h
View file @
99bb573c
...
...
@@ -96,6 +96,7 @@
/* ESI stuff ******************************************************************/
#define NICSTAR_EPROM_MAC_ADDR_OFFSET 0x6C
#define NICSTAR_EPROM_MAC_ADDR_OFFSET_ALT 0xF6
/* #defines *******************************************************************/
...
...
@@ -749,6 +750,15 @@ typedef struct vc_map
}
vc_map
;
struct
ns_skb_data
{
struct
atm_vcc
*
vcc
;
int
iovcnt
;
};
#define NS_SKB(skb) (((struct ns_skb_data *) (skb)->cb))
typedef
struct
ns_dev
{
int
index
;
/* Card ID to the device driver */
...
...
drivers/atm/zatm.c
View file @
99bb573c
...
...
@@ -827,10 +827,10 @@ static int do_tx(struct sk_buff *skb)
vcc
=
ATM_SKB
(
skb
)
->
vcc
;
zatm_dev
=
ZATM_DEV
(
vcc
->
dev
);
zatm_vcc
=
ZATM_VCC
(
vcc
);
EVENT
(
"iovcnt=%d
\n
"
,
ATM_SKB
(
skb
)
->
iovcnt
,
0
);
EVENT
(
"iovcnt=%d
\n
"
,
skb_shinfo
(
skb
)
->
nr_frags
,
0
);
save_flags
(
flags
);
cli
();
if
(
!
ATM_SKB
(
skb
)
->
iovcnt
)
{
if
(
!
skb_shinfo
(
skb
)
->
nr_frags
)
{
if
(
zatm_vcc
->
txing
==
RING_ENTRIES
-
1
)
{
restore_flags
(
flags
);
return
RING_BUSY
;
...
...
drivers/net/acenic.c
View file @
99bb573c
...
...
@@ -1871,7 +1871,9 @@ static void ace_watchdog(struct net_device *data)
}
else
{
printk
(
KERN_DEBUG
"%s: BUG... transmitter died. Kicking it.
\n
"
,
dev
->
name
);
#if 0
netif_wake_queue(dev);
#endif
}
}
...
...
include/linux/atmdev.h
View file @
99bb573c
...
...
@@ -30,9 +30,6 @@
#define ATM_DS3_PCR (8000*12)
/* DS3: 12 cells in a 125 usec time slot */
#define ATM_PDU_OVHD 0
/* number of bytes to charge against buffer
quota per PDU */
#define atm_sk(__sk) ((struct atm_vcc *)(__sk)->protinfo)
#define ATM_SD(s) (atm_sk((s)->sk))
...
...
@@ -289,10 +286,6 @@ struct atm_vcc {
struct
atm_sap
sap
;
/* SAP */
void
(
*
push
)(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
void
(
*
pop
)(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
/* optional */
struct
sk_buff
*
(
*
alloc_tx
)(
struct
atm_vcc
*
vcc
,
unsigned
int
size
);
/* TX allocation routine - can be */
/* modified by protocol or by driver.*/
/* NOTE: this interface will change */
int
(
*
push_oam
)(
struct
atm_vcc
*
vcc
,
void
*
cell
);
int
(
*
send
)(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
void
*
dev_data
;
/* per-device data */
...
...
@@ -378,8 +371,6 @@ struct atmdev_ops { /* only send is required */
void
(
*
feedback
)(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
,
unsigned
long
start
,
unsigned
long
dest
,
int
len
);
int
(
*
change_qos
)(
struct
atm_vcc
*
vcc
,
struct
atm_qos
*
qos
,
int
flags
);
void
(
*
free_rx_skb
)(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
/* @@@ temporary hack */
int
(
*
proc_read
)(
struct
atm_dev
*
dev
,
loff_t
*
pos
,
char
*
page
);
struct
module
*
owner
;
};
...
...
@@ -394,7 +385,6 @@ struct atmphy_ops {
struct
atm_skb_data
{
struct
atm_vcc
*
vcc
;
/* ATM VCC */
int
iovcnt
;
/* 0 for "normal" operation */
unsigned
long
atm_options
;
/* ATM layer options */
};
...
...
@@ -421,19 +411,19 @@ static __inline__ int atm_guess_pdu2truesize(int pdu_size)
static
__inline__
void
atm_force_charge
(
struct
atm_vcc
*
vcc
,
int
truesize
)
{
atomic_add
(
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
rmem_alloc
);
atomic_add
(
truesize
,
&
vcc
->
sk
->
rmem_alloc
);
}
static
__inline__
void
atm_return
(
struct
atm_vcc
*
vcc
,
int
truesize
)
{
atomic_sub
(
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
rmem_alloc
);
atomic_sub
(
truesize
,
&
vcc
->
sk
->
rmem_alloc
);
}
static
__inline__
int
atm_may_send
(
struct
atm_vcc
*
vcc
,
unsigned
int
size
)
{
return
size
+
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
)
+
ATM_PDU_OVHD
<
vcc
->
sk
->
sndbuf
;
return
(
size
+
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
))
<
vcc
->
sk
->
sndbuf
;
}
...
...
net/atm/br2684.c
View file @
99bb573c
...
...
@@ -481,6 +481,7 @@ static void br2684_push(struct atm_vcc *atmvcc, struct sk_buff *skb)
}
brdev
->
stats
.
rx_packets
++
;
brdev
->
stats
.
rx_bytes
+=
skb
->
len
;
memset
(
ATM_SKB
(
skb
),
0
,
sizeof
(
struct
atm_skb_data
));
netif_rx
(
skb
);
}
...
...
net/atm/clip.c
View file @
99bb573c
...
...
@@ -223,6 +223,7 @@ void clip_push(struct atm_vcc *vcc,struct sk_buff *skb)
clip_vcc
->
last_use
=
jiffies
;
PRIV
(
skb
->
dev
)
->
stats
.
rx_packets
++
;
PRIV
(
skb
->
dev
)
->
stats
.
rx_bytes
+=
skb
->
len
;
memset
(
ATM_SKB
(
skb
),
0
,
sizeof
(
struct
atm_skb_data
));
netif_rx
(
skb
);
}
...
...
@@ -432,7 +433,6 @@ static int clip_start_xmit(struct sk_buff *skb,struct net_device *dev)
((
u16
*
)
here
)[
3
]
=
skb
->
protocol
;
}
atomic_add
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
ATM_SKB
(
skb
)
->
atm_options
=
vcc
->
atm_options
;
entry
->
vccs
->
last_use
=
jiffies
;
DPRINTK
(
"atm_skb(%p)->vcc(%p)->dev(%p)
\n
"
,
skb
,
vcc
,
vcc
->
dev
);
...
...
net/atm/common.c
View file @
99bb573c
...
...
@@ -98,7 +98,7 @@ static struct sk_buff *alloc_tx(struct atm_vcc *vcc,unsigned int size)
}
while
(
!
(
skb
=
alloc_skb
(
size
,
GFP_KERNEL
)))
schedule
();
DPRINTK
(
"AlTx %d += %d
\n
"
,
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
),
skb
->
truesize
);
atomic_add
(
skb
->
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
wmem_alloc
);
atomic_add
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
return
skb
;
}
...
...
@@ -114,7 +114,6 @@ int atm_create(struct socket *sock,int protocol,int family)
vcc
=
atm_sk
(
sk
);
memset
(
&
vcc
->
flags
,
0
,
sizeof
(
vcc
->
flags
));
vcc
->
dev
=
NULL
;
vcc
->
alloc_tx
=
alloc_tx
;
vcc
->
callback
=
NULL
;
memset
(
&
vcc
->
local
,
0
,
sizeof
(
struct
sockaddr_atmsvc
));
memset
(
&
vcc
->
remote
,
0
,
sizeof
(
struct
sockaddr_atmsvc
));
...
...
@@ -144,9 +143,7 @@ void atm_release_vcc_sk(struct sock *sk,int free_sk)
if
(
vcc
->
push
)
vcc
->
push
(
vcc
,
NULL
);
/* atmarpd has no push */
while
((
skb
=
skb_dequeue
(
&
vcc
->
sk
->
receive_queue
)))
{
atm_return
(
vcc
,
skb
->
truesize
);
if
(
vcc
->
dev
->
ops
->
free_rx_skb
)
vcc
->
dev
->
ops
->
free_rx_skb
(
vcc
,
skb
);
else
kfree_skb
(
skb
);
kfree_skb
(
skb
);
}
spin_lock
(
&
atm_dev_lock
);
fops_put
(
vcc
->
dev
->
ops
);
...
...
@@ -394,31 +391,8 @@ int atm_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
(
unsigned
long
)
buff
,
eff_len
);
DPRINTK
(
"RcvM %d -= %d
\n
"
,
atomic_read
(
&
vcc
->
sk
->
rmem_alloc
),
skb
->
truesize
);
atm_return
(
vcc
,
skb
->
truesize
);
if
(
ATM_SKB
(
skb
)
->
iovcnt
)
{
/* @@@ hack */
/* iovcnt set, use scatter-gather for receive */
int
el
,
cnt
;
struct
iovec
*
iov
=
(
struct
iovec
*
)
skb
->
data
;
unsigned
char
*
p
=
(
unsigned
char
*
)
buff
;
el
=
eff_len
;
error
=
0
;
for
(
cnt
=
0
;
(
cnt
<
ATM_SKB
(
skb
)
->
iovcnt
)
&&
el
;
cnt
++
)
{
/*printk("s-g???: %p -> %p (%d)\n",iov->iov_base,p,iov->iov_len);*/
error
=
copy_to_user
(
p
,
iov
->
iov_base
,
(
iov
->
iov_len
>
el
)
?
el
:
iov
->
iov_len
)
?
-
EFAULT
:
0
;
if
(
error
)
break
;
p
+=
iov
->
iov_len
;
el
-=
(
iov
->
iov_len
>
el
)
?
el
:
iov
->
iov_len
;
iov
++
;
}
if
(
!
vcc
->
dev
->
ops
->
free_rx_skb
)
kfree_skb
(
skb
);
else
vcc
->
dev
->
ops
->
free_rx_skb
(
vcc
,
skb
);
return
error
?
error
:
eff_len
;
}
error
=
copy_to_user
(
buff
,
skb
->
data
,
eff_len
)
?
-
EFAULT
:
0
;
if
(
!
vcc
->
dev
->
ops
->
free_rx_skb
)
kfree_skb
(
skb
);
else
vcc
->
dev
->
ops
->
free_rx_skb
(
vcc
,
skb
);
kfree_skb
(
skb
);
return
error
?
error
:
eff_len
;
}
...
...
@@ -450,7 +424,7 @@ int atm_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
add_wait_queue
(
&
vcc
->
sleep
,
&
wait
);
set_current_state
(
TASK_INTERRUPTIBLE
);
error
=
0
;
while
(
!
(
skb
=
vcc
->
alloc_tx
(
vcc
,
eff
)))
{
while
(
!
(
skb
=
alloc_tx
(
vcc
,
eff
)))
{
if
(
m
->
msg_flags
&
MSG_DONTWAIT
)
{
error
=
-
EAGAIN
;
break
;
...
...
@@ -475,7 +449,6 @@ int atm_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
remove_wait_queue
(
&
vcc
->
sleep
,
&
wait
);
if
(
error
)
return
error
;
skb
->
dev
=
NULL
;
/* for paths shared with net_device interfaces */
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
ATM_SKB
(
skb
)
->
atm_options
=
vcc
->
atm_options
;
if
(
copy_from_user
(
skb_put
(
skb
,
size
),
buff
,
size
))
{
kfree_skb
(
skb
);
...
...
@@ -502,8 +475,7 @@ unsigned int atm_poll(struct file *file,struct socket *sock,poll_table *wait)
mask
|=
POLLHUP
;
if
(
sock
->
state
!=
SS_CONNECTING
)
{
if
(
vcc
->
qos
.
txtp
.
traffic_class
!=
ATM_NONE
&&
vcc
->
qos
.
txtp
.
max_sdu
+
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
)
+
ATM_PDU_OVHD
<=
vcc
->
sk
->
sndbuf
)
vcc
->
qos
.
txtp
.
max_sdu
+
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
)
<=
vcc
->
sk
->
sndbuf
)
mask
|=
POLLOUT
|
POLLWRNORM
;
}
else
if
(
vcc
->
reply
!=
WAITING
)
{
...
...
@@ -570,7 +542,7 @@ int atm_ioctl(struct socket *sock,unsigned int cmd,unsigned long arg)
goto
done
;
}
ret_val
=
put_user
(
vcc
->
sk
->
sndbuf
-
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
)
-
ATM_PDU_OVHD
,
atomic_read
(
&
vcc
->
sk
->
wmem_alloc
),
(
int
*
)
arg
)
?
-
EFAULT
:
0
;
goto
done
;
case
SIOCINQ
:
...
...
net/atm/lec.c
View file @
99bb573c
...
...
@@ -204,7 +204,6 @@ lec_send(struct atm_vcc *vcc, struct sk_buff *skb, struct lec_priv *priv)
if
(
atm_may_send
(
vcc
,
skb
->
len
))
{
atomic_add
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
vcc
=
vcc
;
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
ATM_SKB
(
skb
)
->
atm_options
=
vcc
->
atm_options
;
priv
->
stats
.
tx_packets
++
;
priv
->
stats
.
tx_bytes
+=
skb
->
len
;
...
...
@@ -715,6 +714,7 @@ lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
skb
->
protocol
=
eth_type_trans
(
skb
,
dev
);
priv
->
stats
.
rx_packets
++
;
priv
->
stats
.
rx_bytes
+=
skb
->
len
;
memset
(
ATM_SKB
(
skb
),
0
,
sizeof
(
struct
atm_skb_data
));
netif_rx
(
skb
);
}
}
...
...
net/atm/mpc.c
View file @
99bb573c
...
...
@@ -523,7 +523,6 @@ static int send_via_shortcut(struct sk_buff *skb, struct mpoa_client *mpc)
}
atomic_add
(
skb
->
truesize
,
&
entry
->
shortcut
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
/* just to be safe ... */
ATM_SKB
(
skb
)
->
atm_options
=
entry
->
shortcut
->
atm_options
;
entry
->
shortcut
->
send
(
entry
->
shortcut
,
skb
);
entry
->
packets_fwded
++
;
...
...
@@ -732,6 +731,7 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb)
eg
->
packets_rcvd
++
;
mpc
->
eg_ops
->
put
(
eg
);
memset
(
ATM_SKB
(
skb
),
0
,
sizeof
(
struct
atm_skb_data
));
netif_rx
(
new_skb
);
return
;
...
...
@@ -863,7 +863,7 @@ static int msg_from_mpoad(struct atm_vcc *vcc, struct sk_buff *skb)
struct
mpoa_client
*
mpc
=
find_mpc_by_vcc
(
vcc
);
struct
k_message
*
mesg
=
(
struct
k_message
*
)
skb
->
data
;
atomic_sub
(
skb
->
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
wmem_alloc
);
atomic_sub
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
if
(
mpc
==
NULL
)
{
printk
(
"mpoa: msg_from_mpoad: no mpc found
\n
"
);
...
...
net/atm/pppoatm.c
View file @
99bb573c
...
...
@@ -232,7 +232,6 @@ static int pppoatm_send(struct ppp_channel *chan, struct sk_buff *skb)
return
1
;
}
atomic_add
(
skb
->
truesize
,
&
ATM_SKB
(
skb
)
->
vcc
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
ATM_SKB
(
skb
)
->
atm_options
=
ATM_SKB
(
skb
)
->
vcc
->
atm_options
;
DPRINTK
(
"(unit %d): atm_skb(%p)->vcc(%p)->dev(%p)
\n
"
,
pvcc
->
chan
.
unit
,
skb
,
ATM_SKB
(
skb
)
->
vcc
,
...
...
net/atm/raw.c
View file @
99bb573c
...
...
@@ -37,7 +37,7 @@ void atm_push_raw(struct atm_vcc *vcc,struct sk_buff *skb)
static
void
atm_pop_raw
(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
)
{
DPRINTK
(
"APopR (%d) %d -= %d
\n
"
,
vcc
->
vci
,
vcc
->
sk
->
wmem_alloc
,
skb
->
truesize
);
atomic_sub
(
skb
->
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
wmem_alloc
);
atomic_sub
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
dev_kfree_skb_any
(
skb
);
wake_up
(
&
vcc
->
sleep
);
}
...
...
net/atm/signaling.c
View file @
99bb573c
...
...
@@ -98,7 +98,7 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb)
struct
atm_vcc
*
session_vcc
;
msg
=
(
struct
atmsvc_msg
*
)
skb
->
data
;
atomic_sub
(
skb
->
truesize
+
ATM_PDU_OVHD
,
&
vcc
->
sk
->
wmem_alloc
);
atomic_sub
(
skb
->
truesize
,
&
vcc
->
sk
->
wmem_alloc
);
DPRINTK
(
"sigd_send %d (0x%lx)
\n
"
,(
int
)
msg
->
type
,
(
unsigned
long
)
msg
->
vcc
);
vcc
=
*
(
struct
atm_vcc
**
)
&
msg
->
vcc
;
...
...
net/decnet/dn_fib.c
View file @
99bb573c
...
...
@@ -218,7 +218,7 @@ static int dn_fib_check_nh(const struct rtmsg *r, struct dn_fib_info *fi, struct
if
(
!
(
dev
->
flags
&
IFF_UP
))
return
-
ENETDOWN
;
nh
->
nh_dev
=
dev
;
atomic_inc
(
&
dev
->
refcnt
);
dev_hold
(
dev
);
nh
->
nh_scope
=
RT_SCOPE_LINK
;
return
0
;
}
...
...
@@ -242,7 +242,7 @@ static int dn_fib_check_nh(const struct rtmsg *r, struct dn_fib_info *fi, struct
nh
->
nh_dev
=
DN_FIB_RES_DEV
(
res
);
if
(
nh
->
nh_dev
==
NULL
)
goto
out
;
atomic_inc
(
&
nh
->
nh_dev
->
refcnt
);
dev_hold
(
nh
->
nh_dev
);
err
=
-
ENETDOWN
;
if
(
!
(
nh
->
nh_dev
->
flags
&
IFF_UP
))
goto
out
;
...
...
@@ -262,7 +262,7 @@ static int dn_fib_check_nh(const struct rtmsg *r, struct dn_fib_info *fi, struct
if
(
!
(
dev
->
flags
&
IFF_UP
))
return
-
ENETDOWN
;
nh
->
nh_dev
=
dev
;
atomic_inc
(
&
nh
->
nh_dev
->
refcnt
);
dev_hold
(
nh
->
nh_dev
);
nh
->
nh_scope
=
RT_SCOPE_HOST
;
}
...
...
net/econet/af_econet.c
View file @
99bb573c
...
...
@@ -325,7 +325,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
{
/* Real hardware Econet. We're not worthy etc. */
#ifdef CONFIG_ECONET_NATIVE
atomic_inc
(
&
dev
->
refcnt
);
dev_hold
(
dev
);
skb
=
sock_alloc_send_skb
(
sk
,
len
+
dev
->
hard_header_len
+
15
,
msg
->
msg_flags
&
MSG_DONTWAIT
,
&
err
);
...
...
net/ipv4/route.c
View file @
99bb573c
...
...
@@ -431,16 +431,17 @@ static __inline__ int rt_valuable(struct rtable *rth)
rth
->
u
.
dst
.
expires
;
}
static
int
rt_may_expire
(
struct
rtable
*
rth
,
int
tmo1
,
int
tmo2
)
static
int
rt_may_expire
(
struct
rtable
*
rth
,
unsigned
long
tmo1
,
unsigned
long
tmo2
)
{
int
age
;
unsigned
long
age
;
int
ret
=
0
;
if
(
atomic_read
(
&
rth
->
u
.
dst
.
__refcnt
))
goto
out
;
ret
=
1
;
if
(
rth
->
u
.
dst
.
expires
&&
(
long
)(
rth
->
u
.
dst
.
expires
-
jiffies
)
<=
0
)
if
(
rth
->
u
.
dst
.
expires
&&
time_after_eq
(
jiffies
,
rth
->
u
.
dst
.
expires
))
goto
out
;
age
=
jiffies
-
rth
->
u
.
dst
.
lastuse
;
...
...
@@ -462,7 +463,7 @@ static void SMP_TIMER_NAME(rt_check_expire)(unsigned long dummy)
for
(
t
=
ip_rt_gc_interval
<<
rt_hash_log
;
t
>=
0
;
t
-=
ip_rt_gc_timeout
)
{
unsigned
tmo
=
ip_rt_gc_timeout
;
unsigned
long
tmo
=
ip_rt_gc_timeout
;
i
=
(
i
+
1
)
&
rt_hash_mask
;
rthp
=
&
rt_hash_table
[
i
].
chain
;
...
...
@@ -471,7 +472,7 @@ static void SMP_TIMER_NAME(rt_check_expire)(unsigned long dummy)
while
((
rth
=
*
rthp
)
!=
NULL
)
{
if
(
rth
->
u
.
dst
.
expires
)
{
/* Entry is expired even if it is in use */
if
(
(
long
)(
now
-
rth
->
u
.
dst
.
expires
)
<=
0
)
{
if
(
time_after_eq
(
now
,
rth
->
u
.
dst
.
expires
)
)
{
tmo
>>=
1
;
rthp
=
&
rth
->
u
.
rt_next
;
continue
;
...
...
@@ -489,7 +490,7 @@ static void SMP_TIMER_NAME(rt_check_expire)(unsigned long dummy)
spin_unlock
(
&
rt_hash_table
[
i
].
lock
);
/* Fallback loop breaker. */
if
(
(
jiffies
-
now
)
>
0
)
if
(
time_after
(
jiffies
,
now
)
)
break
;
}
rover
=
i
;
...
...
@@ -591,7 +592,7 @@ static void rt_secret_rebuild(unsigned long dummy)
static
int
rt_garbage_collect
(
void
)
{
static
unsigned
expire
=
RT_GC_TIMEOUT
;
static
unsigned
long
expire
=
RT_GC_TIMEOUT
;
static
unsigned
long
last_gc
;
static
int
rover
;
static
int
equilibrium
;
...
...
@@ -643,7 +644,7 @@ static int rt_garbage_collect(void)
int
i
,
k
;
for
(
i
=
rt_hash_mask
,
k
=
rover
;
i
>=
0
;
i
--
)
{
unsigned
tmo
=
expire
;
unsigned
long
tmo
=
expire
;
k
=
(
k
+
1
)
&
rt_hash_mask
;
rthp
=
&
rt_hash_table
[
k
].
chain
;
...
...
@@ -689,7 +690,7 @@ static int rt_garbage_collect(void)
if
(
atomic_read
(
&
ipv4_dst_ops
.
entries
)
<
ip_rt_max_size
)
goto
out
;
}
while
(
!
in_softirq
()
&&
jiffies
-
now
<
1
);
}
while
(
!
in_softirq
()
&&
time_before_eq
(
jiffies
,
now
)
);
if
(
atomic_read
(
&
ipv4_dst_ops
.
entries
)
<
ip_rt_max_size
)
goto
out
;
...
...
@@ -1067,7 +1068,7 @@ void ip_rt_send_redirect(struct sk_buff *skb)
/* No redirected packets during ip_rt_redirect_silence;
* reset the algorithm.
*/
if
(
jiffies
-
rt
->
u
.
dst
.
rate_last
>
ip_rt_redirect_silence
)
if
(
time_after
(
jiffies
,
rt
->
u
.
dst
.
rate_last
+
ip_rt_redirect_silence
)
)
rt
->
u
.
dst
.
rate_tokens
=
0
;
/* Too many ignored redirects; do not send anything
...
...
@@ -1081,8 +1082,9 @@ void ip_rt_send_redirect(struct sk_buff *skb)
/* Check for load limit; set rate_last to the latest sent
* redirect.
*/
if
(
jiffies
-
rt
->
u
.
dst
.
rate_last
>
(
ip_rt_redirect_load
<<
rt
->
u
.
dst
.
rate_tokens
))
{
if
(
time_after
(
jiffies
,
(
rt
->
u
.
dst
.
rate_last
+
(
ip_rt_redirect_load
<<
rt
->
u
.
dst
.
rate_tokens
))))
{
icmp_send
(
skb
,
ICMP_REDIRECT
,
ICMP_REDIR_HOST
,
rt
->
rt_gateway
);
rt
->
u
.
dst
.
rate_last
=
jiffies
;
++
rt
->
u
.
dst
.
rate_tokens
;
...
...
net/ipx/af_ipx.c
View file @
99bb573c
...
...
@@ -15,7 +15,7 @@
* liability nor provide warranty for any of this software. This material
* is provided as is and at no charge.
*
* Portions Copyright (c) 2000-200
2
Conectiva, Inc. <acme@conectiva.com.br>
* Portions Copyright (c) 2000-200
3
Conectiva, Inc. <acme@conectiva.com.br>
* Neither Arnaldo Carvalho de Melo nor Conectiva, Inc. admit liability nor
* provide warranty for any of this software. This material is provided
* "AS-IS" and at no charge.
...
...
@@ -371,6 +371,7 @@ static void __ipxitf_down(struct ipx_interface *intrfc)
if
(
intrfc
->
if_dev
)
dev_put
(
intrfc
->
if_dev
);
kfree
(
intrfc
);
module_put
(
THIS_MODULE
);
}
static
void
ipxitf_down
(
struct
ipx_interface
*
intrfc
)
...
...
@@ -936,6 +937,7 @@ static struct ipx_interface *ipxitf_alloc(struct net_device *dev, __u32 netnum,
intrfc
->
if_sklist
=
NULL
;
atomic_set
(
&
intrfc
->
refcnt
,
1
);
spin_lock_init
(
&
intrfc
->
if_sklist_lock
);
__module_get
(
THIS_MODULE
);
}
return
intrfc
;
...
...
@@ -2260,9 +2262,9 @@ extern void destroy_8023_client(struct datalink_proto *);
static
unsigned
char
ipx_8022_type
=
0xE0
;
static
unsigned
char
ipx_snap_id
[
5
]
=
{
0x0
,
0x0
,
0x0
,
0x81
,
0x37
};
static
char
ipx_banner
[]
__initdata
=
KERN_INFO
"NET4: Linux IPX 0.5
0
for NET4.0
\n
"
KERN_INFO
"NET4: Linux IPX 0.5
1
for NET4.0
\n
"
KERN_INFO
"IPX Portions Copyright (c) 1995 Caldera, Inc.
\n
"
\
KERN_INFO
"IPX Portions Copyright (c) 2000-200
2
Conectiva, Inc.
\n
"
;
KERN_INFO
"IPX Portions Copyright (c) 2000-200
3
Conectiva, Inc.
\n
"
;
static
char
ipx_EII_err_msg
[]
__initdata
=
KERN_CRIT
"IPX: Unable to register with Ethernet II
\n
"
;
static
char
ipx_8023_err_msg
[]
__initdata
=
...
...
@@ -2310,6 +2312,10 @@ static void __exit ipx_proto_finito(void)
* when a interface is created we increment the module usage count, so
* the module will only be unloaded when there are no more interfaces
*/
if
(
unlikely
(
!
list_empty
(
&
ipx_interfaces
)))
BUG
();
if
(
unlikely
(
!
list_empty
(
&
ipx_routes
)))
BUG
();
ipx_proc_exit
();
ipx_unregister_sysctl
();
...
...
net/sched/sch_atm.c
View file @
99bb573c
...
...
@@ -509,7 +509,6 @@ static void sch_atm_dequeue(unsigned long data)
memcpy
(
skb_push
(
skb
,
flow
->
hdr_len
),
flow
->
hdr
,
flow
->
hdr_len
);
atomic_add
(
skb
->
truesize
,
&
flow
->
vcc
->
sk
->
wmem_alloc
);
ATM_SKB
(
skb
)
->
iovcnt
=
0
;
/* atm.atm_options are already set by atm_tc_enqueue */
(
void
)
flow
->
vcc
->
send
(
flow
->
vcc
,
skb
);
}
...
...
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