diff options
author | Corey Minyard <cminyard@mvista.com> | 2016-11-07 21:07:09 +0300 |
---|---|---|
committer | Corey Minyard <cminyard@mvista.com> | 2016-11-25 03:09:48 +0300 |
commit | 94671710183c3f5eed7cf33f73600c836e4777fd (patch) | |
tree | 8f34b9c83c713fad030ced77a4ae1c00080964fe /drivers/char/ipmi/ipmi_si_intf.c | |
parent | bb2a08c01a66e77917bd2fdaf5cffd917ec03573 (diff) | |
download | linux-94671710183c3f5eed7cf33f73600c836e4777fd.tar.xz |
ipmi: Pick up slave address from SMBIOS on an ACPI device
When added by ACPI, the information does not contain the slave address
of the BMC. However, that information is available from SMBIOS. So
if we add a device that doesn't have a slave address, look at the other
devices that are duplicate interfaces and see if they have a slave
address.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Diffstat (limited to 'drivers/char/ipmi/ipmi_si_intf.c')
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 017994900ad7..2a7c425ddfa7 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -3448,8 +3448,16 @@ static int is_new_interface(struct smi_info *info) list_for_each_entry(e, &smi_infos, link) { if (e->io.addr_type != info->io.addr_type) continue; - if (e->io.addr_data == info->io.addr_data) + if (e->io.addr_data == info->io.addr_data) { + /* + * This is a cheap hack, ACPI doesn't have a defined + * slave address but SMBIOS does. Pick it up from + * any source that has it available. + */ + if (info->slave_addr && !e->slave_addr) + e->slave_addr = info->slave_addr; return 0; + } } return 1; |