From 54ef1e4efe549e310b29258fe9c2efcc367ae942 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 22 Oct 2015 17:19:19 -0500 Subject: [PATCH 143/143] device/smbus: Avoid infinite loop if i2c device has wrong parent Change-Id: I4c615f3c5b3908178b8223cb6620c393bbfb4e7f Signed-off-by: Timothy Pearson --- src/device/smbus_ops.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/device/smbus_ops.c b/src/device/smbus_ops.c index 184a06a..f4b1355 100644 --- a/src/device/smbus_ops.c +++ b/src/device/smbus_ops.c @@ -29,8 +29,17 @@ struct bus *get_pbus_smbus(device_t dev) { struct bus *pbus = dev->bus; - while (pbus && pbus->dev && !ops_smbus_bus(pbus)) - pbus = pbus->dev->bus; + while (pbus && pbus->dev && !ops_smbus_bus(pbus)) { + if (pbus->dev->bus != pbus) { + pbus = pbus->dev->bus; + } + else { + printk(BIOS_WARNING, + "%s Find SMBus bus operations: unable to proceed\n", + dev_path(dev)); + break; + } + } if (!pbus || !pbus->dev || !pbus->dev->ops || !pbus->dev->ops->ops_smbus_bus) { -- 1.7.9.5