|
Lines 655-688
static int mv643xx_eth_open(struct net_d
Link Here
|
| 655 |
unsigned int port_num = mp->port_num; |
655 |
unsigned int port_num = mp->port_num; |
| 656 |
int err; |
656 |
int err; |
| 657 |
|
657 |
|
| 658 |
spin_lock_irq(&mp->lock); |
|
|
| 659 |
|
| 660 |
err = request_irq(dev->irq, mv643xx_eth_int_handler, |
658 |
err = request_irq(dev->irq, mv643xx_eth_int_handler, |
| 661 |
SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev); |
659 |
SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev); |
| 662 |
|
|
|
| 663 |
if (err) { |
660 |
if (err) { |
| 664 |
printk(KERN_ERR "Can not assign IRQ number to MV643XX_eth%d\n", |
661 |
printk(KERN_ERR "Can not assign IRQ number to MV643XX_eth%d\n", |
| 665 |
port_num); |
662 |
port_num); |
| 666 |
err = -EAGAIN; |
663 |
return -EAGAIN; |
| 667 |
goto out; |
|
|
| 668 |
} |
664 |
} |
| 669 |
|
665 |
|
|
|
666 |
spin_lock_irq(&mp->lock); |
| 667 |
|
| 670 |
if (mv643xx_eth_real_open(dev)) { |
668 |
if (mv643xx_eth_real_open(dev)) { |
| 671 |
printk("%s: Error opening interface\n", dev->name); |
669 |
printk("%s: Error opening interface\n", dev->name); |
|
|
670 |
free_irq(dev->irq, dev); |
| 672 |
err = -EBUSY; |
671 |
err = -EBUSY; |
| 673 |
goto out_free; |
|
|
| 674 |
} |
672 |
} |
| 675 |
|
673 |
|
| 676 |
spin_unlock_irq(&mp->lock); |
674 |
spin_unlock_irq(&mp->lock); |
| 677 |
|
675 |
|
| 678 |
return 0; |
|
|
| 679 |
|
| 680 |
out_free: |
| 681 |
free_irq(dev->irq, dev); |
| 682 |
|
| 683 |
out: |
| 684 |
spin_unlock_irq(&mp->lock); |
| 685 |
|
| 686 |
return err; |
676 |
return err; |
| 687 |
} |
677 |
} |
| 688 |
|
678 |
|
| 689 |
|
|
|