From: Eric Auger <eric.auger@linaro.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: eric.auger@st.com, alex.williamson@redhat.com,
b.reynal@virtualopensystems.com,
linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
christoffer.dall@linaro.org, linux-kernel@vger.kernel.org,
patches@linaro.org
Subject: Re: [PATCH v2 6/6] vfio: platform: move get/put reset at open/release
Date: Thu, 22 Oct 2015 13:40:16 +0200 [thread overview]
Message-ID: <5628CB20.7040301@linaro.org> (raw)
In-Reply-To: <4304536.D7eNHjlsvD@wuerfel>
Hi Arnd,
On 10/22/2015 12:29 PM, Arnd Bergmann wrote:
> On Thursday 22 October 2015 11:42:02 Eric Auger wrote:
>> Currently reset lookup is done on probe. This introduces a
>> race with new registration mechanism in the case where the
>> vfio-platform driver is bound to the device before its module
>> is loaded: on the load, the probe happens which triggers the
>> reset module load which itself attempts to get the symbol for
>> the registration function (vfio_platform_register_reset). The
>> symbol is not yet available hence the lookup fails. In case we
>> do the lookup in the first open we are sure the vfio-platform
>> module is loaded and vfio_platform_register_reset is available.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>
> I don't understand the explanation. I would expect the request_module()
> call to block until the module is actually loaded. Is this not
> what happens?
Again many thanks for this new review.
My understanding is the following
1) vfio-platform is attached to the device through the override mechanism
2) vfio-platform get loaded through modprobe:
2-1) the platform driver init function eventually calls the
vfio-platform probe function.
2-2) request_module of vfio-platform-calxedaxgmac gets called.
3) The init of vfio-platform-calxedaxgmac looks for
vfio_platform_register_reset. Unfortunately at that stage the init of
vfio-platform is not completed so the symbol is not available
3-1) in case symbol_get is used in vfio_platform_calxedaxgmac init, as
of today, this latter simply returns -EINVAL. Reset registration failed
but no stall.
3-2) in case symbol_get is *not* used, I think the module loader
attempts to load vfio-platform, which is already under load and this
causes a stall.
Let me know if you think this understanding is not correct.
Best Regards
Eric
>
>> mutex_unlock(&driver_lock);
>> @@ -181,6 +182,8 @@ static int vfio_platform_open(void *device_data)
>> if (ret)
>> goto err_irq;
>>
>> + vfio_platform_get_reset(vdev);
>> +
>> if (vdev->reset)
>> vdev->reset(vdev);
>>
>
> This needs some error handling to ensure that the open() fails
> if there is no reset handler.
>
> Arnd
>
WARNING: multiple messages have this Message-ID (diff)
From: eric.auger@linaro.org (Eric Auger)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 6/6] vfio: platform: move get/put reset at open/release
Date: Thu, 22 Oct 2015 13:40:16 +0200 [thread overview]
Message-ID: <5628CB20.7040301@linaro.org> (raw)
In-Reply-To: <4304536.D7eNHjlsvD@wuerfel>
Hi Arnd,
On 10/22/2015 12:29 PM, Arnd Bergmann wrote:
> On Thursday 22 October 2015 11:42:02 Eric Auger wrote:
>> Currently reset lookup is done on probe. This introduces a
>> race with new registration mechanism in the case where the
>> vfio-platform driver is bound to the device before its module
>> is loaded: on the load, the probe happens which triggers the
>> reset module load which itself attempts to get the symbol for
>> the registration function (vfio_platform_register_reset). The
>> symbol is not yet available hence the lookup fails. In case we
>> do the lookup in the first open we are sure the vfio-platform
>> module is loaded and vfio_platform_register_reset is available.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>
> I don't understand the explanation. I would expect the request_module()
> call to block until the module is actually loaded. Is this not
> what happens?
Again many thanks for this new review.
My understanding is the following
1) vfio-platform is attached to the device through the override mechanism
2) vfio-platform get loaded through modprobe:
2-1) the platform driver init function eventually calls the
vfio-platform probe function.
2-2) request_module of vfio-platform-calxedaxgmac gets called.
3) The init of vfio-platform-calxedaxgmac looks for
vfio_platform_register_reset. Unfortunately at that stage the init of
vfio-platform is not completed so the symbol is not available
3-1) in case symbol_get is used in vfio_platform_calxedaxgmac init, as
of today, this latter simply returns -EINVAL. Reset registration failed
but no stall.
3-2) in case symbol_get is *not* used, I think the module loader
attempts to load vfio-platform, which is already under load and this
causes a stall.
Let me know if you think this understanding is not correct.
Best Regards
Eric
>
>> mutex_unlock(&driver_lock);
>> @@ -181,6 +182,8 @@ static int vfio_platform_open(void *device_data)
>> if (ret)
>> goto err_irq;
>>
>> + vfio_platform_get_reset(vdev);
>> +
>> if (vdev->reset)
>> vdev->reset(vdev);
>>
>
> This needs some error handling to ensure that the open() fails
> if there is no reset handler.
>
> Arnd
>
next prev parent reply other threads:[~2015-10-22 11:40 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-22 9:41 [PATCH v2 0/6] VFIO platform reset module rework Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 9:41 ` [PATCH v2 1/6] vfio: platform: add capability to register a reset function Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 10:06 ` Arnd Bergmann
2015-10-22 10:06 ` Arnd Bergmann
2015-10-22 9:41 ` [PATCH v2 2/6] vfio: platform: reset: add vfio_platform_reset_private.h Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 10:12 ` Arnd Bergmann
2015-10-22 10:12 ` Arnd Bergmann
2015-10-22 10:12 ` Arnd Bergmann
2015-10-22 9:41 ` [PATCH v2 3/6] vfio: platform: reset: calxedaxgmac: add reset function registration Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 9:41 ` Eric Auger
2015-10-22 10:13 ` Arnd Bergmann
2015-10-22 10:13 ` Arnd Bergmann
2015-10-22 11:54 ` Eric Auger
2015-10-22 11:54 ` Eric Auger
2015-10-22 11:54 ` Eric Auger
2015-10-22 12:09 ` Arnd Bergmann
2015-10-22 12:09 ` Arnd Bergmann
2015-10-22 12:29 ` Eric Auger
2015-10-22 12:29 ` Eric Auger
2015-10-22 12:29 ` Eric Auger
2015-10-22 9:42 ` [PATCH v2 4/6] vfio: platform: add compat in vfio_platform_device Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 9:42 ` [PATCH v2 5/6] vfio: platform: use list of registered reset function Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 10:19 ` Arnd Bergmann
2015-10-22 10:19 ` Arnd Bergmann
2015-10-22 10:19 ` Arnd Bergmann
2015-10-22 11:46 ` Eric Auger
2015-10-22 11:46 ` Eric Auger
2015-10-22 11:46 ` Eric Auger
2015-10-22 9:42 ` [PATCH v2 6/6] vfio: platform: move get/put reset at open/release Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 9:42 ` Eric Auger
2015-10-22 10:29 ` Arnd Bergmann
2015-10-22 10:29 ` Arnd Bergmann
2015-10-22 10:29 ` Arnd Bergmann
2015-10-22 11:40 ` Eric Auger [this message]
2015-10-22 11:40 ` Eric Auger
2015-10-22 12:05 ` Arnd Bergmann
2015-10-22 12:05 ` Arnd Bergmann
2015-10-22 12:27 ` Eric Auger
2015-10-22 12:27 ` Eric Auger
2015-10-22 12:27 ` Eric Auger
2015-10-22 13:26 ` Eric Auger
2015-10-22 13:26 ` Eric Auger
2015-10-22 13:26 ` Eric Auger
2015-10-22 14:10 ` Arnd Bergmann
2015-10-22 14:10 ` Arnd Bergmann
2015-10-22 14:10 ` Arnd Bergmann
2015-10-22 14:23 ` Eric Auger
2015-10-22 14:23 ` Eric Auger
2015-10-22 14:23 ` Eric Auger
2015-10-22 15:40 ` Alex Williamson
2015-10-22 15:40 ` Alex Williamson
2015-10-22 15:40 ` Alex Williamson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5628CB20.7040301@linaro.org \
--to=eric.auger@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=arnd@arndb.de \
--cc=b.reynal@virtualopensystems.com \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger@st.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.