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
142543df
Commit
142543df
authored
Aug 17, 2002
by
Anton Blanchard
Browse files
Options
Browse Files
Download
Plain Diff
Merge samba.org:/scratch/anton/linux-2.5
into samba.org:/scratch/anton/linux-2.5_work
parents
4cedf231
c2480c85
Changes
40
Hide whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
303 additions
and
285 deletions
+303
-285
arch/i386/kernel/process.c
arch/i386/kernel/process.c
+5
-5
drivers/isdn/Config.in
drivers/isdn/Config.in
+2
-1
drivers/isdn/capi/capi.c
drivers/isdn/capi/capi.c
+8
-8
drivers/isdn/capi/capifs.c
drivers/isdn/capi/capifs.c
+10
-10
drivers/isdn/capi/capilib.c
drivers/isdn/capi/capilib.c
+1
-1
drivers/isdn/capi/kcapi.h
drivers/isdn/capi/kcapi.h
+1
-1
drivers/isdn/capi/kcapi_proc.c
drivers/isdn/capi/kcapi_proc.c
+32
-32
drivers/isdn/divert/divert_procfs.c
drivers/isdn/divert/divert_procfs.c
+8
-8
drivers/isdn/hardware/Config.in
drivers/isdn/hardware/Config.in
+23
-1
drivers/isdn/hardware/avm/Config.in
drivers/isdn/hardware/avm/Config.in
+1
-1
drivers/isdn/hardware/avm/b1pci.c
drivers/isdn/hardware/avm/b1pci.c
+4
-4
drivers/isdn/hardware/avm/c4.c
drivers/isdn/hardware/avm/c4.c
+4
-4
drivers/isdn/hardware/avm/t1pci.c
drivers/isdn/hardware/avm/t1pci.c
+4
-4
drivers/isdn/hisax/Config.in
drivers/isdn/hisax/Config.in
+1
-1
drivers/isdn/hisax/config.c
drivers/isdn/hisax/config.c
+5
-0
drivers/isdn/hisax/hisax_debug.h
drivers/isdn/hisax/hisax_debug.h
+1
-1
drivers/isdn/hisax/hisax_fcpcipnp.c
drivers/isdn/hisax/hisax_fcpcipnp.c
+8
-8
drivers/isdn/hisax/hisax_hfcpci.c
drivers/isdn/hisax/hisax_hfcpci.c
+10
-10
drivers/isdn/hisax/ipacx.c
drivers/isdn/hisax/ipacx.c
+5
-24
drivers/isdn/hisax/st5481.h
drivers/isdn/hisax/st5481.h
+3
-3
drivers/isdn/hisax/st5481_init.c
drivers/isdn/hisax/st5481_init.c
+4
-4
drivers/isdn/hysdn/hysdn_procconf.c
drivers/isdn/hysdn/hysdn_procconf.c
+5
-5
drivers/isdn/hysdn/hysdn_proclog.c
drivers/isdn/hysdn/hysdn_proclog.c
+6
-6
drivers/isdn/i4l/Config.in
drivers/isdn/i4l/Config.in
+0
-19
drivers/isdn/i4l/isdn_audio.c
drivers/isdn/i4l/isdn_audio.c
+3
-3
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_common.c
+18
-18
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_net.c
+80
-70
drivers/isdn/i4l/isdn_net.h
drivers/isdn/i4l/isdn_net.h
+0
-2
drivers/isdn/i4l/isdn_ppp.c
drivers/isdn/i4l/isdn_ppp.c
+8
-8
drivers/isdn/tpam/tpam_main.c
drivers/isdn/tpam/tpam_main.c
+4
-4
include/linux/isdn.h
include/linux/isdn.h
+2
-0
include/linux/mm.h
include/linux/mm.h
+5
-4
include/linux/sched.h
include/linux/sched.h
+3
-3
init/main.c
init/main.c
+7
-0
kernel/fork.c
kernel/fork.c
+4
-2
kernel/kmod.c
kernel/kmod.c
+10
-5
kernel/sched.c
kernel/sched.c
+1
-2
kernel/sys.c
kernel/sys.c
+5
-0
mm/page_alloc.c
mm/page_alloc.c
+1
-2
mm/swap.c
mm/swap.c
+1
-1
No files found.
arch/i386/kernel/process.c
View file @
142543df
...
...
@@ -566,7 +566,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
struct_cpy
(
childregs
,
regs
);
childregs
->
eax
=
0
;
childregs
->
esp
=
esp
;
p
->
user_
vm_lock
=
NULL
;
p
->
user_
tid
=
NULL
;
p
->
thread
.
esp
=
(
unsigned
long
)
childregs
;
p
->
thread
.
esp0
=
(
unsigned
long
)
(
childregs
+
1
);
...
...
@@ -591,7 +591,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
/*
* The common fastpath:
*/
if
(
!
(
clone_flags
&
(
CLONE_SETTLS
|
CLONE_SETTID
|
CLONE_
RELEASE_VM
)))
if
(
!
(
clone_flags
&
(
CLONE_SETTLS
|
CLONE_SETTID
|
CLONE_
CLEARTID
)))
return
0
;
/*
* Set a new TLS for the child thread?
...
...
@@ -623,10 +623,10 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
return
-
EFAULT
;
/*
* Does the userspace VM want
any unlock
on mm_release()?
* Does the userspace VM want
the TID cleared
on mm_release()?
*/
if
(
clone_flags
&
CLONE_
RELEASE_VM
)
p
->
user_
vm_lock
=
(
long
*
)
childregs
->
edi
;
if
(
clone_flags
&
CLONE_
CLEARTID
)
p
->
user_
tid
=
(
long
*
)
childregs
->
edx
;
return
0
;
}
...
...
drivers/isdn/Config.in
View file @
142543df
...
...
@@ -22,8 +22,9 @@ if [ "$CONFIG_NET" != "n" ]; then
tristate 'CAPI2.0 support' CONFIG_ISDN_CAPI
if [ "$CONFIG_ISDN_CAPI" != "n" ]; then
source drivers/isdn/capi/Config.in
source drivers/isdn/hardware/Config.in
fi
source drivers/isdn/hardware/Config.in
fi
fi
endmenu
...
...
drivers/isdn/capi/capi.c
View file @
142543df
...
...
@@ -957,14 +957,14 @@ capi_release(struct inode *inode, struct file *file)
static
struct
file_operations
capi_fops
=
{
owner:
THIS_MODULE
,
llseek:
no_llseek
,
read:
capi_read
,
write:
capi_write
,
poll:
capi_poll
,
ioctl:
capi_ioctl
,
open:
capi_open
,
release:
capi_release
,
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
read
=
capi_read
,
.
write
=
capi_write
,
.
poll
=
capi_poll
,
.
ioctl
=
capi_ioctl
,
.
open
=
capi_open
,
.
release
=
capi_release
,
};
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
...
...
drivers/isdn/capi/capifs.c
View file @
142543df
...
...
@@ -72,16 +72,16 @@ static int capifs_revalidate(struct dentry *, int);
static
struct
inode
*
capifs_new_inode
(
struct
super_block
*
sb
);
static
struct
file_operations
capifs_root_operations
=
{
read:
generic_read_dir
,
readdir:
capifs_root_readdir
,
.
read
=
generic_read_dir
,
.
readdir
=
capifs_root_readdir
,
};
struct
inode_operations
capifs_root_inode_operations
=
{
lookup:
capifs_root_lookup
,
.
lookup
=
capifs_root_lookup
,
};
static
struct
dentry_operations
capifs_dentry_operations
=
{
d_revalidate:
capifs_revalidate
,
.
d_revalidate
=
capifs_revalidate
,
};
/*
...
...
@@ -222,8 +222,8 @@ static void capifs_put_super(struct super_block *sb)
}
static
struct
super_operations
capifs_sops
=
{
put_super:
capifs_put_super
,
statfs:
simple_statfs
,
.
put_super
=
capifs_put_super
,
.
statfs
=
simple_statfs
,
};
static
int
capifs_parse_options
(
char
*
options
,
struct
capifs_sb_info
*
sbi
)
...
...
@@ -371,10 +371,10 @@ static struct super_block *capifs_get_sb(struct file_system_type *fs_type,
}
static
struct
file_system_type
capifs_fs_type
=
{
owner:
THIS_MODULE
,
name:
"capifs"
,
get_sb:
capifs_get_sb
,
kill_sb:
kill_anon_super
,
.
owner
=
THIS_MODULE
,
.
name
=
"capifs"
,
.
get_sb
=
capifs_get_sb
,
.
kill_sb
=
kill_anon_super
,
};
void
capifs_new_ncci
(
char
type
,
unsigned
int
num
,
kdev_t
device
)
...
...
drivers/isdn/capi/capilib.c
View file @
142543df
...
...
@@ -4,7 +4,7 @@
#include <linux/isdn/capilli.h>
#define DBG(format, arg...) do { \
printk(KERN_DEBUG
__FUNCTION__ ": " format "\n"
, ## arg); \
printk(KERN_DEBUG
"%s: " format "\n" , __FUNCTION__
, ## arg); \
} while (0)
struct
capilib_msgidqueue
{
...
...
drivers/isdn/capi/kcapi.h
View file @
142543df
...
...
@@ -16,7 +16,7 @@
#include <linux/isdn/capilli.h>
#define DBG(format, arg...) do { \
printk(KERN_
INFO __FUNCTION__ ": " format "\n"
, ## arg); \
printk(KERN_
DEBUG "%s: " format "\n" , __FUNCTION__
, ## arg); \
} while (0)
...
...
drivers/isdn/capi/kcapi_proc.c
View file @
142543df
...
...
@@ -90,17 +90,17 @@ static int contrstats_show(struct seq_file *seq, void *v)
}
struct
seq_operations
seq_controller_ops
=
{
start:
controller_start
,
next:
controller_next
,
stop:
controller_stop
,
show:
controller_show
,
.
start
=
controller_start
,
.
next
=
controller_next
,
.
stop
=
controller_stop
,
.
show
=
controller_show
,
};
struct
seq_operations
seq_contrstats_ops
=
{
start:
controller_start
,
next:
controller_next
,
stop:
controller_stop
,
show:
contrstats_show
,
.
start
=
controller_start
,
.
next
=
controller_next
,
.
stop
=
controller_stop
,
.
show
=
contrstats_show
,
};
static
int
seq_controller_open
(
struct
inode
*
inode
,
struct
file
*
file
)
...
...
@@ -114,17 +114,17 @@ static int seq_contrstats_open(struct inode *inode, struct file *file)
}
static
struct
file_operations
proc_controller_ops
=
{
open:
seq_controller_open
,
read:
seq_read
,
llseek:
seq_lseek
,
release:
seq_release
,
.
open
=
seq_controller_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
};
static
struct
file_operations
proc_contrstats_ops
=
{
open:
seq_contrstats_open
,
read:
seq_read
,
llseek:
seq_lseek
,
release:
seq_release
,
.
open
=
seq_contrstats_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
};
// /proc/capi/applications:
...
...
@@ -193,17 +193,17 @@ applstats_show(struct seq_file *seq, void *v)
}
struct
seq_operations
seq_applications_ops
=
{
start:
applications_start
,
next:
applications_next
,
stop:
applications_stop
,
show:
applications_show
,
.
start
=
applications_start
,
.
next
=
applications_next
,
.
stop
=
applications_stop
,
.
show
=
applications_show
,
};
struct
seq_operations
seq_applstats_ops
=
{
start:
applications_start
,
next:
applications_next
,
stop:
applications_stop
,
show:
applstats_show
,
.
start
=
applications_start
,
.
next
=
applications_next
,
.
stop
=
applications_stop
,
.
show
=
applstats_show
,
};
static
int
...
...
@@ -219,17 +219,17 @@ seq_applstats_open(struct inode *inode, struct file *file)
}
static
struct
file_operations
proc_applications_ops
=
{
open:
seq_applications_open
,
read:
seq_read
,
llseek:
seq_lseek
,
release:
seq_release
,
.
open
=
seq_applications_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
};
static
struct
file_operations
proc_applstats_ops
=
{
open:
seq_applstats_open
,
read:
seq_read
,
llseek:
seq_lseek
,
release:
seq_release
,
.
open
=
seq_applstats_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
};
static
void
...
...
drivers/isdn/divert/divert_procfs.c
View file @
142543df
...
...
@@ -261,14 +261,14 @@ isdn_divert_ioctl(struct inode *inode, struct file *file,
#ifdef CONFIG_PROC_FS
static
struct
file_operations
isdn_fops
=
{
owner:
THIS_MODULE
,
llseek:
no_llseek
,
read:
isdn_divert_read
,
write:
isdn_divert_write
,
poll:
isdn_divert_poll
,
ioctl:
isdn_divert_ioctl
,
open:
isdn_divert_open
,
release:
isdn_divert_close
,
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
read
=
isdn_divert_read
,
.
write
=
isdn_divert_write
,
.
poll
=
isdn_divert_poll
,
.
ioctl
=
isdn_divert_ioctl
,
.
open
=
isdn_divert_open
,
.
release
=
isdn_divert_close
,
};
/****************************/
...
...
drivers/isdn/hardware/Config.in
View file @
142543df
...
...
@@ -2,4 +2,26 @@
# ISDN hardware drivers
#
source drivers/isdn/hardware/avm/Config.in
if [ "$CONFIG_ISDN_CAPI" != "n" ]; then
comment 'CAPI hardware drivers'
source drivers/isdn/hardware/avm/Config.in
fi
if [ "$CONFIG_ISDN" != "n" ]; then
comment 'ISDN4Linux hardware drivers'
source drivers/isdn/hisax/Config.in
mainmenu_option next_comment
comment 'Active cards'
source drivers/isdn/icn/Config.in
source drivers/isdn/pcbit/Config.in
source drivers/isdn/sc/Config.in
source drivers/isdn/act2000/Config.in
source drivers/isdn/eicon/Config.in
source drivers/isdn/tpam/Config.in
source drivers/isdn/hysdn/Config.in
endmenu
fi
drivers/isdn/hardware/avm/Config.in
View file @
142543df
...
...
@@ -3,7 +3,7 @@
#
mainmenu_option next_comment
comment '
Drivers for a
ctive AVM cards'
comment '
A
ctive AVM cards'
bool 'Support AVM cards' CONFIG_CAPI_AVM
...
...
drivers/isdn/hardware/avm/b1pci.c
View file @
142543df
...
...
@@ -352,10 +352,10 @@ static void __devexit b1pci_pci_remove(struct pci_dev *pdev)
}
static
struct
pci_driver
b1pci_pci_driver
=
{
name:
"b1pci"
,
id_table:
b1pci_pci_tbl
,
probe:
b1pci_pci_probe
,
remove:
__devexit_p
(
b1pci_pci_remove
),
.
name
=
"b1pci"
,
.
id_table
=
b1pci_pci_tbl
,
.
probe
=
b1pci_pci_probe
,
.
remove
=
__devexit_p
(
b1pci_pci_remove
),
};
static
int
__init
b1pci_init
(
void
)
...
...
drivers/isdn/hardware/avm/c4.c
View file @
142543df
...
...
@@ -1232,10 +1232,10 @@ static int __devinit c4_probe(struct pci_dev *dev,
}
static
struct
pci_driver
c4_pci_driver
=
{
name:
"c4"
,
id_table:
c4_pci_tbl
,
probe:
c4_probe
,
remove:
c4_remove
,
.
name
=
"c4"
,
.
id_table
=
c4_pci_tbl
,
.
probe
=
c4_probe
,
.
remove
=
c4_remove
,
};
static
int
__init
c4_init
(
void
)
...
...
drivers/isdn/hardware/avm/t1pci.c
View file @
142543df
...
...
@@ -215,10 +215,10 @@ static int __devinit t1pci_probe(struct pci_dev *dev,
}
static
struct
pci_driver
t1pci_pci_driver
=
{
name:
"t1pci"
,
id_table:
t1pci_pci_tbl
,
probe:
t1pci_probe
,
remove:
t1pci_remove
,
.
name
=
"t1pci"
,
.
id_table
=
t1pci_pci_tbl
,
.
probe
=
t1pci_probe
,
.
remove
=
t1pci_remove
,
};
static
int
__init
t1pci_init
(
void
)
...
...
drivers/isdn/hisax/Config.in
View file @
142543df
mainmenu_option next_comment
comment 'Passive
ISDN
cards'
comment 'Passive cards'
dep_tristate 'HiSax SiemensChipSet driver support' CONFIG_ISDN_DRV_HISAX $CONFIG_ISDN
if [ "$CONFIG_ISDN_DRV_HISAX" != "n" ]; then
comment ' D-channel protocol features'
...
...
drivers/isdn/hisax/config.c
View file @
142543df
...
...
@@ -1919,6 +1919,8 @@ static void hisax_b_l1l2(struct hisax_if *ifc, int pr, void *arg)
break
;
case
PH_DEACTIVATE
|
INDICATION
:
L1L2
(
st
,
pr
,
NULL
);
clear_bit
(
BC_FLG_BUSY
,
&
bcs
->
Flag
);
skb_queue_purge
(
&
bcs
->
squeue
);
bcs
->
hw
.
b_if
=
NULL
;
break
;
case
PH_DATA
|
INDICATION
:
...
...
@@ -2006,6 +2008,9 @@ static void hisax_b_l2l1(struct PStack *st, int pr, void *arg)
else
set_bit
(
FLG_L1_PULL_REQ
,
&
st
->
l1
.
Flags
);
break
;
case
PH_DEACTIVATE
|
REQUEST
:
test_and_clear_bit
(
BC_FLG_BUSY
,
&
bcs
->
Flag
);
skb_queue_purge
(
&
bcs
->
squeue
);
default:
B_L2L1
(
b_if
,
pr
,
arg
);
break
;
...
...
drivers/isdn/hisax/hisax_debug.h
View file @
142543df
...
...
@@ -28,7 +28,7 @@
#define DBG(level, format, arg...) do { \
if (level & __debug_variable) \
printk(KERN_DEBUG
__FUNCTION__ ": " format "\n"
, ## arg); \
printk(KERN_DEBUG
"%s: " format "\n" , __FUNCTION__
, ## arg); \
} while (0)
#define DBG_PACKET(level,data,count) \
...
...
drivers/isdn/hisax/hisax_fcpcipnp.c
View file @
142543df
...
...
@@ -944,17 +944,17 @@ static void __devexit fcpnp_remove(struct pci_dev *pdev)
}
static
struct
pci_driver
fcpci_driver
=
{
name:
"fcpci"
,
probe:
fcpci_probe
,
remove:
__devexit_p
(
fcpci_remove
),
id_table:
fcpci_ids
,
.
name
=
"fcpci"
,
.
probe
=
fcpci_probe
,
.
remove
=
__devexit_p
(
fcpci_remove
),
.
id_table
=
fcpci_ids
,
};
static
struct
isapnp_driver
fcpnp_driver
=
{
name:
"fcpnp"
,
probe:
fcpnp_probe
,
remove:
__devexit_p
(
fcpnp_remove
),
id_table:
fcpnp_ids
,
.
name
=
"fcpnp"
,
.
probe
=
fcpnp_probe
,
.
remove
=
__devexit_p
(
fcpnp_remove
),
.
id_table
=
fcpnp_ids
,
};
static
int
__init
hisax_fcpcipnp_init
(
void
)
...
...
drivers/isdn/hisax/hisax_hfcpci.c
View file @
142543df
...
...
@@ -40,12 +40,12 @@ MODULE_AUTHOR("Kai Germaschewski <kai.germaschewski@gmx.de>/Werner Cornelius <we
MODULE_DESCRIPTION
(
"HFC PCI ISDN driver"
);
#define ID(ven, dev, name) \
{
vendor:
PCI_VENDOR_ID_##ven, \
device:
PCI_DEVICE_ID_##dev, \
subvendor:
PCI_ANY_ID, \
subdevice:
PCI_ANY_ID, \
class:
0, \
class_mask:
0, \
{
.vendor =
PCI_VENDOR_ID_##ven, \
.device =
PCI_DEVICE_ID_##dev, \
.subvendor =
PCI_ANY_ID, \
.subdevice =
PCI_ANY_ID, \
.class =
0, \
.class_mask =
0, \
driver_data: (unsigned long) name }
static
struct
pci_device_id
hfcpci_ids
[]
__devinitdata
=
{
...
...
@@ -1604,10 +1604,10 @@ static void __devexit hfcpci_remove(struct pci_dev *pdev)
}
static
struct
pci_driver
hfcpci_driver
=
{
name:
"hfcpci"
,
probe:
hfcpci_probe
,
remove:
hfcpci_remove
,
id_table:
hfcpci_ids
,
.
name
=
"hfcpci"
,
.
probe
=
hfcpci_probe
,
.
remove
=
hfcpci_remove
,
.
id_table
=
hfcpci_ids
,
};
static
int
__init
hisax_hfcpci_init
(
void
)
...
...
drivers/isdn/hisax/ipacx.c
View file @
142543df
...
...
@@ -66,9 +66,6 @@ ph_command(struct IsdnCardState *cs, unsigned int command)
if
(
cs
->
debug
&
L1_DEB_ISAC
)
debugl1
(
cs
,
"ph_command (%#x) in (%#x)"
,
command
,
cs
->
dc
.
isac
.
ph_state
);
//###################################
// printk(KERN_INFO "ph_command (%#x)\n", command);
//###################################
cs
->
writeisac
(
cs
,
IPACX_CIX0
,
(
command
<<
4
)
|
0x0E
);
}
...
...
@@ -82,9 +79,6 @@ cic_int(struct IsdnCardState *cs)
event
=
cs
->
readisac
(
cs
,
IPACX_CIR0
)
>>
4
;
if
(
cs
->
debug
&
L1_DEB_ISAC
)
debugl1
(
cs
,
"cic_int(event=%#x)"
,
event
);
//#########################################
// printk(KERN_INFO "cic_int(%x)\n", event);
//#########################################
cs
->
dc
.
isac
.
ph_state
=
event
;
dch_sched_event
(
cs
,
D_L1STATECHANGE
);
}
...
...
@@ -417,9 +411,6 @@ dch_int(struct IsdnCardState *cs)
int
count
;
istad
=
cs
->
readisac
(
cs
,
IPACX_ISTAD
);
//##############################################
// printk(KERN_WARNING "dch_int(istad=%02x)\n", istad);
//##############################################
if
(
istad
&
0x80
)
{
// RME
rstad
=
cs
->
readisac
(
cs
,
IPACX_RSTAD
);
...
...
@@ -714,9 +705,6 @@ bch_int(struct IsdnCardState *cs, u_char hscx)
bcs
=
cs
->
bcs
+
hscx
;
istab
=
cs
->
BC_Read_Reg
(
cs
,
hscx
,
IPACX_ISTAB
);
//##############################################
// printk(KERN_WARNING "bch_int(istab=%02x)\n", istab);
//##############################################
if
(
!
test_bit
(
BC_FLG_INIT
,
&
bcs
->
Flag
))
return
;
if
(
istab
&
0x80
)
{
// RME
...
...
@@ -963,15 +951,11 @@ interrupt_ipacx(struct IsdnCardState *cs)
u_char
ista
;
while
((
ista
=
cs
->
readisac
(
cs
,
IPACX_ISTA
)))
{
//#################################################
// printk(KERN_WARNING "interrupt_ipacx(ista=%02x)\n", ista);
//#################################################
if
(
ista
&
0x80
)
bch_int
(
cs
,
0
);
// B channel interrupts
if
(
ista
&
0x40
)
bch_int
(
cs
,
1
);
if
(
ista
&
0x01
)
dch_int
(
cs
);
// D channel
if
(
ista
&
0x10
)
cic_int
(
cs
);
// Layer 1 state
}
if
(
ista
&
0x80
)
bch_int
(
cs
,
0
);
// B channel interrupts
if
(
ista
&
0x40
)
bch_int
(
cs
,
1
);
if
(
ista
&
0x01
)
dch_int
(
cs
);
// D channel
if
(
ista
&
0x10
)
cic_int
(
cs
);
// Layer 1 state
}
}
//----------------------------------------------------------
...
...
@@ -1003,9 +987,6 @@ void __init
init_ipacx
(
struct
IsdnCardState
*
cs
,
int
part
)
{
if
(
part
&
1
)
{
// initialise chip
//##################################################
// printk(KERN_INFO "init_ipacx(%x)\n", part);
//##################################################
clear_pending_ints
(
cs
);
bch_init
(
cs
,
0
);
bch_init
(
cs
,
1
);
...
...
drivers/isdn/hisax/st5481.h
View file @
142543df
...
...
@@ -219,13 +219,13 @@ enum {
#define L1_EVENT_COUNT (EV_TIMER3 + 1)
#define ERR(format, arg...) \
printk(KERN_ERR __FILE__ ":
" __FUNCTION__ ": " format "\n"
, ## arg)
printk(KERN_ERR __FILE__ ":
%s: " format "\n" , __FUNCTION__
, ## arg)
#define WARN(format, arg...) \
printk(KERN_WARNING __FILE__ ":
" __FUNCTION__ ": " format "\n"
, ## arg)
printk(KERN_WARNING __FILE__ ":
%s: " format "\n" , __FUNCTION__
, ## arg)
#define INFO(format, arg...) \
printk(KERN_INFO __FILE__ ":
" __FUNCTION__ ": " format "\n"
, ## arg)
printk(KERN_INFO __FILE__ ":
%s: " format "\n" , __FUNCTION__
, ## arg)
#include "st5481_hdlc.h"
#include "fsm.h"
...
...
drivers/isdn/hisax/st5481_init.c
View file @
142543df
...
...
@@ -176,10 +176,10 @@ static struct usb_device_id st5481_ids[] = {
MODULE_DEVICE_TABLE
(
usb
,
st5481_ids
);
static
struct
usb_driver
st5481_usb_driver
=
{
name:
"st5481_usb"
,
probe:
probe_st5481
,
disconnect:
__devexit_p
(
disconnect_st5481
),
id_table:
st5481_ids
,
.
name
=
"st5481_usb"
,
.
probe
=
probe_st5481
,
.
disconnect
=
__devexit_p
(
disconnect_st5481
),
.
id_table
=
st5481_ids
,
};
static
int
__init
st5481_usb_init
(
void
)
...
...
drivers/isdn/hysdn/hysdn_procconf.c
View file @
142543df
...
...
@@ -377,11 +377,11 @@ hysdn_conf_close(struct inode *ino, struct file *filep)
/******************************************************/
static
struct
file_operations
conf_fops
=
{
llseek:
no_llseek
,
read:
hysdn_conf_read
,
write:
hysdn_conf_write
,
open:
hysdn_conf_open
,
release:
hysdn_conf_close
,
.
llseek
=
no_llseek
,
.
read
=
hysdn_conf_read
,
.
write
=
hysdn_conf_write
,
.
open
=
hysdn_conf_open
,
.
release
=
hysdn_conf_close
,
};
/*****************************/
...
...
drivers/isdn/hysdn/hysdn_proclog.c
View file @
142543df
...
...
@@ -389,12 +389,12 @@ hysdn_log_poll(struct file *file, poll_table * wait)
/**************************************************/
static
struct
file_operations
log_fops
=
{
llseek:
no_llseek
,
read:
hysdn_log_read
,
write:
hysdn_log_write
,
poll:
hysdn_log_poll
,
open:
hysdn_log_open
,
release:
hysdn_log_close
,
.
llseek
=
no_llseek
,
.
read
=
hysdn_log_read
,
.
write
=
hysdn_log_write
,
.
poll
=
hysdn_log_poll
,
.
open
=
hysdn_log_open
,
.
release
=
hysdn_log_close
,
};
...
...
drivers/isdn/i4l/Config.in
View file @
142543df
...
...
@@ -24,22 +24,3 @@ comment 'ISDN feature submodules'
dep_tristate 'Support isdn diversion services' CONFIG_ISDN_DIVERSION $CONFIG_ISDN
endmenu
comment 'low-level hardware drivers'
source drivers/isdn/hisax/Config.in
### Active ISDN cards
mainmenu_option next_comment
comment 'Active ISDN cards'
source drivers/isdn/icn/Config.in
source drivers/isdn/pcbit/Config.in
source drivers/isdn/sc/Config.in
source drivers/isdn/act2000/Config.in
source drivers/isdn/eicon/Config.in
source drivers/isdn/tpam/Config.in
source drivers/isdn/hysdn/Config.in
endmenu
drivers/isdn/i4l/isdn_audio.c
View file @
142543df
/* $Id: isdn_audio.c,v 1.21.6.
2 2001/09/23 22:24:31 kai
Exp $
/* $Id: isdn_audio.c,v 1.21.6.
3 2002/08/13 09:45:33 keil
Exp $
*
* Linux ISDN subsystem, audio conversion and compression (linklevel).
*
* Copyright 1994-1999 by Fritz Elfert (fritz@isdn4linux.de)
* DTMF code (c) 1996 by Christian Mock (cm@
kukuruz.ping
.at)
* DTMF code (c) 1996 by Christian Mock (cm@
tahina.priv
.at)
* Silence detection (c) 1998 by Armin Schindler (mac@gismo.telekom.de)
*
* This software may be used and distributed according to the terms
...
...
@@ -15,7 +15,7 @@
#include "isdn_audio.h"
#include "isdn_common.h"
char
*
isdn_audio_revision
=
"$Revision: 1.21.6.
2
$"
;
char
*
isdn_audio_revision
=
"$Revision: 1.21.6.
3
$"
;
/*
* Misc. lookup-tables.
...
...
drivers/isdn/i4l/isdn_common.c
View file @
142543df
...
...
@@ -1090,14 +1090,14 @@ isdn_status_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
static
struct
file_operations
isdn_status_fops
=
{
owner:
THIS_MODULE
,
llseek:
no_llseek
,
read:
isdn_status_read
,
write:
isdn_status_write
,
poll:
isdn_status_poll
,
ioctl:
isdn_status_ioctl
,
open:
isdn_status_open
,
release:
isdn_status_release
,
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
read
=
isdn_status_read
,
.
write
=
isdn_status_write
,
.
poll
=
isdn_status_poll
,
.
ioctl
=
isdn_status_ioctl
,
.
open
=
isdn_status_open
,
.
release
=
isdn_status_release
,
};
/*
...
...
@@ -1609,14 +1609,14 @@ isdn_ctrl_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
static
struct
file_operations
isdn_ctrl_fops
=
{
owner:
THIS_MODULE
,
llseek:
no_llseek
,
read:
isdn_ctrl_read
,
write:
isdn_ctrl_write
,
poll:
isdn_ctrl_poll
,
ioctl:
isdn_ctrl_ioctl
,
open:
isdn_ctrl_open
,
release:
isdn_ctrl_release
,
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
read
=
isdn_ctrl_read
,
.
write
=
isdn_ctrl_write
,
.
poll
=
isdn_ctrl_poll
,
.
ioctl
=
isdn_ctrl_ioctl
,
.
open
=
isdn_ctrl_open
,
.
release
=
isdn_ctrl_release
,
};
/*
...
...
@@ -1661,8 +1661,8 @@ isdn_open(struct inode * inode, struct file * file)
static
struct
file_operations
isdn_fops
=
{
owner:
THIS_MODULE
,
open:
isdn_open
,
.
owner
=
THIS_MODULE
,
.
open
=
isdn_open
,
};
char
*
...
...
drivers/isdn/i4l/isdn_net.c
View file @
142543df
...
...
@@ -48,6 +48,12 @@ enum {
ST_WAIT_BEFORE_CB
,
};
enum
{
ST_CHARGE_NULL
,
ST_CHARGE_GOT_CINF
,
/* got a first charge info */
ST_CHARGE_HAVE_CINT
,
/* got a second chare info and thus the timing */
};
/* keep clear of ISDN_CMD_* and ISDN_STAT_* */
enum
{
EV_NET_DIAL
=
0x200
,
...
...
@@ -349,12 +355,7 @@ isdn_net_unbind_channel(isdn_net_local * lp)
* outgoing packet), if counter exceeds configured limit either do a
* hangup immediately or - if configured - wait until just before the next
* charge-info.
*
* cps-calculation (needed for dynamic channel-bundling):
* Since this function is called every second, simply reset the
* byte-counter of the interface after copying it to the cps-variable.
*/
unsigned
long
last_jiffies
=
-
HZ
;
void
isdn_net_autohup
()
...
...
@@ -366,59 +367,54 @@ isdn_net_autohup()
list_for_each
(
l
,
&
isdn_net_devs
)
{
isdn_net_dev
*
p
=
list_entry
(
l
,
isdn_net_dev
,
global_list
);
isdn_net_local
*
l
=
&
p
->
local
;
if
(
jiffies
==
last_jiffies
)
l
->
cps
=
l
->
transcount
;
else
l
->
cps
=
(
l
->
transcount
*
HZ
)
/
(
jiffies
-
last_jiffies
);
l
->
transcount
=
0
;
if
(
dev
->
net_verbose
>
3
)
printk
(
KERN_DEBUG
"%s: %d bogocps
\n
"
,
l
->
name
,
l
->
cps
);
if
((
l
->
flags
&
ISDN_NET_CONNECTED
)
&&
(
l
->
dialstate
==
ST_ACTIVE
))
{
if
(
!
(
l
->
flags
&
ISDN_NET_CONNECTED
)
||
l
->
dialstate
!=
ST_ACTIVE
)
continue
;
if
(
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
||
ISDN_NET_DIALMODE
(
*
l
)
==
ISDN_NET_DM_OFF
)
{
isdn_net_hangup
(
&
p
->
dev
);
continue
;
}
dbg_net_dial
(
"%s: huptimer %d, onhtime %d, chargetime %ld, chargeint %d
\n
"
,
l
->
name
,
l
->
huptimer
,
l
->
onhtime
,
l
->
chargetime
,
l
->
chargeint
);
if
(
!
(
l
->
onhtime
))
continue
;
if
(
l
->
huptimer
++
<=
l
->
onhtime
)
{
anymore
=
1
;
l
->
huptimer
++
;
printk
(
"huptimer %d, onhtime %d, chargetime %d, chargeint %d
\n
"
,
l
->
huptimer
,
l
->
onhtime
,
l
->
chargetime
,
l
->
chargeint
);
/*
* if there is some dialmode where timeout-hangup
* should _not_ be done, check for that here
*/
if
((
l
->
onhtime
)
&&
(
l
->
huptimer
>
l
->
onhtime
))
{
if
(
l
->
hupflags
&
ISDN_MANCHARGE
&&
l
->
hupflags
&
ISDN_CHARGEHUP
)
{
while
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
))
l
->
chargetime
+=
l
->
chargeint
;
if
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
-
2
*
HZ
))
if
(
l
->
outgoing
||
l
->
hupflags
&
ISDN_INHUP
)
{
HERE
;
isdn_net_hangup
(
&
p
->
dev
);
}
}
else
if
(
l
->
outgoing
)
{
if
(
l
->
hupflags
&
ISDN_CHARGEHUP
)
{
if
(
l
->
hupflags
&
ISDN_WAITCHARGE
)
{
printk
(
KERN_DEBUG
"isdn_net: Hupflags of %s are %X
\n
"
,
l
->
name
,
l
->
hupflags
);
isdn_net_hangup
(
&
p
->
dev
);
}
else
if
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
))
{
printk
(
KERN_DEBUG
"isdn_net: %s: chtime = %lu, chint = %d
\n
"
,
l
->
name
,
l
->
chargetime
,
l
->
chargeint
);
isdn_net_hangup
(
&
p
->
dev
);
}
}
}
else
if
(
l
->
hupflags
&
ISDN_INHUP
)
{
HERE
;
continue
;
}
if
(
l
->
hupflags
&
ISDN_MANCHARGE
&&
l
->
hupflags
&
ISDN_CHARGEHUP
)
{
while
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
))
l
->
chargetime
+=
l
->
chargeint
;
if
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
-
2
*
HZ
))
{
if
(
l
->
outgoing
||
l
->
hupflags
&
ISDN_INHUP
)
{
isdn_net_hangup
(
&
p
->
dev
);
continue
;
}
}
if
(
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
||
(
ISDN_NET_DIALMODE
(
*
l
)
==
ISDN_NET_DM_OFF
))
{
isdn_net_hangup
(
&
p
->
dev
);
break
;
}
else
if
(
l
->
outgoing
)
{
if
(
l
->
hupflags
&
ISDN_CHARGEHUP
)
{
if
(
l
->
charge_state
!=
ST_CHARGE_HAVE_CINT
)
{
dbg_net_dial
(
"%s: did not get CINT
\n
"
,
l
->
name
);
isdn_net_hangup
(
&
p
->
dev
);
continue
;
}
else
if
(
time_after
(
jiffies
,
l
->
chargetime
+
l
->
chargeint
))
{
dbg_net_dial
(
"%s: chtime = %lu, chint = %d
\n
"
,
l
->
name
,
l
->
chargetime
,
l
->
chargeint
);
isdn_net_hangup
(
&
p
->
dev
);
continue
;
}
}
}
else
if
(
l
->
hupflags
&
ISDN_INHUP
)
{
isdn_net_hangup
(
&
p
->
dev
);
continue
;
}
anymore
=
1
;
}
last_jiffies
=
jiffies
;
isdn_timer_ctrl
(
ISDN_TIMER_NETHANGUP
,
anymore
);
}
...
...
@@ -453,6 +449,10 @@ static void isdn_net_connected(isdn_net_local *lp)
lp
->
dialstarted
=
0
;
lp
->
dialwait_timer
=
0
;
lp
->
transcount
=
0
;
lp
->
cps
=
0
;
lp
->
last_jiffies
=
jiffies
;
#ifdef CONFIG_ISDN_PPP
if
(
lp
->
p_encap
==
ISDN_NET_ENCAP_SYNCPPP
)
isdn_ppp_wakeup_daemon
(
lp
);
...
...
@@ -499,7 +499,7 @@ isdn_net_dial_timer(unsigned long data)
isdn_BUG
();
return
;
}
printk
(
"%s: %s %#x
\n
"
,
__FUNCTION__
,
lp
->
name
,
lp
->
dial_event
);
printk
(
"%s: %s %#x
\n
"
,
__FUNCTION__
,
lp
->
name
,
lp
->
dial_event
);
isdn_net_handle_event
(
lp
,
lp
->
dial_event
,
NULL
);
}
...
...
@@ -608,13 +608,11 @@ do_dialout(isdn_net_local *lp)
}
lp
->
huptimer
=
0
;
lp
->
outgoing
=
1
;
if
(
lp
->
chargeint
)
{
lp
->
hupflags
|=
ISDN_HAVECHARGE
;
lp
->
hupflags
&=
~
ISDN_WAITCHARGE
;
}
else
{
lp
->
hupflags
|=
ISDN_WAITCHARGE
;
lp
->
hupflags
&=
~
ISDN_HAVECHARGE
;
}
if
(
lp
->
chargeint
)
lp
->
charge_state
=
ST_CHARGE_HAVE_CINT
;
else
lp
->
charge_state
=
ST_CHARGE_NULL
;
if
(
lp
->
cbdelay
&&
(
lp
->
flags
&
ISDN_NET_CBOUT
))
{
lp
->
dial_timer
.
expires
=
jiffies
+
lp
->
cbdelay
;
lp
->
dial_event
=
EV_NET_TIMER_CB
;
...
...
@@ -701,15 +699,19 @@ isdn_net_handle_event(isdn_net_local *lp, int pr, void *arg)
* usage by isdn_net_autohup()
*/
lp
->
charge
++
;
if
(
lp
->
hupflags
&
ISDN_HAVECHARGE
)
{
lp
->
hupflags
&=
~
ISDN_WAITCHARGE
;
lp
->
chargeint
=
jiffies
-
lp
->
chargetime
-
(
2
*
HZ
);
switch
(
lp
->
charge_state
)
{
case
ST_CHARGE_NULL
:
lp
->
charge_state
=
ST_CHARGE_GOT_CINF
;
break
;
case
ST_CHARGE_GOT_CINF
:
lp
->
charge_state
=
ST_CHARGE_HAVE_CINT
;
/* fall through */
case
ST_CHARGE_HAVE_CINT
:
lp
->
chargeint
=
jiffies
-
lp
->
chargetime
-
2
*
HZ
;
break
;
}
if
(
lp
->
hupflags
&
ISDN_WAITCHARGE
)
lp
->
hupflags
|=
ISDN_HAVECHARGE
;
lp
->
chargetime
=
jiffies
;
printk
(
KERN_DEBUG
"isdn_net: Got CINF chargetime of %s now %lu
\n
"
,
lp
->
name
,
lp
->
chargetime
);
dbg_net_dial
(
"%s: got CINF
\n
"
,
lp
->
name
);
return
1
;
}
break
;
...
...
@@ -1054,7 +1056,7 @@ isdn_net_xmit(struct net_device *ndev, struct sk_buff *skb)
int
retv
=
0
;
if
(((
isdn_net_local
*
)
(
ndev
->
priv
))
->
master
)
{
printk
(
"isdn BUG at %s:%d!
\n
"
,
__FILE__
,
__LINE__
);
isdn_BUG
(
);
dev_kfree_skb
(
skb
);
return
0
;
}
...
...
@@ -1083,6 +1085,14 @@ isdn_net_xmit(struct net_device *ndev, struct sk_buff *skb)
* should move to userspace and get based on an overall cps
* calculation
*/
if
(
jiffies
!=
lp
->
last_jiffies
)
{
lp
->
cps
=
lp
->
transcount
*
HZ
/
(
jiffies
-
lp
->
last_jiffies
);
lp
->
last_jiffies
=
jiffies
;
lp
->
transcount
=
0
;
}
if
(
dev
->
net_verbose
>
3
)
printk
(
KERN_DEBUG
"%s: %d bogocps
\n
"
,
lp
->
name
,
lp
->
cps
);
if
(
lp
->
cps
>
lp
->
triggercps
)
{
if
(
lp
->
slave
)
{
if
(
!
lp
->
sqfull
)
{
...
...
@@ -2381,8 +2391,7 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
lp
->
outgoing
=
0
;
lp
->
huptimer
=
0
;
lp
->
hupflags
|=
ISDN_WAITCHARGE
;
lp
->
hupflags
&=
~
ISDN_HAVECHARGE
;
lp
->
charge_state
=
ST_CHARGE_NULL
;
/* Got incoming Call, setup L2 and L3 protocols,
* then wait for D-Channel-connect
*/
...
...
@@ -2837,8 +2846,9 @@ isdn_net_setcfg(isdn_net_ioctl_cfg * cfg)
else
lp
->
hupflags
&=
~
ISDN_INHUP
;
if
(
cfg
->
chargeint
>
10
)
{
lp
->
hupflags
|=
ISDN_HAVECHARGE
|
ISDN_MANCHARGE
;
lp
->
chargeint
=
cfg
->
chargeint
*
HZ
;
lp
->
charge_state
=
ST_CHARGE_HAVE_CINT
;
lp
->
hupflags
|=
ISDN_MANCHARGE
;
}
if
(
cfg
->
p_encap
!=
lp
->
p_encap
)
{
if
(
cfg
->
p_encap
==
ISDN_NET_ENCAP_RAWIP
)
{
...
...
drivers/isdn/i4l/isdn_net.h
View file @
142543df
...
...
@@ -12,8 +12,6 @@
*/
/* Definitions for hupflags: */
#define ISDN_WAITCHARGE 1
/* did not get a charge info yet */
#define ISDN_HAVECHARGE 2
/* We know a charge info */
#define ISDN_CHARGEHUP 4
/* We want to use the charge mechanism */
#define ISDN_INHUP 8
/* Even if incoming, close after huptimeout */
#define ISDN_MANCHARGE 16
/* Charge Interval manually set */
...
...
drivers/isdn/i4l/isdn_ppp.c
View file @
142543df
...
...
@@ -852,14 +852,14 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
struct
file_operations
isdn_ppp_fops
=
{
owner:
THIS_MODULE
,
llseek:
no_llseek
,
read:
isdn_ppp_read
,
write:
isdn_ppp_write
,
poll:
isdn_ppp_poll
,
ioctl:
isdn_ppp_ioctl
,
open:
isdn_ppp_open
,
release:
isdn_ppp_release
,
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
read
=
isdn_ppp_read
,
.
write
=
isdn_ppp_write
,
.
poll
=
isdn_ppp_poll
,
.
ioctl
=
isdn_ppp_ioctl
,
.
open
=
isdn_ppp_open
,
.
release
=
isdn_ppp_release
,
};
/*
...
...
drivers/isdn/tpam/tpam_main.c
View file @
142543df
...
...
@@ -251,10 +251,10 @@ static struct pci_device_id tpam_pci_tbl[] __devinitdata = {
MODULE_DEVICE_TABLE
(
pci
,
tpam_pci_tbl
);
static
struct
pci_driver
tpam_driver
=
{
name:
"tpam"
,
id_table:
tpam_pci_tbl
,
probe:
tpam_probe
,
remove:
__devexit_p
(
tpam_remove
),
.
name
=
"tpam"
,
.
id_table
=
tpam_pci_tbl
,
.
probe
=
tpam_probe
,
.
remove
=
__devexit_p
(
tpam_remove
),
};
static
int
__init
tpam_init
(
void
)
{
...
...
include/linux/isdn.h
View file @
142543df
...
...
@@ -317,6 +317,7 @@ typedef struct isdn_net_local_s {
/* 0 = Transparent */
int
huptimer
;
/* Timeout-counter for auto-hangup */
int
charge
;
/* Counter for charging units */
int
charge_state
;
/* ChargeInfo state machine */
ulong
chargetime
;
/* Timer for Charging info */
int
hupflags
;
/* Flags for charge-unit-hangup: */
/* bit0: chargeint is invalid */
...
...
@@ -329,6 +330,7 @@ typedef struct isdn_net_local_s {
int
onum
;
/* Flag: at least 1 outgoing number */
int
cps
;
/* current speed of this interface */
int
transcount
;
/* byte-counter for cps-calculation */
int
last_jiffies
;
/* when transcount was reset */
int
sqfull
;
/* Flag: netdev-queue overloaded */
ulong
sqfull_stamp
;
/* Start-Time of overload */
ulong
slavedelay
;
/* Dynamic bundling delaytime */
...
...
include/linux/mm.h
View file @
142543df
...
...
@@ -199,11 +199,12 @@ struct page {
#define page_count(p) atomic_read(&(p)->count)
#define set_page_count(p,v) atomic_set(&(p)->count, v)
extern
void
FASTCALL
(
__page_cache_release
(
struct
page
*
));
#define put_page(p) \
do { \
if (put_page_testzero(p)) \
__page_cache_release(p); \
#define put_page(p)
\
do {
\
if (
!PageReserved(p) &&
put_page_testzero(p)) \
__page_cache_release(p);
\
} while (0)
void
FASTCALL
(
__free_pages_ok
(
struct
page
*
page
,
unsigned
int
order
));
/*
* Multiple processes may "see" the same page. E.g. for untouched
...
...
include/linux/sched.h
View file @
142543df
...
...
@@ -47,8 +47,8 @@ struct exec_domain;
#define CLONE_SYSVSEM 0x00040000
/* share system V SEM_UNDO semantics */
#define CLONE_SETTLS 0x00080000
/* create a new TLS for the child */
#define CLONE_SETTID 0x00100000
/* write the TID back to userspace */
#define CLONE_
DETACHED 0x00200000
/* parent wants no child-exit signal
*/
#define CLONE_
RELEASE_VM 0x00400000
/* release the userspace VM
*/
#define CLONE_
CLEARTID 0x00200000
/* clear the userspace TID
*/
#define CLONE_
DETACHED 0x00400000
/* parent wants no child-exit signal
*/
#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)
...
...
@@ -307,7 +307,7 @@ struct task_struct {
wait_queue_head_t
wait_chldexit
;
/* for wait4() */
struct
completion
*
vfork_done
;
/* for vfork() */
long
*
user_
vm_lock
;
/* for CLONE_RELEASE_VM
*/
long
*
user_
tid
;
/* for CLONE_CLEARTID
*/
unsigned
long
rt_priority
;
unsigned
long
it_real_value
,
it_prof_value
,
it_virt_value
;
...
...
init/main.c
View file @
142543df
...
...
@@ -82,6 +82,12 @@ extern void tc_init(void);
extern
void
ipc_init
(
void
);
#endif
/*
* Are we up and running (ie do we have all the infrastructure
* set up)
*/
int
system_running
=
0
;
/*
* Boot command-line arguments
*/
...
...
@@ -559,6 +565,7 @@ static int init(void * unused)
*/
free_initmem
();
unlock_kernel
();
system_running
=
1
;
kstat
.
pgfree
=
0
;
...
...
kernel/fork.c
View file @
142543df
...
...
@@ -186,6 +186,8 @@ static int get_pid(unsigned long flags)
next_safe
=
p
->
pid
;
if
(
p
->
pgrp
>
last_pid
&&
next_safe
>
p
->
pgrp
)
next_safe
=
p
->
pgrp
;
if
(
p
->
tgid
>
last_pid
&&
next_safe
>
p
->
tgid
)
next_safe
=
p
->
tgid
;
if
(
p
->
session
>
last_pid
&&
next_safe
>
p
->
session
)
next_safe
=
p
->
session
;
}
...
...
@@ -368,12 +370,12 @@ void mm_release(void)
tsk
->
vfork_done
=
NULL
;
complete
(
vfork_done
);
}
if
(
tsk
->
user_
vm_lock
)
if
(
tsk
->
user_
tid
)
/*
* We dont check the error code - if userspace has
* not set up a proper pointer then tough luck.
*/
put_user
(
0UL
,
tsk
->
user_
vm_lock
);
put_user
(
0UL
,
tsk
->
user_
tid
);
}
static
int
copy_mm
(
unsigned
long
clone_flags
,
struct
task_struct
*
tsk
)
...
...
kernel/kmod.c
View file @
142543df
...
...
@@ -32,7 +32,7 @@
#include <asm/uaccess.h>
extern
int
max_threads
;
extern
int
max_threads
,
system_running
;
static
inline
void
use_init_fs_context
(
void
)
...
...
@@ -158,6 +158,9 @@ static int exec_modprobe(void * module_name)
char
*
argv
[]
=
{
modprobe_path
,
"-s"
,
"-k"
,
"--"
,
(
char
*
)
module_name
,
NULL
};
int
ret
;
if
(
!
system_running
)
return
-
EBUSY
;
ret
=
exec_usermodehelper
(
modprobe_path
,
argv
,
envp
);
if
(
ret
)
{
static
unsigned
long
last
;
...
...
@@ -197,10 +200,9 @@ int request_module(const char * module_name)
unsigned
long
saved_policy
=
current
->
policy
;
current
->
policy
=
SCHED_NORMAL
;
/* Don't allow request_module() before the root fs is mounted! */
if
(
!
current
->
fs
->
root
)
{
printk
(
KERN_ERR
"request_module[%s]: Root fs not mounted
\n
"
,
module_name
);
/* Don't allow request_module() when the system isn't set up */
if
(
!
system_running
)
{
printk
(
KERN_ERR
"request_module[%s]: not ready
\n
"
,
module_name
);
ret
=
-
EPERM
;
goto
out
;
}
...
...
@@ -357,6 +359,9 @@ int call_usermodehelper(char *path, char **argv, char **envp)
.
data
=
&
sub_info
,
};
if
(
!
system_running
)
return
-
EBUSY
;
if
(
path
[
0
]
==
'\0'
)
goto
out
;
...
...
kernel/sched.c
View file @
142543df
...
...
@@ -214,8 +214,7 @@ static inline runqueue_t *this_rq_lock(void)
static
inline
void
rq_unlock
(
runqueue_t
*
rq
)
{
spin_unlock
(
&
rq
->
lock
);
local_irq_enable
();
spin_unlock_irq
(
&
rq
->
lock
);
}
/*
...
...
kernel/sys.c
View file @
142543df
...
...
@@ -67,6 +67,7 @@ int fs_overflowgid = DEFAULT_FS_OVERFLOWUID;
int
C_A_D
=
1
;
int
cad_pid
=
1
;
extern
int
system_running
;
/*
* Notifier list for kernel code which wants to be called
...
...
@@ -323,6 +324,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void * arg)
switch
(
cmd
)
{
case
LINUX_REBOOT_CMD_RESTART
:
notifier_call_chain
(
&
reboot_notifier_list
,
SYS_RESTART
,
NULL
);
system_running
=
0
;
device_shutdown
();
printk
(
KERN_EMERG
"Restarting system.
\n
"
);
machine_restart
(
NULL
);
...
...
@@ -338,6 +340,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void * arg)
case
LINUX_REBOOT_CMD_HALT
:
notifier_call_chain
(
&
reboot_notifier_list
,
SYS_HALT
,
NULL
);
system_running
=
0
;
device_shutdown
();
printk
(
KERN_EMERG
"System halted.
\n
"
);
machine_halt
();
...
...
@@ -346,6 +349,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void * arg)
case
LINUX_REBOOT_CMD_POWER_OFF
:
notifier_call_chain
(
&
reboot_notifier_list
,
SYS_POWER_OFF
,
NULL
);
system_running
=
0
;
device_shutdown
();
printk
(
KERN_EMERG
"Power down.
\n
"
);
machine_power_off
();
...
...
@@ -360,6 +364,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void * arg)
buffer
[
sizeof
(
buffer
)
-
1
]
=
'\0'
;
notifier_call_chain
(
&
reboot_notifier_list
,
SYS_RESTART
,
buffer
);
system_running
=
0
;
device_shutdown
();
printk
(
KERN_EMERG
"Restarting system with command '%s'.
\n
"
,
buffer
);
machine_restart
(
buffer
);
...
...
mm/page_alloc.c
View file @
142543df
...
...
@@ -80,8 +80,7 @@ static inline int bad_range(zone_t *zone, struct page *page)
* -- wli
*/
static
void
FASTCALL
(
__free_pages_ok
(
struct
page
*
page
,
unsigned
int
order
));
static
void
__free_pages_ok
(
struct
page
*
page
,
unsigned
int
order
)
void
__free_pages_ok
(
struct
page
*
page
,
unsigned
int
order
)
{
unsigned
long
index
,
page_idx
,
mask
,
flags
;
free_area_t
*
area
;
...
...
mm/swap.c
View file @
142543df
...
...
@@ -89,7 +89,7 @@ void __page_cache_release(struct page *page)
del_page_from_inactive_list
(
page
);
spin_unlock_irqrestore
(
&
_pagemap_lru_lock
,
flags
);
}
__free_page
(
page
);
__free_page
s_ok
(
page
,
0
);
}
/*
...
...
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