Sure, this piece of code has some problem. The logic should be just as
your description, the IF-condition is entered because there was an error
when setting the MTU. It should be:
           if (err != 0)

Your concern of the interrupts is resolved by calling of
bge_wake_factotum(bgep). It will trigger an soft interrupt and call
bge_chip_factotum(caddr_t arg), then call bge_intr_enable(bgep) to
re-enable interrupts.


Regards,
Crisson
On Thu, 2009-01-15 at 15:14 -0500, Girish Moodalbail wrote:
> Folks,
> 
> While scrutinizing heavily on the 'bge' driver, I found the following issue.
> 
> In bge_main2.c in bge_m_setprop() @ line 827  for MAC_PROP_MTU case we 
> have.
> 
> Case: MAC_PROP_MTU:
> 
>           .............
>           .............
>            err = mac_maxsdu_update(bgep->mh, maxsdu);
>            if (err == 0) {  <---------------- (a)
>                bgep->bge_dma_error = B_TRUE;
>                bgep->manual_reset = B_TRUE;
>                bge_chip_stop(bgep, B_TRUE); <---- TRUE here means fault 
> ------ (b)
>                bge_wake_factotum(bgep);
>                err = 0; <-------------- (c)
>            }
>            break;
> 
> (a) and (c) are quite not right. At (a) it should be if (err !=0).
> 
> The issue is (b) calls bge_chip_stop(..., fault = B_TRUE) which disable 
> the interrupts and when you do bge_m_start() immediately since the 
> interrupts are disabled, it returns EIO.
> 
> appreciate quick help!
> 
> thanks
> ~Girish
> _______________________________________________
> driver-discuss mailing list
> [email protected]
> http://mail.opensolaris.org/mailman/listinfo/driver-discuss
-- 
*************************************
* Guang-Hao, Crisson Hu             *
* China ERI, Sun Microsystems, Inc. *
* Tel: +86-10-62673095              *
*************************************


_______________________________________________
driver-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to