• Artem Bityutskiy's avatar
    [MTD] [OneNAND] fix numerous races · 49dc08ee
    Artem Bityutskiy authored
    This patch make the OneNAND driver much less racy. It fixes
    our "onenand_wait: read timeout!" heisenbugs. The reason of
    these bugs was that the driver did not lock the chip when
    accessing OTP, and it screwed up OneNAND state when the OTP
    was read while JFFS2 was doing FS checking.
    
    This patch also fixes other races I spotted:
    1. BBT was not protected
    2. Access to ecc_stats was not protected
    
    Now the chip is locked when BBT is accessed.
    
    To fix all of these I basically split all interface functions
    on 'function()' and 'function_nolock()' parts.
    
    I tested this patch on N800 hardware - it fixes our problems.
    But I tested a little different version because our OneNAND
    codebase is slightly out-of-date. But it should be OK.
    
    This patch also includes the prin fixes I posted before.
    Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
    Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
    49dc08ee
onenand_base.c 69.7 KB