[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080402002459.GA22649@atjola.homenet>
Date: Wed, 2 Apr 2008 02:24:59 +0200
From: Björn Steinbrink <B.Steinbrink@....de>
To: Ayaz Abdulla <aabdulla@...dia.com>
Cc: Jeff Garzik <jgarzik@...ox.com>,
Manfred Spraul <manfred@...orfullife.com>,
Andrew Morton <akpm@...l.org>, nedev <netdev@...r.kernel.org>
Subject: Re: [PATCH] forcedeth: mac address fix
On 2008.03.31 19:24:24 -0500, Ayaz Abdulla wrote:
>
>
> Björn Steinbrink wrote:
>> On 2008.03.31 16:10:34 -0500, Ayaz Abdulla wrote:
>>
>>> This critical patch fixes a mac address issue recently introduced. If
>>>
>>
>>
>> Does "recently" mean my commit 2e3884b5b16795c03a7bf295797c1b2402885b88?
>> If so, I like to be told directly when I break stuff ;-)
>>
> Thats why I cc'd you. :)
OK, it's just that "recently broken" can mean about anything ;-) So I
would have welcomed a "broken by xxx" in the commit message, or a small
note below the --- line. :-)
>>> the device's mac address was in correct order and the flag
>>> NVREG_TRANSMITPOLL_MAC_ADDR_REV was set, during nv_remove the flag
>>> would get cleared. During next load, the mac address would get
>>> reversed because the flag is missing.
>>
>>
>> Hm, but nv_remove also writes back the reversed mac address. I don't see
>> how a plain remove/probe cycle would mess things up.
>>
>>
>
> For example, NVREG_TRANSMITPOLL_MAC_ADDR_REV is set. That would mean
> that orig_mac will be stored with correct address. Then you call
> nv_remove (via ifdown) which set orig_mac back into the register and
> will clear the flag. On the next nv_probe (via ifup), you would perform
> the logic to reverse the mac address. But it is still in correct order.
OK, that's the case when we had two consecutive nv_probe calls, without
a call to nv_remove in between, right? So yeah, kexec + rmmod + modprobe
breaks. AFAICT.
>>> As it has been indicated previously, the flag is cleared across a low
>>> power transition. Therefore, the driver should set the mac address
>>> back into the reversed order when clearing the flag.
>>
>>
>> That's what nv_remove is supposed to do. Is there a case where nv_remove
>> is not called?
>>
>
> Sorry for the confusion. I was merely stating what needs to be done as
> the full solution. This logic was already in place by your patch.
>
>>
>>> Also, the driver should set back the flag after a low power
>>> transition to protect against kexec command calling nv_probe a
>>> second time.
>>
>>
>> Sounds like suspend stopped calling nv_remove? That would make sense
>> then. I never checked whether suspend ever actually did call nv_remove
>> (I think), but as my patch worked, it basically must have done so, at
>> least in the past, right?
>>
>
> My understanding is that nv_suspend will call nv_close and then
> nv_resume will call nv_open. I don't think nv_probe/nv_remove is called
> during the low power transitions.
Hm, then I fail to see why my patch had any effect. I only touched
nv_probe and nv_remove, and it solved the mac reversal on suspend
problem... *confused*
> We want to set back the flag in nv_resume in case kexec is call after
> anytime nv_resume is called. Otherwise, nv_probe (via kexec ?) will
> think it needs to reverse the address.
Hmhm, that also somehow conflicts with the fact that my patch did
anything... I think.
Björn
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists