lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <DM5PR11MB1324EDC7A97DE98C2DC6EDA8C17A9@DM5PR11MB1324.namprd11.prod.outlook.com>
Date:   Fri, 2 Sep 2022 16:26:25 +0000
From:   "Ruhl, Michael J" <michael.j.ruhl@...el.com>
To:     Dmitry Osipenko <digetx@...il.com>,
        Dmitry Osipenko <dmitry.osipenko@...labora.com>,
        Jani Nikula <jani.nikula@...ux.intel.com>,
        Joonas Lahtinen <joonas.lahtinen@...ux.intel.com>,
        "Vivi, Rodrigo" <rodrigo.vivi@...el.com>,
        Tvrtko Ursulin <tvrtko.ursulin@...ux.intel.com>,
        Thomas Hellström <thomas_os@...pmail.org>,
        Christian König <christian.koenig@....com>,
        Chris Wilson <chris@...is-wilson.co.uk>
CC:     "dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "linux-media@...r.kernel.org" <linux-media@...r.kernel.org>,
        "linaro-mm-sig@...ts.linaro.org" <linaro-mm-sig@...ts.linaro.org>,
        "amd-gfx@...ts.freedesktop.org" <amd-gfx@...ts.freedesktop.org>,
        "intel-gfx@...ts.freedesktop.org" <intel-gfx@...ts.freedesktop.org>,
        "kernel@...labora.com" <kernel@...labora.com>,
        "virtualization@...ts.linux-foundation.org" 
        <virtualization@...ts.linux-foundation.org>,
        "linux-rdma@...r.kernel.org" <linux-rdma@...r.kernel.org>,
        "linux-arm-msm@...r.kernel.org" <linux-arm-msm@...r.kernel.org>,
        David Airlie <airlied@...ux.ie>,
        "Gerd Hoffmann" <kraxel@...hat.com>,
        Gurchetan Singh <gurchetansingh@...omium.org>,
        Chia-I Wu <olvaffe@...il.com>, Daniel Vetter <daniel@...ll.ch>,
        "Daniel Almeida" <daniel.almeida@...labora.com>,
        Gert Wollny <gert.wollny@...labora.com>,
        Gustavo Padovan <gustavo.padovan@...labora.com>,
        Daniel Stone <daniel@...ishbar.org>,
        Tomeu Vizoso <tomeu.vizoso@...labora.com>,
        Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
        Maxime Ripard <mripard@...nel.org>,
        Thomas Zimmermann <tzimmermann@...e.de>,
        Rob Clark <robdclark@...il.com>,
        Sumit Semwal <sumit.semwal@...aro.org>,
        "Pan, Xinhui" <Xinhui.Pan@....com>,
        Thierry Reding <thierry.reding@...il.com>,
        Tomasz Figa <tfiga@...omium.org>,
        Marek Szyprowski <m.szyprowski@...sung.com>,
        Mauro Carvalho Chehab <mchehab@...nel.org>,
        Alex Deucher <alexander.deucher@....com>,
        Qiang Yu <yuq825@...il.com>,
        Srinivas Kandagatla <srinivas.kandagatla@...aro.org>,
        Amol Maheshwari <amahesh@....qualcomm.com>,
        Jason Gunthorpe <jgg@...pe.ca>,
        Leon Romanovsky <leon@...nel.org>,
        "Gross, Jurgen" <jgross@...e.com>,
        "Stefano Stabellini" <sstabellini@...nel.org>,
        Oleksandr Tyshchenko <oleksandr_tyshchenko@...m.com>,
        Tomi Valkeinen <tomba@...nel.org>,
        "Russell King" <linux@...linux.org.uk>,
        Lucas Stach <l.stach@...gutronix.de>,
        Christian Gmeiner <christian.gmeiner@...il.com>
Subject: RE: [PATCH v4 06/21] drm/i915: Prepare to dynamic dma-buf locking
 specification

