mirror of
https://git.proxmox.com/git/fwupd
synced 2025-07-25 20:45:07 +00:00
fu-engine: Check multiple plugins if quirks match
`ata` and `emmc` both have block devices and so they both need to be checked
This commit is contained in:
parent
561751faff
commit
0e500321d7
@ -3958,26 +3958,34 @@ fu_engine_udev_device_add (FuEngine *self, GUdevDevice *udev_device)
|
|||||||
/* can be specified using a quirk */
|
/* can be specified using a quirk */
|
||||||
plugin_name = fu_device_get_plugin (FU_DEVICE (device));
|
plugin_name = fu_device_get_plugin (FU_DEVICE (device));
|
||||||
if (plugin_name != NULL) {
|
if (plugin_name != NULL) {
|
||||||
g_autoptr(GError) error = NULL;
|
g_auto(GStrv) plugins = g_strsplit (plugin_name, ",", -1);
|
||||||
FuPlugin *plugin = fu_plugin_list_find_by_name (self->plugin_list,
|
for (guint i = 0; plugins[i] != NULL; i++) {
|
||||||
plugin_name, &error);
|
FuPlugin *plugin;
|
||||||
if (plugin == NULL) {
|
g_autoptr(GError) error = NULL;
|
||||||
g_warning ("failed to find specified plugin %s: %s",
|
|
||||||
plugin_name, error->message);
|
plugin = fu_plugin_list_find_by_name (self->plugin_list,
|
||||||
|
plugins[i], &error);
|
||||||
|
if (plugin == NULL) {
|
||||||
|
g_warning ("failed to find specified plugin %s: %s",
|
||||||
|
plugin_name, error->message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!fu_plugin_runner_udev_device_added (plugin, device, &error)) {
|
||||||
|
if (g_error_matches (error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
|
||||||
|
if (g_getenv ("FWUPD_PROBE_VERBOSE") != NULL) {
|
||||||
|
g_debug ("%s ignoring: %s",
|
||||||
|
fu_plugin_get_name (plugin),
|
||||||
|
error->message);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
g_warning ("failed to add udev device %s: %s",
|
||||||
|
g_udev_device_get_sysfs_path (udev_device),
|
||||||
|
error->message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!fu_plugin_runner_udev_device_added (plugin, device, &error)) {
|
|
||||||
if (g_error_matches (error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
|
|
||||||
g_debug ("%s ignoring: %s",
|
|
||||||
fu_plugin_get_name (plugin),
|
|
||||||
error->message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
g_warning ("failed to add udev device %s: %s",
|
|
||||||
g_udev_device_get_sysfs_path (udev_device),
|
|
||||||
error->message);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4381,21 +4389,35 @@ fu_engine_usb_device_added_cb (GUsbContext *ctx,
|
|||||||
/* can be specified using a quirk */
|
/* can be specified using a quirk */
|
||||||
plugin_name = fu_device_get_plugin (device);
|
plugin_name = fu_device_get_plugin (device);
|
||||||
if (plugin_name != NULL) {
|
if (plugin_name != NULL) {
|
||||||
g_autoptr(GError) error = NULL;
|
g_auto(GStrv) plugins = g_strsplit (plugin_name, ",", -1);
|
||||||
FuPlugin *plugin = fu_plugin_list_find_by_name (self->plugin_list,
|
for (guint i = 0; plugins[i] != NULL; i++) {
|
||||||
plugin_name, &error);
|
FuPlugin *plugin;
|
||||||
if (plugin == NULL) {
|
g_autoptr(GError) error = NULL;
|
||||||
g_warning ("failed to find specified plugin %s: %s",
|
|
||||||
plugin_name, error->message);
|
plugin = fu_plugin_list_find_by_name (self->plugin_list,
|
||||||
|
plugins[i], &error);
|
||||||
|
if (plugin == NULL) {
|
||||||
|
g_warning ("failed to find specified plugin %s: %s",
|
||||||
|
plugin_name, error->message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!fu_plugin_runner_usb_device_added (plugin, device, &error)) {
|
||||||
|
if (g_error_matches (error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
|
||||||
|
if (g_getenv ("FWUPD_PROBE_VERBOSE") != NULL) {
|
||||||
|
g_debug ("%s ignoring: %s",
|
||||||
|
fu_plugin_get_name (plugin),
|
||||||
|
error->message);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
g_warning ("failed to add USB device %04x:%04x: %s",
|
||||||
|
g_usb_device_get_vid (usb_device),
|
||||||
|
g_usb_device_get_pid (usb_device),
|
||||||
|
error->message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!fu_plugin_runner_usb_device_added (plugin, device, &error)) {
|
|
||||||
g_warning ("failed to add USB device %04x:%04x: %s",
|
|
||||||
g_usb_device_get_vid (usb_device),
|
|
||||||
g_usb_device_get_pid (usb_device),
|
|
||||||
error->message);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1535,14 +1535,8 @@ fu_plugin_runner_usb_device_added (FuPlugin *self, FuUsbDevice *device, GError *
|
|||||||
if (func == NULL) {
|
if (func == NULL) {
|
||||||
if (priv->device_gtype != G_TYPE_INVALID ||
|
if (priv->device_gtype != G_TYPE_INVALID ||
|
||||||
fu_device_get_specialized_gtype (FU_DEVICE (device)) != G_TYPE_INVALID) {
|
fu_device_get_specialized_gtype (FU_DEVICE (device)) != G_TYPE_INVALID) {
|
||||||
if (!fu_plugin_usb_device_added (self, device, &error_local)) {
|
if (!fu_plugin_usb_device_added (self, device, error))
|
||||||
if (g_error_matches (error_local,
|
|
||||||
FWUPD_ERROR,
|
|
||||||
FWUPD_ERROR_NOT_SUPPORTED))
|
|
||||||
return TRUE;
|
|
||||||
g_propagate_error (error, g_steal_pointer (&error_local));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1584,14 +1578,8 @@ fu_plugin_runner_udev_device_added (FuPlugin *self, FuUdevDevice *device, GError
|
|||||||
if (func == NULL) {
|
if (func == NULL) {
|
||||||
if (priv->device_gtype != G_TYPE_INVALID ||
|
if (priv->device_gtype != G_TYPE_INVALID ||
|
||||||
fu_device_get_specialized_gtype (FU_DEVICE (device)) != G_TYPE_INVALID) {
|
fu_device_get_specialized_gtype (FU_DEVICE (device)) != G_TYPE_INVALID) {
|
||||||
if (!fu_plugin_udev_device_added (self, device, &error_local)) {
|
if (!fu_plugin_udev_device_added (self, device, error))
|
||||||
if (g_error_matches (error_local,
|
|
||||||
FWUPD_ERROR,
|
|
||||||
FWUPD_ERROR_NOT_SUPPORTED))
|
|
||||||
return TRUE;
|
|
||||||
g_propagate_error (error, g_steal_pointer (&error_local));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user