Skip to content

Commit

Permalink
ieee1394: video1394: reorder module init, prepare BKL removal
Browse files Browse the repository at this point in the history
This prepares video1394 for removal of the BKL (big kernel lock):
It allows video1394_open() to be called while video1394_init_module()
is still in progress.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
  • Loading branch information
Stefan Richter committed Jul 14, 2008
1 parent fde675f commit 055a7da
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
4 changes: 1 addition & 3 deletions drivers/ieee1394/highlevel.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,10 +228,8 @@ void hpsb_register_highlevel(struct hpsb_highlevel *hl)
{
unsigned long flags;

hpsb_init_highlevel(hl);
INIT_LIST_HEAD(&hl->addr_list);
INIT_LIST_HEAD(&hl->host_info_list);

rwlock_init(&hl->host_info_lock);

down_write(&hl_drivers_sem);
list_add_tail(&hl->hl_list, &hl_drivers);
Expand Down
13 changes: 12 additions & 1 deletion drivers/ieee1394/highlevel.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define IEEE1394_HIGHLEVEL_H

#include <linux/list.h>
#include <linux/spinlock_types.h>
#include <linux/spinlock.h>
#include <linux/types.h>

struct module;
Expand Down Expand Up @@ -103,6 +103,17 @@ int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store,
void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
void *data, size_t length);

/**
* hpsb_init_highlevel - initialize a struct hpsb_highlevel
*
* This is only necessary if hpsb_get_hostinfo_bykey can be called
* before hpsb_register_highlevel.
*/
static inline void hpsb_init_highlevel(struct hpsb_highlevel *hl)
{
rwlock_init(&hl->host_info_lock);
INIT_LIST_HEAD(&hl->host_info_list);
}
void hpsb_register_highlevel(struct hpsb_highlevel *hl);
void hpsb_unregister_highlevel(struct hpsb_highlevel *hl);

Expand Down
2 changes: 2 additions & 0 deletions drivers/ieee1394/video1394.c
Original file line number Diff line number Diff line change
Expand Up @@ -1503,6 +1503,8 @@ static int __init video1394_init_module (void)
{
int ret;

hpsb_init_highlevel(&video1394_highlevel);

cdev_init(&video1394_cdev, &video1394_fops);
video1394_cdev.owner = THIS_MODULE;
ret = cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16);
Expand Down

0 comments on commit 055a7da

Please sign in to comment.