Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 176346
b: refs/heads/master
c: 1f2f38d
h: refs/heads/master
v: v3
  • Loading branch information
Thadeu Lima de Souza Cascardo authored and Linus Torvalds committed Dec 15, 2009
1 parent a7c787f commit 70c6106
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ae717da8d18839487485f6ae608b8542790fdd3
refs/heads/master: 1f2f38d89d1eced2079189cd880eeacee378370a
22 changes: 9 additions & 13 deletions trunk/drivers/char/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ static DEFINE_MUTEX(misc_mtx);
* Assigned numbers, used for dynamic minors
*/
#define DYNAMIC_MINORS 64 /* like dynamic majors */
static unsigned char misc_minors[DYNAMIC_MINORS / 8];
static DECLARE_BITMAP(misc_minors, DYNAMIC_MINORS);

#ifdef CONFIG_PROC_FS
static void *misc_seq_start(struct seq_file *seq, loff_t *pos)
Expand Down Expand Up @@ -196,27 +196,23 @@ int misc_register(struct miscdevice * misc)
}

if (misc->minor == MISC_DYNAMIC_MINOR) {
int i = DYNAMIC_MINORS;
while (--i >= 0)
if ( (misc_minors[i>>3] & (1 << (i&7))) == 0)
break;
if (i<0) {
int i = find_first_zero_bit(misc_minors, DYNAMIC_MINORS);
if (i >= DYNAMIC_MINORS) {
mutex_unlock(&misc_mtx);
return -EBUSY;
}
misc->minor = i;
misc->minor = DYNAMIC_MINORS - i - 1;
set_bit(i, misc_minors);
}

if (misc->minor < DYNAMIC_MINORS)
misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7);
dev = MKDEV(MISC_MAJOR, misc->minor);

misc->this_device = device_create(misc_class, misc->parent, dev,
misc, "%s", misc->name);
if (IS_ERR(misc->this_device)) {
int i = misc->minor;
int i = DYNAMIC_MINORS - misc->minor - 1;
if (i < DYNAMIC_MINORS && i >= 0)
misc_minors[i>>3] &= ~(1 << (i & 7));
clear_bit(i, misc_minors);
err = PTR_ERR(misc->this_device);
goto out;
}
Expand All @@ -243,7 +239,7 @@ int misc_register(struct miscdevice * misc)

int misc_deregister(struct miscdevice *misc)
{
int i = misc->minor;
int i = DYNAMIC_MINORS - misc->minor - 1;

if (list_empty(&misc->list))
return -EINVAL;
Expand All @@ -252,7 +248,7 @@ int misc_deregister(struct miscdevice *misc)
list_del(&misc->list);
device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
if (i < DYNAMIC_MINORS && i >= 0)
misc_minors[i>>3] &= ~(1 << (i & 7));
clear_bit(i, misc_minors);
mutex_unlock(&misc_mtx);
return 0;
}
Expand Down

0 comments on commit 70c6106

Please sign in to comment.