[PATCH 3/3] kernel-device: simplify handling of platform/pci/pnp/sdio parent
Dan Williams
dcbw at redhat.com
Thu Feb 23 22:07:40 UTC 2017
On Thu, 2017-02-23 at 11:45 -0800, Ben Chan wrote:
> This patch simplifies the handling of platform/pci/pnp/sdio device in
> find_physical_gudevdevice(). When the code finds the first parent
> device
> under the subsystem 'platform', 'pci', 'pnp', or 'sdio', it stops
> traversing up the device tree, so there is no need to keep track of
> whether a platform / pci / pnp / sdio device has previously been
> visited
> via those is_platform/is_pci/is_pnp/is_sdio Boolean variables.
I'm not sure this will work in all cases, though I should verify this.
Depending on the actual bus type, the common parent for all ports
exposed by that device might be a couple parents up the chain.
I do still have PCMCIA (Sierra 860) and PCI (Option Nozomi) WWAN cards
that I can check to see if this is the case, though I'll have to
install an older OS that still supports PCMCIA.
The "platform" case IIRC is when a serial device is attached to the
onboard serial port, so perhaps that one is OK since there will only
ever be one device on those ports.
Dan
> ---
> src/kerneldevice/mm-kernel-device-udev.c | 23 ++++++--------------
> ---
> 1 file changed, 6 insertions(+), 17 deletions(-)
>
> diff --git a/src/kerneldevice/mm-kernel-device-udev.c
> b/src/kerneldevice/mm-kernel-device-udev.c
> index 763ccf86..ab75aa34 100644
> --- a/src/kerneldevice/mm-kernel-device-udev.c
> +++ b/src/kerneldevice/mm-kernel-device-udev.c
> @@ -177,8 +177,7 @@ find_physical_gudevdevice (GUdevDevice *child)
> GUdevDevice *physdev = NULL;
> const char *subsys, *type, *name;
> guint32 i = 0;
> - gboolean is_usb = FALSE, is_pci = FALSE, is_pcmcia = FALSE,
> is_platform = FALSE;
> - gboolean is_pnp = FALSE, is_sdio = FALSE;
> + gboolean is_usb = FALSE, is_pcmcia = FALSE;
>
> g_return_val_if_fail (child != NULL, NULL);
>
> @@ -220,21 +219,11 @@ find_physical_gudevdevice (GUdevDevice *child)
> if (physdev)
> break;
> }
> - } else if (is_platform || !strcmp (subsys, "platform"))
> {
> - /* Take the first platform parent as the physical
> device */
> - is_platform = TRUE;
> - physdev = iter;
> - break;
> - } else if (is_pci || !strcmp (subsys, "pci")) {
> - is_pci = TRUE;
> - physdev = iter;
> - break;
> - } else if (is_pnp || !strcmp (subsys, "pnp")) {
> - is_pnp = TRUE;
> - physdev = iter;
> - break;
> - } else if (is_sdio || !strcmp (subsys, "sdio")) {
> - is_sdio = TRUE;
> + } else if (!strcmp (subsys, "platform") ||
> + !strcmp (subsys, "pci") ||
> + !strcmp (subsys, "pnp") ||
> + !strcmp (subsys, "sdio")) {
> + /* Take the first parent as the physical device */
> physdev = iter;
> break;
> }
More information about the ModemManager-devel
mailing list