>-----Original Message-----
>From: Dmitry Osipenko <digetx@...il.com>
>Sent: Friday, September 2, 2022 6:39 AM
>To: Ruhl, Michael J <michael.j.ruhl@...el.com>; Dmitry Osipenko
><dmitry.osipenko@...labora.com>; Jani Nikula <jani.nikula@...ux.intel.com>;
>Joonas Lahtinen <joonas.lahtinen@...ux.intel.com>; Vivi, Rodrigo
><rodrigo.vivi@...el.com>; Tvrtko Ursulin <tvrtko.ursulin@...ux.intel.com>;
>Thomas Hellström <thomas_os@...pmail.org>; Christian König
><christian.koenig@....com>; Chris Wilson <chris@...is-wilson.co.uk>
>Cc: dri-devel@...ts.freedesktop.org; linux-kernel@...r.kernel.org; linux-
>media@...r.kernel.org; linaro-mm-sig@...ts.linaro.org; amd-
>gfx@...ts.freedesktop.org; intel-gfx@...ts.freedesktop.org;
>kernel@...labora.com; virtualization@...ts.linux-foundation.org; linux-
>rdma@...r.kernel.org; linux-arm-msm@...r.kernel.org; David Airlie
><airlied@...ux.ie>; Gerd Hoffmann <kraxel@...hat.com>; Gurchetan Singh
><gurchetansingh@...omium.org>; Chia-I Wu <olvaffe@...il.com>; Daniel
>Vetter <daniel@...ll.ch>; Daniel Almeida <daniel.almeida@...labora.com>;
>Gert Wollny <gert.wollny@...labora.com>; Gustavo Padovan
><gustavo.padovan@...labora.com>; Daniel Stone <daniel@...ishbar.org>;
>Tomeu Vizoso <tomeu.vizoso@...labora.com>; Maarten Lankhorst
><maarten.lankhorst@...ux.intel.com>; Maxime Ripard
><mripard@...nel.org>; Thomas Zimmermann <tzimmermann@...e.de>;
>Rob Clark <robdclark@...il.com>; Sumit Semwal
><sumit.semwal@...aro.org>; Pan, Xinhui <Xinhui.Pan@....com>; Thierry
>Reding <thierry.reding@...il.com>; Tomasz Figa <tfiga@...omium.org>;
>Marek Szyprowski <m.szyprowski@...sung.com>; Mauro Carvalho Chehab
><mchehab@...nel.org>; Alex Deucher <alexander.deucher@....com>;
>Qiang Yu <yuq825@...il.com>; Srinivas Kandagatla
><srinivas.kandagatla@...aro.org>; Amol Maheshwari
><amahesh@....qualcomm.com>; Jason Gunthorpe <jgg@...pe.ca>; Leon
>Romanovsky <leon@...nel.org>; Gross, Jurgen <jgross@...e.com>; Stefano
>Stabellini <sstabellini@...nel.org>; Oleksandr Tyshchenko
><oleksandr_tyshchenko@...m.com>; Tomi Valkeinen <tomba@...nel.org>;
>Russell King <linux@...linux.org.uk>; Lucas Stach <l.stach@...gutronix.de>;
>Christian Gmeiner <christian.gmeiner@...il.com>
>Subject: Re: [PATCH v4 06/21] drm/i915: Prepare to dynamic dma-buf locking
>specification
>
>02.09.2022 13:31, Dmitry Osipenko пишет:
>> 01.09.2022 17:02, Ruhl, Michael J пишет:
>> ...
>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
>>>> @@ -331,7 +331,19 @@ static void __i915_gem_free_objects(struct
>>>> drm_i915_private *i915,
>>>> 			continue;
>>>> 		}
>>>>
>>>> +		/*
>>>> +		 * dma_buf_unmap_attachment() requires reservation to be
>>>> +		 * locked. The imported GEM shouldn't share reservation lock,
>>>> +		 * so it's safe to take the lock.
>>>> +		 */
>>>> +		if (obj->base.import_attach)
>>>> +			i915_gem_object_lock(obj, NULL);
>>>
>>> There is a lot of stuff going here.  Taking the lock may be premature...
>>>
>>>> 		__i915_gem_object_pages_fini(obj);
>>>
>>> The i915_gem_dmabuf.c:i915_gem_object_put_pages_dmabuf is where
>>> unmap_attachment is actually called, would it make more sense to make
>>> do the locking there?
>>
>> The __i915_gem_object_put_pages() is invoked with a held reservation
>> lock, while freeing object is a special time when we know that GEM is
>> unused.
>>
>> The __i915_gem_free_objects() was taking the lock two weeks ago until
>> the change made Chris Wilson [1] reached linux-next.
>>
>> [1]
>> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-
>next.git/commit/?id=2826d447fbd60e6a05e53d5f918bceb8c04e315c
>>
>> I don't think we can take the lock within
>> i915_gem_object_put_pages_dmabuf(), it may/should deadlock other code
>paths.
>
>On the other hand, we can check whether the GEM's refcount number is
>zero in i915_gem_object_put_pages_dmabuf() and then take the lock if
>it's zero.
>
>Also, seems it should be possible just to bail out from
>i915_gem_object_put_pages_dmabuf() if refcount=0. The further
>drm_prime_gem_destroy() will take care of unmapping. Perhaps this could
>be the best option, I'll give it a test.

i915_gem_object_put_pages() is uses the SG, and the usage for
drm_prim_gem_destroy()

from __i915_gem_free_objects() doesn't use the SG because it has been "freed"
already, I am not sure if that would work...

Hmm.. with that in mind, maybe moving the base.import_attach check to 
__i915_gem_object_put_pages with your attach check?

	atomic_set(&obj->mm.pages_pin_count, 0);
	if (obj->base.import)
		i915_gem_object_lock(obj, NULL);

	__i915_gem_object_put_pages(obj);

	if (obj->base.import)
		i915_gem_object_unlock(obj, NULL);
	GEM_BUG_ON(i915_gem_object_has_pages(obj));

Pretty much one step up from the dmabuf interface, but we are guaranteed to
not have any pinned pages?

The other caller of __i915_gem_object_pages_fini is the i915_ttm move_notify
which should not conflict (export side, not import side).

Since it appears that not locking during the clean up is desirable, trying to make sure take the lock
is taken at the last moment might be the right path?

M

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