In order to make request_*muxed_region() behave more like mutex_lock(), a possible failure case needs to be eliminated. When drivers do not properly share the same I/O region, e.g. one is using request_region() and the other is using request_muxed_region(), the kernel didn't warn the user about it. This change modifies IORESOURCE_MUXED behaviour so it always goes to sleep waiting for the resuorce to be freed and the inconsistent resource flag usage is logged with KERN_ERR. v2: Fixed checkpatch.pl warnings and extended the comment about request_declared_muxed_region. Signed-off-by: Zoltán Böszörményi <zboszor@xxxxx> --- kernel/resource.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/resource.c b/kernel/resource.c index 2be7029..5df2731 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -1125,6 +1125,7 @@ resource_size_t resource_alignment(struct resource *res) * * request_declared_muxed_region creates a new shared busy region * described in an existing resource descriptor. + * It only returns if it succeeded. * * release_region releases a matching busy region. * The region is only freed if it was allocated. @@ -1191,7 +1192,10 @@ struct resource *__request_declared_region(struct resource *parent, continue; } } - if (conflict->flags & flags & IORESOURCE_MUXED) { + if (flags & IORESOURCE_MUXED) { + if (!(conflict->flags & IORESOURCE_MUXED)) + pr_err("Resource conflict between muxed \"%s\" and non-muxed \"%s\" I/O regions!\n", + res->name, conflict->name); add_wait_queue(&muxed_resource_wait, &wait); write_unlock(&resource_lock); set_current_state(TASK_UNINTERRUPTIBLE); -- 2.9.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html