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
9ccf0731
Commit
9ccf0731
authored
Feb 08, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/gregkh/linux/driver-2.6
into home.osdl.org:/home/torvalds/v2.5/linux
parents
90c9ddf6
8be9c8de
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
37 additions
and
61 deletions
+37
-61
drivers/base/class.c
drivers/base/class.c
+7
-18
drivers/base/class_simple.c
drivers/base/class_simple.c
+19
-3
drivers/base/core.c
drivers/base/core.c
+0
-23
drivers/char/tty_io.c
drivers/char/tty_io.c
+0
-1
drivers/ieee1394/amdtp.c
drivers/ieee1394/amdtp.c
+0
-1
drivers/ieee1394/dv1394.c
drivers/ieee1394/dv1394.c
+0
-1
drivers/ieee1394/raw1394.c
drivers/ieee1394/raw1394.c
+0
-1
drivers/ieee1394/video1394.c
drivers/ieee1394/video1394.c
+0
-1
drivers/scsi/sg.c
drivers/scsi/sg.c
+0
-1
drivers/scsi/st.c
drivers/scsi/st.c
+0
-4
fs/char_dev.c
fs/char_dev.c
+4
-3
include/linux/cdev.h
include/linux/cdev.h
+2
-2
include/linux/device.h
include/linux/device.h
+2
-2
lib/kobject.c
lib/kobject.c
+3
-0
No files found.
drivers/base/class.c
View file @
9ccf0731
...
...
@@ -3,8 +3,8 @@
*
* Copyright (c) 2002-3 Patrick Mochel
* Copyright (c) 2002-3 Open Source Development Labs
* Copyright (c) 2003 Greg Kroah-Hartman
* Copyright (c) 2003 IBM Corp.
* Copyright (c) 2003
-2004
Greg Kroah-Hartman
* Copyright (c) 2003
-2004
IBM Corp.
*
* This file is released under the GPLv2
*
...
...
@@ -278,7 +278,6 @@ int class_device_add(struct class_device *class_dev)
{
struct
class
*
parent
;
struct
class_interface
*
class_intf
;
struct
list_head
*
entry
;
int
error
;
class_dev
=
class_device_get
(
class_dev
);
...
...
@@ -302,11 +301,9 @@ int class_device_add(struct class_device *class_dev)
if
(
parent
)
{
down_write
(
&
parent
->
subsys
.
rwsem
);
list_add_tail
(
&
class_dev
->
node
,
&
parent
->
children
);
list_for_each
(
entry
,
&
parent
->
interfaces
)
{
class_intf
=
container_of
(
entry
,
struct
class_interface
,
node
);
list_for_each_entry
(
class_intf
,
&
parent
->
interfaces
,
node
)
if
(
class_intf
->
add
)
class_intf
->
add
(
class_dev
);
}
up_write
(
&
parent
->
subsys
.
rwsem
);
}
...
...
@@ -330,16 +327,13 @@ void class_device_del(struct class_device *class_dev)
{
struct
class
*
parent
=
class_dev
->
class
;
struct
class_interface
*
class_intf
;
struct
list_head
*
entry
;
if
(
parent
)
{
down_write
(
&
parent
->
subsys
.
rwsem
);
list_del_init
(
&
class_dev
->
node
);
list_for_each
(
entry
,
&
parent
->
interfaces
)
{
class_intf
=
container_of
(
entry
,
struct
class_interface
,
node
);
list_for_each_entry
(
class_intf
,
&
parent
->
interfaces
,
node
)
if
(
class_intf
->
remove
)
class_intf
->
remove
(
class_dev
);
}
up_write
(
&
parent
->
subsys
.
rwsem
);
}
...
...
@@ -395,7 +389,6 @@ int class_interface_register(struct class_interface *class_intf)
{
struct
class
*
parent
;
struct
class_device
*
class_dev
;
struct
list_head
*
entry
;
if
(
!
class_intf
||
!
class_intf
->
class
)
return
-
ENODEV
;
...
...
@@ -408,11 +401,9 @@ int class_interface_register(struct class_interface *class_intf)
list_add_tail
(
&
class_intf
->
node
,
&
parent
->
interfaces
);
if
(
class_intf
->
add
)
{
list_for_each
(
entry
,
&
parent
->
children
)
{
class_dev
=
container_of
(
entry
,
struct
class_device
,
node
);
list_for_each_entry
(
class_dev
,
&
parent
->
children
,
node
)
class_intf
->
add
(
class_dev
);
}
}
up_write
(
&
parent
->
subsys
.
rwsem
);
return
0
;
...
...
@@ -421,7 +412,7 @@ int class_interface_register(struct class_interface *class_intf)
void
class_interface_unregister
(
struct
class_interface
*
class_intf
)
{
struct
class
*
parent
=
class_intf
->
class
;
struct
list_head
*
entry
;
struct
class_device
*
class_dev
;
if
(
!
parent
)
return
;
...
...
@@ -430,11 +421,9 @@ void class_interface_unregister(struct class_interface *class_intf)
list_del_init
(
&
class_intf
->
node
);
if
(
class_intf
->
remove
)
{
list_for_each
(
entry
,
&
parent
->
children
)
{
struct
class_device
*
class_dev
=
container_of
(
entry
,
struct
class_device
,
node
);
list_for_each_entry
(
class_dev
,
&
parent
->
children
,
node
)
class_intf
->
remove
(
class_dev
);
}
}
up_write
(
&
parent
->
subsys
.
rwsem
);
class_put
(
parent
);
...
...
drivers/base/class_simple.c
View file @
9ccf0731
...
...
@@ -169,6 +169,24 @@ struct class_device *class_simple_device_add(struct class_simple *cs, dev_t dev,
}
EXPORT_SYMBOL
(
class_simple_device_add
);
/**
* class_simple_set_hotplug - set the hotplug callback in the embedded struct class
* @cs: pointer to the struct class_simple to hold the pointer
* @hotplug: function pointer to the hotplug function
*
* Implement and set a hotplug function to add environment variables specific to this
* class on the hotplug event.
*/
int
class_simple_set_hotplug
(
struct
class_simple
*
cs
,
int
(
*
hotplug
)(
struct
class_device
*
dev
,
char
**
envp
,
int
num_envp
,
char
*
buffer
,
int
buffer_size
))
{
if
((
cs
==
NULL
)
||
(
IS_ERR
(
cs
)))
return
-
ENODEV
;
cs
->
class
.
hotplug
=
hotplug
;
return
0
;
}
EXPORT_SYMBOL
(
class_simple_set_hotplug
);
/**
* class_simple_device_remove - removes a class device that was created with class_simple_device_add()
* @dev: the dev_t of the device that was previously registered.
...
...
@@ -179,12 +197,10 @@ EXPORT_SYMBOL(class_simple_device_add);
void
class_simple_device_remove
(
dev_t
dev
)
{
struct
simple_dev
*
s_dev
=
NULL
;
struct
list_head
*
tmp
;
int
found
=
0
;
spin_lock
(
&
simple_dev_list_lock
);
list_for_each
(
tmp
,
&
simple_dev_list
)
{
s_dev
=
list_entry
(
tmp
,
struct
simple_dev
,
node
);
list_for_each_entry
(
s_dev
,
&
simple_dev_list
,
node
)
{
if
(
s_dev
->
dev
==
dev
)
{
found
=
1
;
break
;
...
...
drivers/base/core.c
View file @
9ccf0731
...
...
@@ -76,7 +76,6 @@ static struct sysfs_ops dev_sysfs_ops = {
static
void
device_release
(
struct
kobject
*
kobj
)
{
struct
device
*
dev
=
to_dev
(
kobj
);
struct
completion
*
c
=
dev
->
complete
;
if
(
dev
->
release
)
dev
->
release
(
dev
);
...
...
@@ -86,8 +85,6 @@ static void device_release(struct kobject * kobj)
dev
->
bus_id
);
WARN_ON
(
1
);
}
if
(
c
)
complete
(
c
);
}
static
struct
kobj_type
ktype_device
=
{
...
...
@@ -354,25 +351,6 @@ void device_unregister(struct device * dev)
}
/**
* device_unregister_wait - Unregister device and wait for it to be freed.
* @dev: Device to unregister.
*
* For the cases where the caller needs to wait for all references to
* be dropped from the device before continuing (e.g. modules with
* statically allocated devices), this function uses a completion struct
* to wait, along with a matching complete() in device_release() above.
*/
void
device_unregister_wait
(
struct
device
*
dev
)
{
struct
completion
c
;
init_completion
(
&
c
);
dev
->
complete
=
&
c
;
device_unregister
(
dev
);
wait_for_completion
(
&
c
);
}
/**
* device_for_each_child - device child iterator.
* @dev: parent struct device.
...
...
@@ -421,7 +399,6 @@ EXPORT_SYMBOL(device_register);
EXPORT_SYMBOL
(
device_del
);
EXPORT_SYMBOL
(
device_unregister
);
EXPORT_SYMBOL
(
device_unregister_wait
);
EXPORT_SYMBOL
(
get_device
);
EXPORT_SYMBOL
(
put_device
);
EXPORT_SYMBOL
(
device_find
);
...
...
drivers/char/tty_io.c
View file @
9ccf0731
...
...
@@ -2264,7 +2264,6 @@ int tty_unregister_driver(struct tty_driver *driver)
if
(
driver
->
refcount
)
return
-
EBUSY
;
cdev_unmap
(
MKDEV
(
driver
->
major
,
driver
->
minor_start
),
driver
->
num
);
unregister_chrdev_region
(
MKDEV
(
driver
->
major
,
driver
->
minor_start
),
driver
->
num
);
...
...
drivers/ieee1394/amdtp.c
View file @
9ccf0731
...
...
@@ -1308,7 +1308,6 @@ static void __exit amdtp_exit_module (void)
hpsb_unregister_highlevel
(
&
amdtp_highlevel
);
devfs_remove
(
"amdtp"
);
cdev_unmap
(
IEEE1394_AMDTP_DEV
,
16
);
cdev_del
(
&
amdtp_cdev
);
HPSB_INFO
(
"Unloaded AMDTP driver"
);
...
...
drivers/ieee1394/dv1394.c
View file @
9ccf0731
...
...
@@ -2609,7 +2609,6 @@ static void __exit dv1394_exit_module(void)
hpsb_unregister_protocol
(
&
dv1394_driver
);
hpsb_unregister_highlevel
(
&
dv1394_highlevel
);
cdev_unmap
(
IEEE1394_DV1394_DEV
,
16
);
cdev_del
(
&
dv1394_cdev
);
devfs_remove
(
"ieee1394/dv"
);
}
...
...
drivers/ieee1394/raw1394.c
View file @
9ccf0731
...
...
@@ -2682,7 +2682,6 @@ static int __init init_raw1394(void)
static
void
__exit
cleanup_raw1394
(
void
)
{
hpsb_unregister_protocol
(
&
raw1394_driver
);
cdev_unmap
(
IEEE1394_RAW1394_DEV
,
1
);
cdev_del
(
&
raw1394_cdev
);
devfs_remove
(
RAW1394_DEVICE_NAME
);
hpsb_unregister_highlevel
(
&
raw1394_highlevel
);
...
...
drivers/ieee1394/video1394.c
View file @
9ccf0731
...
...
@@ -1447,7 +1447,6 @@ static void __exit video1394_exit_module (void)
hpsb_unregister_highlevel
(
&
video1394_highlevel
);
devfs_remove
(
VIDEO1394_DRIVER_NAME
);
cdev_unmap
(
IEEE1394_VIDEO1394_DEV
,
16
);
cdev_del
(
&
video1394_cdev
);
PRINT_G
(
KERN_INFO
,
"Removed "
VIDEO1394_DRIVER_NAME
" module"
);
...
...
drivers/scsi/sg.c
View file @
9ccf0731
...
...
@@ -1521,7 +1521,6 @@ sg_remove(struct class_device *cl_dev)
if
(
sdp
)
{
sysfs_remove_link
(
&
scsidp
->
sdev_gendev
.
kobj
,
"generic"
);
class_simple_device_remove
(
MKDEV
(
SCSI_GENERIC_MAJOR
,
k
));
cdev_unmap
(
MKDEV
(
SCSI_GENERIC_MAJOR
,
k
),
1
);
cdev_del
(
sdp
->
cdev
);
sdp
->
cdev
=
NULL
;
devfs_remove
(
"%s/generic"
,
scsidp
->
devfs_name
);
...
...
drivers/scsi/st.c
View file @
9ccf0731
...
...
@@ -3946,8 +3946,6 @@ static int st_probe(struct device *dev)
if
(
cdev
==
STm
->
cdevs
[
j
])
cdev
=
NULL
;
sysfs_remove_link
(
&
STm
->
cdevs
[
j
]
->
kobj
,
"device"
);
cdev_unmap
(
MKDEV
(
SCSI_TAPE_MAJOR
,
TAPE_MINOR
(
dev_num
,
mode
,
j
)),
1
);
cdev_del
(
STm
->
cdevs
[
j
]);
}
}
...
...
@@ -3990,8 +3988,6 @@ static int st_remove(struct device *dev)
for
(
j
=
0
;
j
<
2
;
j
++
)
{
sysfs_remove_link
(
&
tpnt
->
modes
[
mode
].
cdevs
[
j
]
->
kobj
,
"device"
);
cdev_unmap
(
MKDEV
(
SCSI_TAPE_MAJOR
,
TAPE_MINOR
(
i
,
mode
,
j
)),
1
);
cdev_del
(
tpnt
->
modes
[
mode
].
cdevs
[
j
]);
tpnt
->
modes
[
mode
].
cdevs
[
j
]
=
NULL
;
}
...
...
fs/char_dev.c
View file @
9ccf0731
...
...
@@ -240,7 +240,6 @@ void unregister_chrdev_region(dev_t from, unsigned count)
int
unregister_chrdev
(
unsigned
int
major
,
const
char
*
name
)
{
struct
char_device_struct
*
cd
;
cdev_unmap
(
MKDEV
(
major
,
0
),
256
);
cd
=
__unregister_chrdev_region
(
major
,
0
,
256
);
if
(
cd
&&
cd
->
cdev
)
cdev_del
(
cd
->
cdev
);
...
...
@@ -347,16 +346,19 @@ int cdev_add(struct cdev *p, dev_t dev, unsigned count)
err
=
kobj_map
(
cdev_map
,
dev
,
count
,
NULL
,
exact_match
,
exact_lock
,
p
);
if
(
err
)
kobject_del
(
&
p
->
kobj
);
p
->
dev
=
dev
;
p
->
count
=
count
;
return
err
;
}
void
cdev_unmap
(
dev_t
dev
,
unsigned
count
)
static
void
cdev_unmap
(
dev_t
dev
,
unsigned
count
)
{
kobj_unmap
(
cdev_map
,
dev
,
count
);
}
void
cdev_del
(
struct
cdev
*
p
)
{
cdev_unmap
(
p
->
dev
,
p
->
count
);
kobject_del
(
&
p
->
kobj
);
kobject_put
(
&
p
->
kobj
);
}
...
...
@@ -458,6 +460,5 @@ EXPORT_SYMBOL(cdev_get);
EXPORT_SYMBOL
(
cdev_put
);
EXPORT_SYMBOL
(
cdev_del
);
EXPORT_SYMBOL
(
cdev_add
);
EXPORT_SYMBOL
(
cdev_unmap
);
EXPORT_SYMBOL
(
register_chrdev
);
EXPORT_SYMBOL
(
unregister_chrdev
);
include/linux/cdev.h
View file @
9ccf0731
...
...
@@ -7,6 +7,8 @@ struct cdev {
struct
module
*
owner
;
struct
file_operations
*
ops
;
struct
list_head
list
;
dev_t
dev
;
unsigned
int
count
;
};
void
cdev_init
(
struct
cdev
*
,
struct
file_operations
*
);
...
...
@@ -21,8 +23,6 @@ int cdev_add(struct cdev *, dev_t, unsigned);
void
cdev_del
(
struct
cdev
*
);
void
cdev_unmap
(
dev_t
,
unsigned
);
void
cd_forget
(
struct
inode
*
);
#endif
...
...
include/linux/device.h
View file @
9ccf0731
...
...
@@ -253,6 +253,8 @@ extern struct class_simple *class_simple_create(struct module *owner, char *name
extern
void
class_simple_destroy
(
struct
class_simple
*
cs
);
extern
struct
class_device
*
class_simple_device_add
(
struct
class_simple
*
cs
,
dev_t
dev
,
struct
device
*
device
,
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
4
,
5
)));
extern
int
class_simple_set_hotplug
(
struct
class_simple
*
,
int
(
*
hotplug
)(
struct
class_device
*
dev
,
char
**
envp
,
int
num_envp
,
char
*
buffer
,
int
buffer_size
));
extern
void
class_simple_device_remove
(
dev_t
dev
);
...
...
@@ -263,7 +265,6 @@ struct device {
struct
list_head
children
;
struct
device
*
parent
;
struct
completion
*
complete
;
/* Notification for freeing device. */
struct
kobject
kobj
;
char
bus_id
[
BUS_ID_SIZE
];
/* position on parent bus */
...
...
@@ -311,7 +312,6 @@ dev_set_drvdata (struct device *dev, void *data)
*/
extern
int
device_register
(
struct
device
*
dev
);
extern
void
device_unregister
(
struct
device
*
dev
);
extern
void
device_unregister_wait
(
struct
device
*
dev
);
extern
void
device_initialize
(
struct
device
*
dev
);
extern
int
device_add
(
struct
device
*
dev
);
extern
void
device_del
(
struct
device
*
dev
);
...
...
lib/kobject.c
View file @
9ccf0731
...
...
@@ -630,6 +630,9 @@ EXPORT_SYMBOL(kobject_register);
EXPORT_SYMBOL
(
kobject_unregister
);
EXPORT_SYMBOL
(
kobject_get
);
EXPORT_SYMBOL
(
kobject_put
);
EXPORT_SYMBOL
(
kobject_add
);
EXPORT_SYMBOL
(
kobject_del
);
EXPORT_SYMBOL
(
kobject_rename
);
EXPORT_SYMBOL
(
kobject_hotplug
);
EXPORT_SYMBOL
(
kset_register
);
...
...
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