On Thu, Aug 26, 2010 at 3:53 PM, Matt Fleming <m...@console-pimps.org> wrote:
> On Thu, 26 Aug 2010 09:53:33 +0900
> Yusuke Goda <yusuke.goda...@renesas.com> wrote:
>> Andrew Morton wrote:
>> > On Wed, 25 Aug 2010 23:11:07 +0100
>> > Matt Fleming <m...@console-pimps.org> wrote:
>> >
>> >> On Thu, 15 Jul 2010 13:25:52 -0700
>> >> Andrew Morton <a...@linux-foundation.org> wrote:
>> >>
>> >>> On Tue, 13 Jul 2010 10:16:39 +0900
>> >>> Yusuke Goda <yusuke.goda...@renesas.com> wrote:
>> >>>
>> >>>> Hi Andrew
>> >>>>
>> >>>> Thank you for your comment.
>> >>>>
>> >>>>>>  #define ack_mmc_irqs(host, i) \
>> >>>>>>        do { \
>> >>>>>> -              u32 mask;\
>> >>>>>> -              mask  = sd_ctrl_read32((host), CTL_STATUS); \
>> >>>>>> -              mask &= ~((i) & TMIO_MASK_IRQ); \
>> >>>>>> -              sd_ctrl_write32((host), CTL_STATUS, mask); \
>> >>>>>> +              sd_ctrl_write32((host), CTL_STATUS, ~(i)); \
>> >>>>>>        } while (0)
>> >>>>> Can we have a better changelog please?
>> >>>>>
>> >>>>> What was wrong with the old code?
>> >>>>>
>> >>>>> How does the patch fix it?
>> >>>>>
>> >>>>> What are the user-visible runtime effects of the bug?
>> >>>>>
>> >>>>> (It looks like that was a pretty gross bug - how did it pass testing??)
>> >>>> Example
>> >>>>  - CMD53(Single block read / Received data size : 64Byte)
>> >>>>
>> >>>>  1) Send CMD53
>> >>>>  2) Receive "CMD53 response"
>> >>>>  3) Call tmio_mmc_cmd_irq(host, status);
>> >>>> -- original code ----------------------------------------------------
>> >>>>  #define ack_mmc_irqs(host, i) \
>> >>>>  do { \
>> >>>>          u32 mask;\
>> >>>>          mask  = sd_ctrl_read32((host), CTL_STATUS); \
>> >>>>  < case 1 >
>> >>>>          mask &= ~((i) & TMIO_MASK_IRQ); \
>> >>>>  < case 2 >
>> >>>>          sd_ctrl_write32((host), CTL_STATUS, mask); \
>> >>>>  } while (0)
>> >>>> ---------------------------------------------------------------------
>> >>>>
>> >>>> TMIO_STAT_RXRDY status will be cleared by "sd_ctrl_write32((host), 
>> >>>> CTL_STATUS, mask);"
>> >>>> if TMIO_STAT_RXRDY becomes effective between "< case 1 >" and "< case 2 
>> >>>> >".
>> >>>>
>> >>>> This causes the phenomenon that a TMIO_STAT_RXRDY interrupt does not 
>> >>>> occur.
>> >>>> When received data are small, it rarely occurs.
>> >>>>
>> >>> OK..
>> >>>
>> >>> But with both this patch and "tmio_mmc-revise-limit-on-data-size.patch"
>> >>> the changelogs fail to describe the impact of the bug upon our users.
>> >>> So when I sit here trying to work out whether the patches should be
>> >>> applied to 2.6.35 and whether they should be backported into -stable, I
>> >>> don't have enough information.
>> >>>
>> >>> What are your thoughts on this?
>> >> Goda, do you have any more ideas on updating the changelog for this
>> >> patch? It looks to me like this patch is a candidate for stable
>> >> (whereas the "tmio_mmc-revise-limit-on-data-size.patch" is not, sorry
>> >> about replying to that one first, I'm reading my mail backwards)
>> >> because, without this patch, it's possible to miss interrupts because
>> >> the ack_mmc_irqs() macro clears bit in the CTL_STATUS register that it
>> >> should not do? Is that correct?
>> >>
>> >> If that is the case then would this be a more appropriate changelog,
>> >>
>> >> "tmio_mmc: Don't clear unhandled pending interrupts
>> >>
>> >> Previously, it was possible for ack_mmc_irqs() to clear pending
>> >> interrupt bits in the CTL_STATUS register, even though the interrupt
>> >> handler had not been called. This was because of a race that existed
>> >> when doing a read-modify-write sequence on CTL_STATUS. After the
>> >> read step in this sequence, if an interrupt occurred (causing one of the
>> >> bits in CTL_STATUS to be set) the write step would inadvertently clear
>> >> it.
>> >>
>> >> This patch eliminates this race by only writing to CTL_STATUS and
>> >> clearing the interrupts that were passed as an argument to
>> >> ack_mmc_irqs()."
>> >
>> > hm, I seem to have secretly dropped this patch as well.
>> >
>> > Oh well.  I restored it as
>> > tmio_mmc-dont-clear-unhandled-pending-interrupts.patch and tagged it
>> > for a -stable backport.  Unless I hear otherwise I'll send it in to
>> > Linus when we return from Brazil a couple of weeks from now.
>>
>> Thank you for your actions.
>> I agree to new changelog.
>>
>> In fact, I contributed the patch which changed changelog.
>>  http://www.spinics.net/lists/linux-mmc/msg02623.html
>>  http://www.spinics.net/lists/linux-mmc/msg02624.html
>> However, these will not be necessary.
>
> Oh, I missed these. Sorry!
>
> Andrew, this bit of Goda's changelog is worth adding to
> "tmio_mmc-dont-clear-unhandled-pending-interrupts.patch"
>
> "Observed with the TMIO_STAT_RXRDY bit together with CMD53
> on AR6002 and BCM4318 SDIO cards in polled mode."

Hi Matt,

Just FYI, the newer version of these patches also have a whole bunch
of acked-by and tested-by tags, see this email:

http://lkml.org/lkml/2010/8/20/429

Thanks for your help!

Cheers,

/ magnus
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to