base-manager: reprobe device on late port additions

There is no guarantee from the kernel that the ports of a given device
will all be notified via uevents on a timely manner. We assume it, but
we cannot be completely sure.

There are two main scenarios that we have been seen when the ports of a
device are not notified close enough to each other:

 * A modem object is created, but not with the desired control protocol.
   E.g. a QMI or MBIM modem would end up controlled via AT commands if
   the cdc-wdm port was added too late.

 * A modem object is not created at all, and the device object was
   removed completely. E.g. when the net port addition in a QMI or MBIM
   modem happens too late.

In order to avoid those cases, we will now fully reprobe all the ports
of the device from scratch whenever a new valid port addition happens
after the initial probing of the device has already been completed. If a
modem object is available at that time, we will remove it right away.
This commit is contained in:
Aleksander Morgado
2024-03-12 10:15:59 +00:00
parent 07f1f58642
commit bd255849dc
7 changed files with 310 additions and 132 deletions
+8
View File
@@ -67,6 +67,14 @@ gboolean mm_plugin_manager_device_support_check_cancel (MMPluginManager
MMPlugin * mm_plugin_manager_device_support_check_finish (MMPluginManager *self,
GAsyncResult *res,
GError **error);
gboolean mm_plugin_manager_device_support_check_ongoing (MMPluginManager *self,
MMDevice *device);
gboolean mm_plugin_manager_device_support_check_add_port (MMPluginManager *self,
MMDevice *device,
MMKernelDevice *port);
MMPlugin *mm_plugin_manager_peek_plugin (MMPluginManager *self,
const gchar *plugin_name);
const gchar **mm_plugin_manager_get_subsystems (MMPluginManager *self);