• Corey Minyard's avatar
    ipmi_si: Fix crash when using hard-coded device · 6bba17f6
    Corey Minyard authored
    Backport from 41b766d6
    
    When excuting a command like:
      modprobe ipmi_si ports=0xffc0e3 type=bt
    The system would get an oops.
    
    The trouble here is that ipmi_si_hardcode_find_bmc() is called before
    ipmi_si_platform_init(), but initialization of the hard-coded device
    creates an IPMI platform device, which won't be initialized yet.
    
    The real trouble is that hard-coded devices aren't created with
    any device, and the fixup is done later.  So do it right, create the
    hard-coded devices as normal platform devices.
    
    This required adding some new resource types to the IPMI platform
    code for passing information required by the hard-coded device
    and adding some code to remove the hard-coded platform devices
    on module removal.
    
    To enforce the "hard-coded devices passed by the user take priority
    over firmware devices" rule, some special code was added to check
    and see if a hard-coded device already exists.
    
    The backport required some minor fixups and adding the device
    id table that had been added in another change and was used
    in this one.
    Reported-by: default avatarYang Yingliang <yangyingliang@huawei.com>
    Cc: stable@vger.kernel.org # v4.15+
    Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
    Tested-by: default avatarYang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6bba17f6
ipmi_si_hardcode.c 7.26 KB