• Harald Freudenberger's avatar
    s390/ap: fix crash on older machines based on QCI info missing · 0fef40be
    Harald Freudenberger authored
    On older z series machines (z12 and older) there is no QCI info
    available. The AP code took care of this and the AP bus scan then
    switched to simple probing via TAPQ.
    
    With commit
    28391585 ("s390/ap: notify drivers on config changed and scan complete callbacks")
    some code was introduced which silently assumed that the QCI info is
    always available. However, with KVM simulating an older machine (z12)
    the result was a kernel crash. Funnily the same crash does not happen
    on LPAR - maybe because NULL is a valid pointer and reading some data
    from address 0 also works fine.
    
    This fix now improves the code to be aware that the QCI instruction
    may not be available on older machines and thus the two pointers to
    QCI info structs may simple be NULL.
    
    However, on a machine not providing the QCI info the two callbacks to
    the zcrypt device drivers on_config_changed() and on_scan_complete()
    provide parameters which are pointers to a QCI info struct.
    These both callbacks are NOT served if there is no QCI info available.
    The only consumer of these callbacks is the vfio device driver. This
    driver only supports CEX4 and higher. All physical machines which are
    able to provide CEX4 cards have QCI support available. So there is
    no sense in for example fill the QCI info struct by hand with looping
    over cards and queues and TAPQ each APQN.
    Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
    Signed-off-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
    Cc: stable@vger.kernel.org
    Fixes: 28391585 ("s390/ap: notify drivers on config changed and scan complete callbacks")
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    0fef40be
ap_bus.c 57.3 KB