ANDROID: serdev: Fix platform device support

After commit cdad3113fcaa ("ANDROID: serdev: add platform device
support") landed, we started seeing boot panics on HiKey960/HiKey.

After some debugging I found the patch is passing a serdev_device->dev
pointer to match()/uevent(), which expects the dev pointer to be
contained in a platform_device structure instead. When it uses
container_of, it ends up miscast and we get bad values.

Alistair suggested this fix which seems to avoid the issue.

Signed-off-by: John Stultz <john.stultz@linaro.org>
Bug: 146517987
Change-Id: I6354aeb4008fff85264a3c848c6c95fb8ca5b07a
This commit is contained in:
John Stultz 2020-01-02 21:13:09 +00:00 committed by Alistair Delva
parent d8cb91663b
commit aba366935d

View File

@ -56,7 +56,7 @@ static int serdev_device_match(struct device *dev, struct device_driver *drv)
return 1; return 1;
if (dev->parent->parent->bus == &platform_bus_type && if (dev->parent->parent->bus == &platform_bus_type &&
dev->parent->parent->bus->match(dev, drv)) dev->parent->parent->bus->match(dev->parent->parent, drv))
return 1; return 1;
return 0; return 0;
@ -73,7 +73,7 @@ static int serdev_uevent(struct device *dev, struct kobj_uevent_env *env)
return rc; return rc;
if (dev->parent->parent->bus == &platform_bus_type) if (dev->parent->parent->bus == &platform_bus_type)
rc = dev->parent->parent->bus->uevent(dev, env); rc = dev->parent->parent->bus->uevent(dev->parent->parent, env);
return rc; return rc;
} }