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
a407c6e4
Commit
a407c6e4
authored
Jul 13, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
fcbcfef5
ae8f5470
Changes
22
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
345 additions
and
620 deletions
+345
-620
arch/sparc64/defconfig
arch/sparc64/defconfig
+36
-6
arch/sparc64/kernel/binfmt_elf32.c
arch/sparc64/kernel/binfmt_elf32.c
+10
-0
drivers/fc4/fc.c
drivers/fc4/fc.c
+1
-1
drivers/net/bonding.c
drivers/net/bonding.c
+107
-18
drivers/net/sunhme.c
drivers/net/sunhme.c
+1
-1
drivers/net/tg3.c
drivers/net/tg3.c
+111
-506
drivers/net/tg3.h
drivers/net/tg3.h
+1
-42
drivers/scsi/aic7xxx_old.c
drivers/scsi/aic7xxx_old.c
+2
-2
drivers/scsi/pluto.c
drivers/scsi/pluto.c
+3
-3
fs/partitions/check.c
fs/partitions/check.c
+2
-2
fs/quota_v2.c
fs/quota_v2.c
+1
-1
include/asm-sparc/cache.h
include/asm-sparc/cache.h
+1
-0
include/asm-sparc/param.h
include/asm-sparc/param.h
+6
-4
include/asm-sparc64/cache.h
include/asm-sparc64/cache.h
+2
-1
include/asm-sparc64/param.h
include/asm-sparc64/param.h
+6
-4
include/linux/if_vlan.h
include/linux/if_vlan.h
+18
-4
include/linux/netlink.h
include/linux/netlink.h
+8
-0
include/linux/notifier.h
include/linux/notifier.h
+2
-0
include/net/dsfield.h
include/net/dsfield.h
+0
-25
net/core/dst.c
net/core/dst.c
+6
-0
net/netlink/af_netlink.c
net/netlink/af_netlink.c
+19
-0
net/netsyms.c
net/netsyms.c
+2
-0
No files found.
arch/sparc64/defconfig
View file @
a407c6e4
...
@@ -389,10 +389,7 @@ CONFIG_SCSI_FCAL=m
...
@@ -389,10 +389,7 @@ CONFIG_SCSI_FCAL=m
# Fusion MPT device support
# Fusion MPT device support
#
#
CONFIG_FUSION=m
CONFIG_FUSION=m
# CONFIG_FUSION_BOOT is not set
#
# (ability to boot linux kernel from Fusion device is DISABLED!)
#
CONFIG_FUSION_ISENSE=m
CONFIG_FUSION_ISENSE=m
CONFIG_FUSION_CTL=m
CONFIG_FUSION_CTL=m
CONFIG_FUSION_LAN=m
CONFIG_FUSION_LAN=m
...
@@ -576,22 +573,51 @@ CONFIG_DRM_TDFX=m
...
@@ -576,22 +573,51 @@ CONFIG_DRM_TDFX=m
# Input device support
# Input device support
#
#
CONFIG_INPUT=y
CONFIG_INPUT=y
#
# Userland interfaces
#
CONFIG_INPUT_KEYBDEV=y
CONFIG_INPUT_KEYBDEV=y
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SOUND_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_INPUT_EMU10K1 is not set
# CONFIG_INPUT_EMU10K1 is not set
# CONFIG_GAMEPORT_
PCIGAME
is not set
# CONFIG_GAMEPORT_
VORTEX
is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461x is not set
# CONFIG_GAMEPORT_CS461x is not set
# CONFIG_SERIO is not set
# CONFIG_SERIO is not set
# CONFIG_SERIO_I8042 is not set
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_PS2SERKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_INPORT is not set
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_A3D is not set
...
@@ -599,6 +625,7 @@ CONFIG_SOUND_GAMEPORT=y
...
@@ -599,6 +625,7 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_TMDC is not set
...
@@ -609,9 +636,13 @@ CONFIG_SOUND_GAMEPORT=y
...
@@ -609,9 +636,13 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDDLER is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_INPUT_JOYDUMP is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
#
#
# File systems
# File systems
...
@@ -780,7 +811,6 @@ CONFIG_USB_DEVICEFS=y
...
@@ -780,7 +811,6 @@ CONFIG_USB_DEVICEFS=y
#
#
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_UHCI_HCD_ALT is not set
# CONFIG_USB_UHCI_HCD_ALT is not set
#
#
...
...
arch/sparc64/kernel/binfmt_elf32.c
View file @
a407c6e4
...
@@ -136,6 +136,16 @@ struct elf_prpsinfo32
...
@@ -136,6 +136,16 @@ struct elf_prpsinfo32
#define NEW_TO_OLD_UID(uid) ((uid) > 65535) ? (u16)overflowuid : (u16)(uid)
#define NEW_TO_OLD_UID(uid) ((uid) > 65535) ? (u16)overflowuid : (u16)(uid)
#define NEW_TO_OLD_GID(gid) ((gid) > 65535) ? (u16)overflowgid : (u16)(gid)
#define NEW_TO_OLD_GID(gid) ((gid) > 65535) ? (u16)overflowgid : (u16)(gid)
#include <linux/time.h>
#define jiffies_to_timeval jiffies_to_timeval32
static
__inline__
void
jiffies_to_timeval32
(
unsigned
long
jiffies
,
struct
timeval32
*
value
)
{
value
->
tv_usec
=
(
jiffies
%
HZ
)
*
(
1000000L
/
HZ
);
value
->
tv_sec
=
jiffies
/
HZ
;
}
#define elf_addr_t u32
#define elf_addr_t u32
#define elf_caddr_t u32
#define elf_caddr_t u32
#undef start_thread
#undef start_thread
...
...
drivers/fc4/fc.c
View file @
a407c6e4
...
@@ -994,7 +994,7 @@ int fcp_scsi_dev_reset(Scsi_Cmnd *SCpnt)
...
@@ -994,7 +994,7 @@ int fcp_scsi_dev_reset(Scsi_Cmnd *SCpnt)
*/
*/
fc
->
rst_pkt
->
host
->
eh_action
=
&
sem
;
fc
->
rst_pkt
->
host
->
eh_action
=
&
sem
;
fc
->
rst_pkt
->
request
.
rq_status
=
RQ_SCSI_BUSY
;
fc
->
rst_pkt
->
request
->
rq_status
=
RQ_SCSI_BUSY
;
fc
->
rst_pkt
->
done
=
fcp_scsi_reset_done
;
fc
->
rst_pkt
->
done
=
fcp_scsi_reset_done
;
fcp_scsi_queue_it
(
fc
,
fc
->
rst_pkt
,
fcmd
,
0
);
fcp_scsi_queue_it
(
fc
,
fc
->
rst_pkt
,
fcmd
,
0
);
...
...
drivers/net/bonding.c
View file @
a407c6e4
...
@@ -176,6 +176,16 @@
...
@@ -176,6 +176,16 @@
* Steve Mead <steve.mead at comdev dot cc>
* Steve Mead <steve.mead at comdev dot cc>
* - Port Gleb Natapov's multicast support patchs from 2.4.12
* - Port Gleb Natapov's multicast support patchs from 2.4.12
* to 2.4.18 adding support for multicast.
* to 2.4.18 adding support for multicast.
*
* 2002/06/17 - Tony Cureington <tony.cureington * hp_com>
* - corrected uninitialized pointer (ifr.ifr_data) in bond_check_dev_link;
* actually changed function to use ETHTOOL, then MIIPHY, and finally
* MIIREG to determine the link status
* - fixed bad ifr_data pointer assignments in bond_ioctl
* - corrected mode 1 being reported as active-backup in bond_get_info;
* also added text to distinguish type of load balancing (rr or xor)
* - change arp_ip_target module param from "1-12s" (array of 12 ptrs)
* to "s" (a single ptr)
*/
*/
#include <linux/config.h>
#include <linux/config.h>
...
@@ -210,6 +220,9 @@
...
@@ -210,6 +220,9 @@
#include <linux/smp.h>
#include <linux/smp.h>
#include <linux/if_ether.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <linux/if_arp.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
/* monitor all links that often (in milliseconds). <=0 disables monitoring */
/* monitor all links that often (in milliseconds). <=0 disables monitoring */
#ifndef BOND_LINK_MON_INTERV
#ifndef BOND_LINK_MON_INTERV
...
@@ -253,7 +266,7 @@ MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
...
@@ -253,7 +266,7 @@ MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
MODULE_PARM
(
mode
,
"i"
);
MODULE_PARM
(
mode
,
"i"
);
MODULE_PARM
(
arp_interval
,
"i"
);
MODULE_PARM
(
arp_interval
,
"i"
);
MODULE_PARM_DESC
(
arp_interval
,
"arp interval in milliseconds"
);
MODULE_PARM_DESC
(
arp_interval
,
"arp interval in milliseconds"
);
MODULE_PARM
(
arp_ip_target
,
"
1-12
s"
);
MODULE_PARM
(
arp_ip_target
,
"s"
);
MODULE_PARM_DESC
(
arp_ip_target
,
"arp target in n.n.n.n form"
);
MODULE_PARM_DESC
(
arp_ip_target
,
"arp target in n.n.n.n form"
);
MODULE_PARM_DESC
(
mode
,
"Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor"
);
MODULE_PARM_DESC
(
mode
,
"Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor"
);
MODULE_PARM
(
updelay
,
"i"
);
MODULE_PARM
(
updelay
,
"i"
);
...
@@ -386,21 +399,51 @@ static u16 bond_check_dev_link(struct net_device *dev)
...
@@ -386,21 +399,51 @@ static u16 bond_check_dev_link(struct net_device *dev)
{
{
static
int
(
*
ioctl
)(
struct
net_device
*
,
struct
ifreq
*
,
int
);
static
int
(
*
ioctl
)(
struct
net_device
*
,
struct
ifreq
*
,
int
);
struct
ifreq
ifr
;
struct
ifreq
ifr
;
u16
*
data
=
(
u16
*
)
&
ifr
.
ifr_data
;
struct
mii_ioctl_data
mii
;
struct
ethtool_value
etool
;
/* data[0] automagically filled by the ioctl */
data
[
1
]
=
1
;
/* MII location 1 reports Link Status */
if
((
ioctl
=
dev
->
do_ioctl
)
!=
NULL
)
{
/* ioctl to access MII */
/* TODO: set pointer to correct ioctl on a per team member */
if
(((
ioctl
=
dev
->
do_ioctl
)
!=
NULL
)
&&
/* ioctl to access MII */
/* bases to make this more efficient. that is, once */
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIPHY
)
==
0
))
{
/* we determine the correct ioctl, we will always */
/* now, data[3] contains info about link status :
/* call it and not the others for that team */
- data[3] & 0x04 means link up
/* member. */
- data[3] & 0x20 means end of auto-negociation
*/
/* try SOICETHTOOL ioctl, some drivers cache ETHTOOL_GLINK */
return
data
[
3
];
/* for a period of time; we need to encourage link status */
}
else
{
/* be reported by network drivers in real time; if the */
return
MII_LINK_READY
;
/* spoof link up ( we can't check it) */
/* value is cached, the mmimon module parm may have no */
/* effect... */
etool
.
cmd
=
ETHTOOL_GLINK
;
ifr
.
ifr_data
=
(
char
*
)
&
etool
;
if
(
ioctl
(
dev
,
&
ifr
,
SIOCETHTOOL
)
==
0
)
{
if
(
etool
.
data
==
1
)
{
return
(
MII_LINK_READY
);
}
else
{
return
(
0
);
}
}
ifr
.
ifr_data
=
(
char
*
)
&
mii
;
/* try MIIPHY first then, if that doesn't work, try MIIREG */
if
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIPHY
)
==
0
)
{
/* now, mii.phy_id contains info about link status :
- mii.phy_id & 0x04 means link up
- mii.phy_id & 0x20 means end of auto-negociation
*/
return
mii
.
phy_id
;
}
mii
.
reg_num
=
1
;
/* the MII register we want to read */
if
(
ioctl
(
dev
,
&
ifr
,
SIOCGMIIREG
)
==
0
)
{
/* mii.val_out contians the same link info as phy_id */
/* above */
return
mii
.
val_out
;
}
}
}
return
MII_LINK_READY
;
/* spoof link up ( we can't check it) */
}
}
static
u16
bond_check_mii_link
(
bonding_t
*
bond
)
static
u16
bond_check_mii_link
(
bonding_t
*
bond
)
...
@@ -1707,7 +1750,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
...
@@ -1707,7 +1750,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
switch
(
cmd
)
{
switch
(
cmd
)
{
case
SIOCGMIIPHY
:
case
SIOCGMIIPHY
:
data
=
(
u16
*
)
&
ifr
->
ifr_data
;
data
=
(
u16
*
)
ifr
->
ifr_data
;
if
(
data
==
NULL
)
{
if
(
data
==
NULL
)
{
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -1718,7 +1761,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
...
@@ -1718,7 +1761,7 @@ static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
* We do this again just in case we were called by SIOCGMIIREG
* We do this again just in case we were called by SIOCGMIIREG
* instead of SIOCGMIIPHY.
* instead of SIOCGMIIPHY.
*/
*/
data
=
(
u16
*
)
&
ifr
->
ifr_data
;
data
=
(
u16
*
)
ifr
->
ifr_data
;
if
(
data
==
NULL
)
{
if
(
data
==
NULL
)
{
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -2035,7 +2078,28 @@ static int bond_get_info(char *buf, char **start, off_t offset, int length)
...
@@ -2035,7 +2078,28 @@ static int bond_get_info(char *buf, char **start, off_t offset, int length)
link
=
bond_check_mii_link
(
bond
);
link
=
bond_check_mii_link
(
bond
);
len
+=
sprintf
(
buf
+
len
,
"Bonding Mode: "
);
len
+=
sprintf
(
buf
+
len
,
"Bonding Mode: "
);
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
mode
?
"active-backup"
:
"load balancing"
);
switch
(
mode
)
{
case
BOND_MODE_ACTIVEBACKUP
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"active-backup"
);
break
;
case
BOND_MODE_ROUNDROBIN
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"load balancing (round-robin)"
);
break
;
case
BOND_MODE_XOR
:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"load balancing (xor)"
);
break
;
default:
len
+=
sprintf
(
buf
+
len
,
"%s
\n
"
,
"unknown"
);
break
;
}
if
(
mode
==
BOND_MODE_ACTIVEBACKUP
)
{
if
(
mode
==
BOND_MODE_ACTIVEBACKUP
)
{
read_lock_irqsave
(
&
bond
->
lock
,
flags
);
read_lock_irqsave
(
&
bond
->
lock
,
flags
);
...
@@ -2282,7 +2346,32 @@ static int __init bonding_init(void)
...
@@ -2282,7 +2346,32 @@ static int __init bonding_init(void)
}
}
memset
(
dev_bonds
,
0
,
max_bonds
*
sizeof
(
struct
net_device
));
memset
(
dev_bonds
,
0
,
max_bonds
*
sizeof
(
struct
net_device
));
if
(
updelay
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): updelay module parameter (%d), "
"not in range 0-%d, so it was reset to 0
\n
"
,
updelay
,
INT_MAX
);
updelay
=
0
;
}
if
(
downdelay
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): downdelay module parameter (%d), "
"not in range 0-%d, so it was reset to 0
\n
"
,
downdelay
,
INT_MAX
);
downdelay
=
0
;
}
if
(
arp_interval
<
0
)
{
printk
(
KERN_WARNING
"bonding_init(): arp_interval module parameter (%d), "
"not in range 0-%d, so it was reset to %d
\n
"
,
arp_interval
,
INT_MAX
,
BOND_LINK_ARP_INTERV
);
arp_interval
=
BOND_LINK_ARP_INTERV
;
}
if
(
arp_ip_target
)
{
if
(
arp_ip_target
)
{
/* TODO: check and log bad ip address */
if
(
my_inet_aton
(
arp_ip_target
,
&
arp_target
)
==
0
)
{
if
(
my_inet_aton
(
arp_ip_target
,
&
arp_target
)
==
0
)
{
arp_interval
=
0
;
arp_interval
=
0
;
}
}
...
...
drivers/net/sunhme.c
View file @
a407c6e4
...
@@ -2201,7 +2201,7 @@ static int happy_meal_open(struct net_device *dev)
...
@@ -2201,7 +2201,7 @@ static int happy_meal_open(struct net_device *dev)
*/
*/
if
((
hp
->
happy_flags
&
(
HFLAG_QUATTRO
|
HFLAG_PCI
))
!=
HFLAG_QUATTRO
)
{
if
((
hp
->
happy_flags
&
(
HFLAG_QUATTRO
|
HFLAG_PCI
))
!=
HFLAG_QUATTRO
)
{
if
(
request_irq
(
dev
->
irq
,
&
happy_meal_interrupt
,
if
(
request_irq
(
dev
->
irq
,
&
happy_meal_interrupt
,
SA_SHIRQ
,
"HAPPY MEAL"
,
(
void
*
)
dev
))
{
SA_SHIRQ
,
dev
->
name
,
(
void
*
)
dev
))
{
HMD
((
"EAGAIN
\n
"
));
HMD
((
"EAGAIN
\n
"
));
#ifdef __sparc__
#ifdef __sparc__
printk
(
KERN_ERR
"happy_meal(SBUS): Can't order irq %s to go.
\n
"
,
printk
(
KERN_ERR
"happy_meal(SBUS): Can't order irq %s to go.
\n
"
,
...
...
drivers/net/tg3.c
View file @
a407c6e4
This diff is collapsed.
Click to expand it.
drivers/net/tg3.h
View file @
a407c6e4
...
@@ -1687,45 +1687,6 @@ struct tg3_link_config {
...
@@ -1687,45 +1687,6 @@ struct tg3_link_config {
u8
orig_autoneg
;
u8
orig_autoneg
;
};
};
struct
tg3_coalesce_config
{
/* Current settings. */
u32
rx_coalesce_ticks
;
u32
rx_max_coalesced_frames
;
u32
rx_coalesce_ticks_during_int
;
u32
rx_max_coalesced_frames_during_int
;
u32
tx_coalesce_ticks
;
u32
tx_max_coalesced_frames
;
u32
tx_coalesce_ticks_during_int
;
u32
tx_max_coalesced_frames_during_int
;
u32
stats_coalesce_ticks
;
/* Default settings. */
u32
rx_coalesce_ticks_def
;
u32
rx_max_coalesced_frames_def
;
u32
rx_coalesce_ticks_during_int_def
;
u32
rx_max_coalesced_frames_during_int_def
;
u32
tx_coalesce_ticks_def
;
u32
tx_max_coalesced_frames_def
;
u32
tx_coalesce_ticks_during_int_def
;
u32
tx_max_coalesced_frames_during_int_def
;
u32
stats_coalesce_ticks_def
;
/* Adaptive RX/TX coalescing parameters. */
u32
rate_sample_jiffies
;
u32
pkt_rate_low
;
u32
pkt_rate_high
;
u32
rx_coalesce_ticks_low
;
u32
rx_max_coalesced_frames_low
;
u32
tx_coalesce_ticks_low
;
u32
tx_max_coalesced_frames_low
;
u32
rx_coalesce_ticks_high
;
u32
rx_max_coalesced_frames_high
;
u32
tx_coalesce_ticks_high
;
u32
tx_max_coalesced_frames_high
;
};
struct
tg3_bufmgr_config
{
struct
tg3_bufmgr_config
{
u32
mbuf_read_dma_low_water
;
u32
mbuf_read_dma_low_water
;
u32
mbuf_mac_rx_low_water
;
u32
mbuf_mac_rx_low_water
;
...
@@ -1772,8 +1733,7 @@ struct tg3 {
...
@@ -1772,8 +1733,7 @@ struct tg3 {
#define TG3_FLAG_POLL_SERDES 0x00000080
#define TG3_FLAG_POLL_SERDES 0x00000080
#define TG3_FLAG_PHY_RESET_ON_INIT 0x00000100
#define TG3_FLAG_PHY_RESET_ON_INIT 0x00000100
#define TG3_FLAG_PCIX_TARGET_HWBUG 0x00000200
#define TG3_FLAG_PCIX_TARGET_HWBUG 0x00000200
#define TG3_FLAG_TAGGED_IRQ_STATUS 0x00000400
#define TG3_FLAG_WOL_SPEED_100MB 0x00000400
#define TG3_FLAG_WOL_SPEED_100MB 0x00000800
#define TG3_FLAG_WOL_ENABLE 0x00001000
#define TG3_FLAG_WOL_ENABLE 0x00001000
#define TG3_FLAG_NVRAM 0x00002000
#define TG3_FLAG_NVRAM 0x00002000
#define TG3_FLAG_NVRAM_BUFFERED 0x00004000
#define TG3_FLAG_NVRAM_BUFFERED 0x00004000
...
@@ -1802,7 +1762,6 @@ struct tg3 {
...
@@ -1802,7 +1762,6 @@ struct tg3 {
u32
timer_offset
;
u32
timer_offset
;
struct
tg3_link_config
link_config
;
struct
tg3_link_config
link_config
;
struct
tg3_coalesce_config
coalesce_config
;
struct
tg3_bufmgr_config
bufmgr_config
;
struct
tg3_bufmgr_config
bufmgr_config
;
u32
rx_pending
;
u32
rx_pending
;
...
...
drivers/scsi/aic7xxx_old.c
View file @
a407c6e4
...
@@ -3070,7 +3070,7 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
...
@@ -3070,7 +3070,7 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
* we check data_cmnd[0]. This catches the conditions for st.c, but
* we check data_cmnd[0]. This catches the conditions for st.c, but
* I'm still not sure if request.cmd is valid for sg devices.
* I'm still not sure if request.cmd is valid for sg devices.
*/
*/
if
(
(
rq_data_dir
(
&
cmd
->
request
)
==
WRITE
)
||
(
cmd
->
data_cmnd
[
0
]
==
WRITE_6
)
||
if
(
(
rq_data_dir
(
cmd
->
request
)
==
WRITE
)
||
(
cmd
->
data_cmnd
[
0
]
==
WRITE_6
)
||
(
cmd
->
data_cmnd
[
0
]
==
WRITE_FILEMARKS
)
)
(
cmd
->
data_cmnd
[
0
]
==
WRITE_FILEMARKS
)
)
{
{
sp
->
w_total
++
;
sp
->
w_total
++
;
...
@@ -4280,7 +4280,7 @@ aic7xxx_calculate_residual (struct aic7xxx_host *p, struct aic7xxx_scb *scb)
...
@@ -4280,7 +4280,7 @@ aic7xxx_calculate_residual (struct aic7xxx_host *p, struct aic7xxx_scb *scb)
{
{
printk
(
INFO_LEAD
"Underflow - Wanted %u, %s %u, residual SG "
printk
(
INFO_LEAD
"Underflow - Wanted %u, %s %u, residual SG "
"count %d.
\n
"
,
p
->
host_no
,
CTL_OF_SCB
(
scb
),
cmd
->
underflow
,
"count %d.
\n
"
,
p
->
host_no
,
CTL_OF_SCB
(
scb
),
cmd
->
underflow
,
(
rq_data_dir
(
&
cmd
->
request
)
==
WRITE
)
?
"wrote"
:
"read"
,
actual
,
(
rq_data_dir
(
cmd
->
request
)
==
WRITE
)
?
"wrote"
:
"read"
,
actual
,
hscb
->
residual_SG_segment_count
);
hscb
->
residual_SG_segment_count
);
printk
(
INFO_LEAD
"status 0x%x.
\n
"
,
p
->
host_no
,
CTL_OF_SCB
(
scb
),
printk
(
INFO_LEAD
"status 0x%x.
\n
"
,
p
->
host_no
,
CTL_OF_SCB
(
scb
),
hscb
->
target_status
);
hscb
->
target_status
);
...
...
drivers/scsi/pluto.c
View file @
a407c6e4
...
@@ -65,7 +65,7 @@ static void __init pluto_detect_done(Scsi_Cmnd *SCpnt)
...
@@ -65,7 +65,7 @@ static void __init pluto_detect_done(Scsi_Cmnd *SCpnt)
static
void
__init
pluto_detect_scsi_done
(
Scsi_Cmnd
*
SCpnt
)
static
void
__init
pluto_detect_scsi_done
(
Scsi_Cmnd
*
SCpnt
)
{
{
SCpnt
->
request
.
rq_status
=
RQ_SCSI_DONE
;
SCpnt
->
request
->
rq_status
=
RQ_SCSI_DONE
;
PLND
((
"Detect done %08lx
\n
"
,
(
long
)
SCpnt
))
PLND
((
"Detect done %08lx
\n
"
,
(
long
)
SCpnt
))
if
(
atomic_dec_and_test
(
&
fcss
))
if
(
atomic_dec_and_test
(
&
fcss
))
up
(
&
fc_sem
);
up
(
&
fc_sem
);
...
@@ -160,7 +160,7 @@ int __init pluto_detect(Scsi_Host_Template *tpnt)
...
@@ -160,7 +160,7 @@ int __init pluto_detect(Scsi_Host_Template *tpnt)
SCpnt
->
cmd_len
=
COMMAND_SIZE
(
INQUIRY
);
SCpnt
->
cmd_len
=
COMMAND_SIZE
(
INQUIRY
);
SCpnt
->
request
.
rq_status
=
RQ_SCSI_BUSY
;
SCpnt
->
request
->
rq_status
=
RQ_SCSI_BUSY
;
SCpnt
->
done
=
pluto_detect_done
;
SCpnt
->
done
=
pluto_detect_done
;
SCpnt
->
bufflen
=
256
;
SCpnt
->
bufflen
=
256
;
...
@@ -174,7 +174,7 @@ int __init pluto_detect(Scsi_Host_Template *tpnt)
...
@@ -174,7 +174,7 @@ int __init pluto_detect(Scsi_Host_Template *tpnt)
for
(
retry
=
0
;
retry
<
5
;
retry
++
)
{
for
(
retry
=
0
;
retry
<
5
;
retry
++
)
{
for
(
i
=
0
;
i
<
fcscount
;
i
++
)
{
for
(
i
=
0
;
i
<
fcscount
;
i
++
)
{
if
(
!
fcs
[
i
].
fc
)
break
;
if
(
!
fcs
[
i
].
fc
)
break
;
if
(
fcs
[
i
].
cmd
.
request
.
rq_status
!=
RQ_SCSI_DONE
)
{
if
(
fcs
[
i
].
cmd
.
request
->
rq_status
!=
RQ_SCSI_DONE
)
{
disable_irq
(
fcs
[
i
].
fc
->
irq
);
disable_irq
(
fcs
[
i
].
fc
->
irq
);
PLND
((
"queuecommand %d %d
\n
"
,
retry
,
i
))
PLND
((
"queuecommand %d %d
\n
"
,
retry
,
i
))
fcp_scsi_queuecommand
(
&
(
fcs
[
i
].
cmd
),
fcp_scsi_queuecommand
(
&
(
fcs
[
i
].
cmd
),
...
...
fs/partitions/check.c
View file @
a407c6e4
...
@@ -226,7 +226,7 @@ static ssize_t partition_device_kdev_read(struct device *driverfs_dev,
...
@@ -226,7 +226,7 @@ static ssize_t partition_device_kdev_read(struct device *driverfs_dev,
char
*
page
,
size_t
count
,
loff_t
off
)
char
*
page
,
size_t
count
,
loff_t
off
)
{
{
kdev_t
kdev
;
kdev_t
kdev
;
kdev
.
value
=
(
int
)
driverfs_dev
->
driver_data
;
kdev
.
value
=
(
int
)
(
long
)
driverfs_dev
->
driver_data
;
return
off
?
0
:
sprintf
(
page
,
"%x
\n
"
,
kdev
.
value
);
return
off
?
0
:
sprintf
(
page
,
"%x
\n
"
,
kdev
.
value
);
}
}
static
struct
driver_file_entry
partition_device_kdev_file
=
{
static
struct
driver_file_entry
partition_device_kdev_file
=
{
...
@@ -285,7 +285,7 @@ void driverfs_create_partitions(struct gendisk *hd, int minor)
...
@@ -285,7 +285,7 @@ void driverfs_create_partitions(struct gendisk *hd, int minor)
current_driverfs_dev
->
parent
=
parent
;
current_driverfs_dev
->
parent
=
parent
;
/* handle disc case */
/* handle disc case */
current_driverfs_dev
->
driver_data
=
current_driverfs_dev
->
driver_data
=
(
void
*
)
__mkdev
(
hd
->
major
,
minor
+
part
);
(
void
*
)
(
long
)
__mkdev
(
hd
->
major
,
minor
+
part
);
if
(
part
==
0
)
{
if
(
part
==
0
)
{
if
(
parent
)
{
if
(
parent
)
{
sprintf
(
current_driverfs_dev
->
name
,
sprintf
(
current_driverfs_dev
->
name
,
...
...
fs/quota_v2.c
View file @
a407c6e4
...
@@ -413,7 +413,7 @@ static int v2_write_dquot(struct dquot *dquot)
...
@@ -413,7 +413,7 @@ static int v2_write_dquot(struct dquot *dquot)
if
(
!
dquot
->
dq_off
)
if
(
!
dquot
->
dq_off
)
if
((
ret
=
dq_insert_tree
(
dquot
))
<
0
)
{
if
((
ret
=
dq_insert_tree
(
dquot
))
<
0
)
{
printk
(
KERN_ERR
"VFS: Error %d occured while creating quota.
\n
"
,
ret
);
printk
(
KERN_ERR
"VFS: Error %
Z
d occured while creating quota.
\n
"
,
ret
);
return
ret
;
return
ret
;
}
}
filp
=
sb_dqopt
(
dquot
->
dq_sb
)
->
files
[
type
];
filp
=
sb_dqopt
(
dquot
->
dq_sb
)
->
files
[
type
];
...
...
include/asm-sparc/cache.h
View file @
a407c6e4
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
#include <asm/asi.h>
#include <asm/asi.h>
#define L1_CACHE_SHIFT 5
#define L1_CACHE_BYTES 32
#define L1_CACHE_BYTES 32
#define L1_CACHE_ALIGN(x) ((((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)))
#define L1_CACHE_ALIGN(x) ((((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)))
...
...
include/asm-sparc/param.h
View file @
a407c6e4
...
@@ -2,6 +2,12 @@
...
@@ -2,6 +2,12 @@
#ifndef _ASMSPARC_PARAM_H
#ifndef _ASMSPARC_PARAM_H
#define _ASMSPARC_PARAM_H
#define _ASMSPARC_PARAM_H
#ifdef __KERNEL__
# define HZ 100
/* Internal kernel timer frequency */
# define USER_HZ 100
/* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ)
#endif
#ifndef HZ
#ifndef HZ
#define HZ 100
#define HZ 100
#endif
#endif
...
@@ -18,8 +24,4 @@
...
@@ -18,8 +24,4 @@
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#ifdef __KERNEL__
# define CLOCKS_PER_SEC HZ
/* frequency at which times() counts */
#endif
#endif
#endif
include/asm-sparc64/cache.h
View file @
a407c6e4
...
@@ -5,7 +5,8 @@
...
@@ -5,7 +5,8 @@
#define __ARCH_SPARC64_CACHE_H
#define __ARCH_SPARC64_CACHE_H
/* bytes per L1 cache line */
/* bytes per L1 cache line */
#define L1_CACHE_BYTES 32
/* Two 16-byte sub-blocks per line. */
#define L1_CACHE_SHIFT 5
#define L1_CACHE_BYTES 32
/* Two 16-byte sub-blocks per line. */
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
...
...
include/asm-sparc64/param.h
View file @
a407c6e4
...
@@ -2,6 +2,12 @@
...
@@ -2,6 +2,12 @@
#ifndef _ASMSPARC64_PARAM_H
#ifndef _ASMSPARC64_PARAM_H
#define _ASMSPARC64_PARAM_H
#define _ASMSPARC64_PARAM_H
#ifdef __KERNEL__
# define HZ 100
/* Internal kernel timer frequency */
# define USER_HZ 100
/* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ)
#endif
#ifndef HZ
#ifndef HZ
#define HZ 100
#define HZ 100
#endif
#endif
...
@@ -18,8 +24,4 @@
...
@@ -18,8 +24,4 @@
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#define MAXHOSTNAMELEN 64
/* max length of hostname */
#ifdef __KERNEL__
# define CLOCKS_PER_SEC HZ
/* frequency at which times() counts */
#endif
#endif
/* _ASMSPARC64_PARAM_H */
#endif
/* _ASMSPARC64_PARAM_H */
include/linux/if_vlan.h
View file @
a407c6e4
...
@@ -141,9 +141,10 @@ struct vlan_skb_tx_cookie {
...
@@ -141,9 +141,10 @@ struct vlan_skb_tx_cookie {
(VLAN_TX_SKB_CB(__skb)->magic == VLAN_TX_COOKIE_MAGIC)
(VLAN_TX_SKB_CB(__skb)->magic == VLAN_TX_COOKIE_MAGIC)
#define vlan_tx_tag_get(__skb) (VLAN_TX_SKB_CB(__skb)->vlan_tag)
#define vlan_tx_tag_get(__skb) (VLAN_TX_SKB_CB(__skb)->vlan_tag)
/* VLAN rx hw acceleration helper. This acts like netif_rx(). */
/* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */
static
inline
int
vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
static
inline
int
__vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
unsigned
short
vlan_tag
)
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
,
int
polling
)
{
{
struct
net_device_stats
*
stats
;
struct
net_device_stats
*
stats
;
...
@@ -182,9 +183,22 @@ static inline int vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
...
@@ -182,9 +183,22 @@ static inline int vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
break
;
break
;
};
};
return
netif_rx
(
skb
);
return
(
polling
?
netif_receive_skb
(
skb
)
:
netif_rx
(
skb
)
);
}
}
static
inline
int
vlan_hwaccel_rx
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
)
{
return
__vlan_hwaccel_rx
(
skb
,
grp
,
vlan_tag
,
0
);
}
static
inline
int
vlan_hwaccel_receive_skb
(
struct
sk_buff
*
skb
,
struct
vlan_group
*
grp
,
unsigned
short
vlan_tag
)
{
return
__vlan_hwaccel_rx
(
skb
,
grp
,
vlan_tag
,
1
);
}
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
/* VLAN IOCTLs are found in sockios.h */
/* VLAN IOCTLs are found in sockios.h */
...
...
include/linux/netlink.h
View file @
a407c6e4
...
@@ -110,6 +110,8 @@ extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int
...
@@ -110,6 +110,8 @@ extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int
extern
void
netlink_broadcast
(
struct
sock
*
ssk
,
struct
sk_buff
*
skb
,
__u32
pid
,
extern
void
netlink_broadcast
(
struct
sock
*
ssk
,
struct
sk_buff
*
skb
,
__u32
pid
,
__u32
group
,
int
allocation
);
__u32
group
,
int
allocation
);
extern
void
netlink_set_err
(
struct
sock
*
ssk
,
__u32
pid
,
__u32
group
,
int
code
);
extern
void
netlink_set_err
(
struct
sock
*
ssk
,
__u32
pid
,
__u32
group
,
int
code
);
extern
int
netlink_register_notifier
(
struct
notifier_block
*
nb
);
extern
int
netlink_unregister_notifier
(
struct
notifier_block
*
nb
);
/*
/*
* skb should fit one page. This choice is good for headerless malloc.
* skb should fit one page. This choice is good for headerless malloc.
...
@@ -129,6 +131,12 @@ struct netlink_callback
...
@@ -129,6 +131,12 @@ struct netlink_callback
long
args
[
4
];
long
args
[
4
];
};
};
struct
netlink_notify
{
int
pid
;
int
protocol
;
};
static
__inline__
struct
nlmsghdr
*
static
__inline__
struct
nlmsghdr
*
__nlmsg_put
(
struct
sk_buff
*
skb
,
u32
pid
,
u32
seq
,
int
type
,
int
len
)
__nlmsg_put
(
struct
sk_buff
*
skb
,
u32
pid
,
u32
seq
,
int
type
,
int
len
)
{
{
...
...
include/linux/notifier.h
View file @
a407c6e4
...
@@ -58,5 +58,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi
...
@@ -58,5 +58,7 @@ extern int notifier_call_chain(struct notifier_block **n, unsigned long val, voi
#define SYS_HALT 0x0002
/* Notify of system halt */
#define SYS_HALT 0x0002
/* Notify of system halt */
#define SYS_POWER_OFF 0x0003
/* Notify of system power off */
#define SYS_POWER_OFF 0x0003
/* Notify of system power off */
#define NETLINK_URELEASE 0x0001
/* Unicast netlink socket released */
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _LINUX_NOTIFIER_H */
#endif
/* _LINUX_NOTIFIER_H */
include/net/dsfield.h
View file @
a407c6e4
...
@@ -51,29 +51,4 @@ static inline void ipv6_change_dsfield(struct ipv6hdr *ipv6h,__u8 mask,
...
@@ -51,29 +51,4 @@ static inline void ipv6_change_dsfield(struct ipv6hdr *ipv6h,__u8 mask,
}
}
#if 0 /* put this later into asm-i386 or such ... */
static inline void ip_change_dsfield(struct iphdr *iph,__u16 dsfield)
{
__u16 check;
__asm__ __volatile__("
movw 10(%1),%0
xchg %b0,%h0
addb 1(%1),%b0
adcb $0,%h0
adcw $1,%0
cmc
sbbw %2,%0
sbbw $0,%0
movb %b2,1(%1)
xchg %b0,%h0
movw %0,10(%1)"
: "=&r" (check)
: "r" (iph), "r" (dsfield)
: "cc");
}
#endif
#endif
#endif
net/core/dst.c
View file @
a407c6e4
...
@@ -29,7 +29,9 @@
...
@@ -29,7 +29,9 @@
* 4) All operations modify state, so a spinlock is used.
* 4) All operations modify state, so a spinlock is used.
*/
*/
static
struct
dst_entry
*
dst_garbage_list
;
static
struct
dst_entry
*
dst_garbage_list
;
#if RT_CACHE_DEBUG >= 2
static
atomic_t
dst_total
=
ATOMIC_INIT
(
0
);
static
atomic_t
dst_total
=
ATOMIC_INIT
(
0
);
#endif
static
spinlock_t
dst_lock
=
SPIN_LOCK_UNLOCKED
;
static
spinlock_t
dst_lock
=
SPIN_LOCK_UNLOCKED
;
static
unsigned
long
dst_gc_timer_expires
;
static
unsigned
long
dst_gc_timer_expires
;
...
@@ -108,7 +110,9 @@ void * dst_alloc(struct dst_ops * ops)
...
@@ -108,7 +110,9 @@ void * dst_alloc(struct dst_ops * ops)
dst
->
lastuse
=
jiffies
;
dst
->
lastuse
=
jiffies
;
dst
->
input
=
dst_discard
;
dst
->
input
=
dst_discard
;
dst
->
output
=
dst_blackhole
;
dst
->
output
=
dst_blackhole
;
#if RT_CACHE_DEBUG >= 2
atomic_inc
(
&
dst_total
);
atomic_inc
(
&
dst_total
);
#endif
atomic_inc
(
&
ops
->
entries
);
atomic_inc
(
&
ops
->
entries
);
return
dst
;
return
dst
;
}
}
...
@@ -158,7 +162,9 @@ void dst_destroy(struct dst_entry * dst)
...
@@ -158,7 +162,9 @@ void dst_destroy(struct dst_entry * dst)
dst
->
ops
->
destroy
(
dst
);
dst
->
ops
->
destroy
(
dst
);
if
(
dst
->
dev
)
if
(
dst
->
dev
)
dev_put
(
dst
->
dev
);
dev_put
(
dst
->
dev
);
#if RT_CACHE_DEBUG >= 2
atomic_dec
(
&
dst_total
);
atomic_dec
(
&
dst_total
);
#endif
kmem_cache_free
(
dst
->
ops
->
kmem_cachep
,
dst
);
kmem_cache_free
(
dst
->
ops
->
kmem_cachep
,
dst
);
}
}
...
...
net/netlink/af_netlink.c
View file @
a407c6e4
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include <linux/rtnetlink.h>
#include <linux/rtnetlink.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <linux/notifier.h>
#include <net/sock.h>
#include <net/sock.h>
#include <net/scm.h>
#include <net/scm.h>
...
@@ -81,6 +82,8 @@ atomic_t netlink_sock_nr;
...
@@ -81,6 +82,8 @@ atomic_t netlink_sock_nr;
static
rwlock_t
nl_table_lock
=
RW_LOCK_UNLOCKED
;
static
rwlock_t
nl_table_lock
=
RW_LOCK_UNLOCKED
;
static
atomic_t
nl_table_users
=
ATOMIC_INIT
(
0
);
static
atomic_t
nl_table_users
=
ATOMIC_INIT
(
0
);
static
struct
notifier_block
*
netlink_chain
;
static
void
netlink_sock_destruct
(
struct
sock
*
sk
)
static
void
netlink_sock_destruct
(
struct
sock
*
sk
)
{
{
skb_queue_purge
(
&
sk
->
receive_queue
);
skb_queue_purge
(
&
sk
->
receive_queue
);
...
@@ -276,6 +279,12 @@ static int netlink_release(struct socket *sock)
...
@@ -276,6 +279,12 @@ static int netlink_release(struct socket *sock)
skb_queue_purge
(
&
sk
->
write_queue
);
skb_queue_purge
(
&
sk
->
write_queue
);
if
(
nlk
->
pid
&&
!
nlk
->
groups
)
{
struct
netlink_notify
n
=
{
protocol
:
sk
->
protocol
,
pid:
nlk
->
pid
};
notifier_call_chain
(
&
netlink_chain
,
NETLINK_URELEASE
,
&
n
);
}
sock_put
(
sk
);
sock_put
(
sk
);
return
0
;
return
0
;
}
}
...
@@ -967,6 +976,16 @@ static int netlink_read_proc(char *buffer, char **start, off_t offset,
...
@@ -967,6 +976,16 @@ static int netlink_read_proc(char *buffer, char **start, off_t offset,
}
}
#endif
#endif
int
netlink_register_notifier
(
struct
notifier_block
*
nb
)
{
return
notifier_chain_register
(
&
netlink_chain
,
nb
);
}
int
netlink_unregister_notifier
(
struct
notifier_block
*
nb
)
{
return
notifier_chain_unregister
(
&
netlink_chain
,
nb
);
}
struct
proto_ops
netlink_ops
=
{
struct
proto_ops
netlink_ops
=
{
family:
PF_NETLINK
,
family:
PF_NETLINK
,
...
...
net/netsyms.c
View file @
a407c6e4
...
@@ -402,6 +402,8 @@ EXPORT_SYMBOL(netlink_unicast);
...
@@ -402,6 +402,8 @@ EXPORT_SYMBOL(netlink_unicast);
EXPORT_SYMBOL
(
netlink_kernel_create
);
EXPORT_SYMBOL
(
netlink_kernel_create
);
EXPORT_SYMBOL
(
netlink_dump_start
);
EXPORT_SYMBOL
(
netlink_dump_start
);
EXPORT_SYMBOL
(
netlink_ack
);
EXPORT_SYMBOL
(
netlink_ack
);
EXPORT_SYMBOL
(
netlink_register_notifier
);
EXPORT_SYMBOL
(
netlink_unregister_notifier
);
#if defined(CONFIG_NETLINK_DEV) || defined(CONFIG_NETLINK_DEV_MODULE)
#if defined(CONFIG_NETLINK_DEV) || defined(CONFIG_NETLINK_DEV_MODULE)
EXPORT_SYMBOL
(
netlink_attach
);
EXPORT_SYMBOL
(
netlink_attach
);
EXPORT_SYMBOL
(
netlink_detach
);
EXPORT_SYMBOL
(
netlink_detach
);
...
...
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