diff options
Diffstat (limited to 'resources/libreboot/patch/kgpe-d16/0143-device-smbus-Avoid-infinite-loop-if-i2c-device-has-w.patch')
-rw-r--r-- | resources/libreboot/patch/kgpe-d16/0143-device-smbus-Avoid-infinite-loop-if-i2c-device-has-w.patch | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/resources/libreboot/patch/kgpe-d16/0143-device-smbus-Avoid-infinite-loop-if-i2c-device-has-w.patch b/resources/libreboot/patch/kgpe-d16/0143-device-smbus-Avoid-infinite-loop-if-i2c-device-has-w.patch new file mode 100644 index 0000000..bf9c829 --- /dev/null +++ b/resources/libreboot/patch/kgpe-d16/0143-device-smbus-Avoid-infinite-loop-if-i2c-device-has-w.patch @@ -0,0 +1,39 @@ +From 54ef1e4efe549e310b29258fe9c2efcc367ae942 Mon Sep 17 00:00:00 2001 +From: Timothy Pearson <tpearson@raptorengineeringinc.com> +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 <tpearson@raptorengineeringinc.com> +--- + 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 + |