|
@@ -1168,6 +1168,7 @@ static int stir421x_patch_device(struct irda_usb_cb *self)
|
|
static int irda_usb_net_open(struct net_device *netdev)
|
|
static int irda_usb_net_open(struct net_device *netdev)
|
|
{
|
|
{
|
|
struct irda_usb_cb *self;
|
|
struct irda_usb_cb *self;
|
|
|
|
+ unsigned long flags;
|
|
char hwname[16];
|
|
char hwname[16];
|
|
int i;
|
|
int i;
|
|
|
|
|
|
@@ -1177,13 +1178,16 @@ static int irda_usb_net_open(struct net_device *netdev)
|
|
self = (struct irda_usb_cb *) netdev->priv;
|
|
self = (struct irda_usb_cb *) netdev->priv;
|
|
IRDA_ASSERT(self != NULL, return -1;);
|
|
IRDA_ASSERT(self != NULL, return -1;);
|
|
|
|
|
|
|
|
+ spin_lock_irqsave(&self->lock, flags);
|
|
/* Can only open the device if it's there */
|
|
/* Can only open the device if it's there */
|
|
if(!self->present) {
|
|
if(!self->present) {
|
|
|
|
+ spin_unlock_irqrestore(&self->lock, flags);
|
|
IRDA_WARNING("%s(), device not present!\n", __FUNCTION__);
|
|
IRDA_WARNING("%s(), device not present!\n", __FUNCTION__);
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
if(self->needspatch) {
|
|
if(self->needspatch) {
|
|
|
|
+ spin_unlock_irqrestore(&self->lock, flags);
|
|
IRDA_WARNING("%s(), device needs patch\n", __FUNCTION__) ;
|
|
IRDA_WARNING("%s(), device needs patch\n", __FUNCTION__) ;
|
|
return -EIO ;
|
|
return -EIO ;
|
|
}
|
|
}
|
|
@@ -1198,6 +1202,7 @@ static int irda_usb_net_open(struct net_device *netdev)
|
|
/* To do *before* submitting Rx urbs and starting net Tx queue
|
|
/* To do *before* submitting Rx urbs and starting net Tx queue
|
|
* Jean II */
|
|
* Jean II */
|
|
self->netopen = 1;
|
|
self->netopen = 1;
|
|
|
|
+ spin_unlock_irqrestore(&self->lock, flags);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Now that everything should be initialized properly,
|
|
* Now that everything should be initialized properly,
|