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
nexedi
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
Hide 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,10 +401,8 @@ 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
);
...
...
@@ -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,10 +421,8 @@ 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
);
...
...
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