);
}
+static spinlock_t bpq_lock = SPIN_LOCK_UNLOCKED;
+
/*
* Sanity check: remove all devices that ceased to exists and
* return '1' if the given BPQ device was affected.
int result = 0;
unsigned long flags;
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&bpq_lock, flags);
bpq_prev = NULL;
bpq_prev = bpq;
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&bpq_lock, flags);
return result;
}
int len = 0;
off_t pos = 0;
off_t begin = 0;
+ unsigned long flags;
- cli();
+ spin_lock_irqsave(&bpq_lock, flags);
len += sprintf(buffer, "dev ether destination accept from\n");
break;
}
- sti();
+ spin_unlock_irqrestore(&bpq_lock, flags);
*start = buffer + (offset - begin);
len -= (offset - begin);
{
int k;
struct bpqdev *bpq, *bpq2;
+ unsigned long flags;
if ((bpq = kmalloc(sizeof(struct bpqdev), GFP_KERNEL)) == NULL)
return -ENOMEM;
dev->mtu = AX25_DEF_PACLEN;
dev->addr_len = AX25_ADDR_LEN;
- cli();
+ spin_lock_irqsave(&bpq_lock, flags);
if (bpq_devices == NULL) {
bpq_devices = bpq;
bpq2->next = bpq;
}
- sti();
+ spin_unlock_irqrestore(&bpq_lock, flags);
return 0;
}
printk(banner);
- proc_net_create("bpqether", 0, bpq_get_info);
+ if (!proc_net_create("bpqether", 0, bpq_get_info)) {
+ printk(KERN_ERR
+ "bpq: cannot create /proc/net/bpqether entry.\n");
+ unregister_netdevice_notifier(&bpq_dev_notifier);
+ dev_remove_pack(&bpq_packet_type);
+ return -ENOENT;
+ }
read_lock_bh(&dev_base_lock);
for (dev = dev_base; dev != NULL; dev = dev->next) {