• Liu Xinpeng's avatar
    ACPI: APEI: Fix missing ERST record id · a0909315
    Liu Xinpeng authored
    Read a record is cleared by others, but the deleted record cache entry is
    still created by erst_get_record_id_next. When next enumerate the records,
    get the cached deleted record, then erst_read() return -ENOENT and try to
    get next record, loop back to first ID will return 0 in function
    __erst_record_id_cache_add_one and then set record_id as
    APEI_ERST_INVALID_RECORD_ID, finished this time read operation.
    It will result in read the records just in the cache hereafter.
    
    This patch cleared the deleted record cache, fix the issue that
    "./erst-inject -p" shows record counts not equal to "./erst-inject -n".
    
    A reproducer of the problem(retry many times):
    
    [root@localhost erst-inject]# ./erst-inject -c 0xaaaaa00011
    [root@localhost erst-inject]# ./erst-inject -p
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00012
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00013
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00014
    [root@localhost erst-inject]# ./erst-inject -i 0xaaaaa000006
    [root@localhost erst-inject]# ./erst-inject -i 0xaaaaa000007
    [root@localhost erst-inject]# ./erst-inject -i 0xaaaaa000008
    [root@localhost erst-inject]# ./erst-inject -p
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00012
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00013
    rc: 273
    rcd sig: CPER
    rcd id: 0xaaaaa00014
    [root@localhost erst-inject]# ./erst-inject -n
    total error record count: 6
    Signed-off-by: default avatarLiu Xinpeng <liuxp11@chinatelecom.cn>
    Reviewed-by: default avatarTony Luck <tony.luck@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    a0909315
apei.h 1.4 KB