Re: [Intel-gfx] [PATCH v15 16/23] drm/shmem-helper: Use kref for vmap_use_count

2023-09-02 Thread Dmitry Osipenko
On 8/28/23 13:00, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:42 +0300 > Dmitry Osipenko wrote: > >> Use kref helper for vmap_use_count to make refcounting consistent with >> pages_use_count and pages_pin_count that use kref. This will allow to >> optimize unl

Re: [Intel-gfx] [PATCH v15 17/23] drm/shmem-helper: Add and use drm_gem_shmem_resv_assert_held() helper

2023-09-02 Thread Dmitry Osipenko
On 8/29/23 10:29, Boris Brezillon wrote: > On Tue, 29 Aug 2023 05:34:23 +0300 > Dmitry Osipenko wrote: > >> On 8/28/23 13:12, Boris Brezillon wrote: >>> On Sun, 27 Aug 2023 20:54:43 +0300 >>> Dmitry Osipenko wrote: >>> >>>> In a pre

Re: [Intel-gfx] [PATCH v15 02/23] drm/shmem-helper: Use flag for tracking page count bumped by get_pages_sgt()

2023-09-02 Thread Dmitry Osipenko
On 8/28/23 13:55, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:28 +0300 > Dmitry Osipenko wrote: > >> Use separate flag for tracking page count bumped by shmem->sgt to avoid >> imbalanced page counter during of drm_gem_shmem_free() time. It's fragile >>

Re: [Intel-gfx] [PATCH v15 01/23] drm/shmem-helper: Fix UAF in error path when freeing SGT of imported GEM

2023-09-02 Thread Dmitry Osipenko
On 8/28/23 14:16, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:27 +0300 > Dmitry Osipenko wrote: > >> Freeing drm-shmem GEM right after creating it using >> drm_gem_shmem_prime_import_sg_table() frees SGT of the imported dma-buf >> and then dma-buf

Re: [Intel-gfx] [PATCH v15 00/23] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers

2023-08-28 Thread Dmitry Osipenko
On 8/28/23 18:24, Helen Mae Koike Fornazier wrote: > On Monday, August 28, 2023 11:37 -03, "Helen Mae Koike Fornazier" > wrote: > >> On Sunday, August 27, 2023 14:54 -03, Dmitry Osipenko >> wrote: >> >>> This series: >>> >>> 1.

Re: [Intel-gfx] [PATCH v15 17/23] drm/shmem-helper: Add and use drm_gem_shmem_resv_assert_held() helper

2023-08-28 Thread Dmitry Osipenko
On 8/28/23 13:12, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:43 +0300 > Dmitry Osipenko wrote: > >> In a preparation of adding drm-shmem memory shrinker, move all reservation >> locking lockdep checks to use new drm_gem_shmem_resv_assert_held() that >> wi

Re: [Intel-gfx] [PATCH v15 12/23] drm/shmem-helper: Add and use pages_pin_count

2023-08-28 Thread Dmitry Osipenko
On 8/28/23 14:46, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:38 +0300 > Dmitry Osipenko wrote: > >> Add separate pages_pin_count for tracking of whether drm-shmem pages are >> moveable or not. With the addition of memory shrinker support to drm-shmem, &

Re: [Intel-gfx] [PATCH v15 10/23] locking/refcount, kref: Add kref_put_ww_mutex()

2023-08-28 Thread Dmitry Osipenko
On 8/28/23 12:26, Boris Brezillon wrote: > On Sun, 27 Aug 2023 20:54:36 +0300 > Dmitry Osipenko wrote: > >> Introduce kref_put_ww_mutex() helper that will handle the wait-wound >> mutex auto-locking on kref_put(). This helper is wanted by DRM drivers >> that exte

[Intel-gfx] [PATCH v15 15/23] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin

2023-08-27 Thread Dmitry Osipenko
ned), while the new pages_pin_count will do the hard-pinning. Switch the vmap/vunmap() to use pin/unpin() functions in a preparation of addition of the memory shrinker support to drm-shmem. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 13 ++--- include/

[Intel-gfx] [PATCH v15 21/23] drm/virtio: Attach shmem BOs dynamically

2023-08-27 Thread Dmitry Osipenko
attachment explicitly dynamic will allow to simplify and reuse more code when shrinker will be added. The virtio_gpu_object_shmem_init() now works under held reservation lock, which will be important to have for shrinker. Acked-by: Gerd Hoffmann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio

[Intel-gfx] [PATCH v15 22/23] drm/virtio: Support memory shrinking

2023-08-27 Thread Dmitry Osipenko
y if guest supports SWAP file or partition. Acked-by: Gerd Hoffmann Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_drv.h| 13 +- drivers/gpu/drm/virtio/virtgpu_gem.c| 35 ++ drivers/gpu/drm/virtio/virtgpu_ioctl.c | 25 +

[Intel-gfx] [PATCH v15 18/23] drm/shmem-helper: Add memory shrinker

2023-08-27 Thread Dmitry Osipenko
. Initialize drm-shmem internals using drmm_gem_shmem_init(drm_device), which will register drm-shmem shrinker 3. Implement madvise IOCTL that will use drm_gem_shmem_madvise() Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 415

[Intel-gfx] [PATCH v15 23/23] drm/panfrost: Switch to generic memory shrinker

2023-08-27 Thread Dmitry Osipenko
Replace Panfrost's custom memory shrinker with a common drm-shmem memory shrinker. Tested-by: Steven Price # Firefly-RK3288 Reviewed-by: Steven Price Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/panfrost/Makefile | 1 - drivers/gpu/drm/panfrost/panfrost_device.h| 4

[Intel-gfx] [PATCH v15 14/23] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages()

2023-08-27 Thread Dmitry Osipenko
Add lockless drm_gem_shmem_get_pages() helper that skips taking reservation lock if pages_use_count is non-zero, leveraging from atomicity of the kref counter. Make drm_gem_shmem_mmap() to utilize the new helper. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm

[Intel-gfx] [PATCH v15 19/23] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked()

2023-08-27 Thread Dmitry Osipenko
Export drm_gem_shmem_get_pages_sgt_locked() that will be used by virtio-gpu shrinker during GEM swap-in operation done under the held reservation lock. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 3 ++- include/drm/drm_gem_shmem_helper.h | 1 + 2 files

[Intel-gfx] [PATCH v15 17/23] drm/shmem-helper: Add and use drm_gem_shmem_resv_assert_held() helper

2023-08-27 Thread Dmitry Osipenko
that it's impossible to have locking contention with the fs_reclam at this special time. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 37 +- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b

[Intel-gfx] [PATCH v15 20/23] drm/virtio: Pin display framebuffer BO

2023-08-27 Thread Dmitry Osipenko
-by: Gerd Hoffmann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ drivers/gpu/drm/virtio/virtgpu_gem.c | 19 +++ drivers/gpu/drm/virtio/virtgpu_plane.c | 17 +++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers

[Intel-gfx] [PATCH v15 08/23] drm/shmem-helper: Refactor locked/unlocked functions

2023-08-27 Thread Dmitry Osipenko
Add locked and remove unlocked postfixes from drm-shmem function names, making names consistent with the drm/gem core code. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 64 +-- drivers/gpu/drm/lima/lima_gem.c

[Intel-gfx] [PATCH v15 09/23] drm/shmem-helper: Remove obsoleted is_iomem test

2023-08-27 Thread Dmitry Osipenko
y: Thomas Zimmermann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 -- 1 file changed, 6 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index f053dc511508..d545d3d227d7 100644 --- a/driver

[Intel-gfx] [PATCH v15 16/23] drm/shmem-helper: Use kref for vmap_use_count

2023-08-27 Thread Dmitry Osipenko
Use kref helper for vmap_use_count to make refcounting consistent with pages_use_count and pages_pin_count that use kref. This will allow to optimize unlocked vmappings by skipping reservation locking if refcnt > 1. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/

[Intel-gfx] [PATCH v15 12/23] drm/shmem-helper: Add and use pages_pin_count

2023-08-27 Thread Dmitry Osipenko
be swapped out). The pages_pin_count > 1 will hard-pin pages in memory. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 22 +- include/drm/drm_gem_shmem_helper.h | 10 ++ 2 files changed, 27 insertions(+)

[Intel-gfx] [PATCH v15 04/23] drm/gem: Add _locked postfix to functions that have unlocked counterpart

2023-08-27 Thread Dmitry Osipenko
Add _locked postfix to drm_gem functions that have unlocked counterpart functions to make GEM functions naming more consistent and intuitive in regards to the locking requirements. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem.c | 6 +++--- include

[Intel-gfx] [PATCH v15 06/23] drm/virtio: Replace drm_gem_shmem_free() with drm_gem_object_put()

2023-08-27 Thread Dmitry Osipenko
in order to prevent spurious lockdep warning about resv lock ordering vs fs_reclaim code paths. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_object.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm

[Intel-gfx] [PATCH v15 13/23] drm/shmem-helper: Use kref for pages_use_count

2023-08-27 Thread Dmitry Osipenko
Use atomic kref helper for pages_use_count to optimize pin/unpin functions by skipping reservation locking while GEM's pin refcount > 1. Suggested-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 48 ++--- drivers/gpu/drm/l

[Intel-gfx] [PATCH v15 11/23] dma-resv: Add kref_put_dma_resv()

2023-08-27 Thread Dmitry Osipenko
Add simple kref_put_dma_resv() helper that wraps around kref_put_ww_mutex() for drivers that needs to lock dma-resv on kref_put(). It's not possible to easily add this helper to kref.h because of the headers inclusion dependency, hence add it to dma-resv.h. Signed-off-by: Dmitry Osipenko

[Intel-gfx] [PATCH v15 05/23] drm/v3d: Replace open-coded drm_gem_shmem_free() with drm_gem_object_put()

2023-08-27 Thread Dmitry Osipenko
code paths. Replace open-coded drm_gem_shmem_free() with drm_gem_object_put() that drops kref to zero before freeing GEM. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/v3d/v3d_bo.c | 22 -- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm

[Intel-gfx] [PATCH v15 10/23] locking/refcount, kref: Add kref_put_ww_mutex()

2023-08-27 Thread Dmitry Osipenko
Introduce kref_put_ww_mutex() helper that will handle the wait-wound mutex auto-locking on kref_put(). This helper is wanted by DRM drivers that extensively use dma-reservation locking which in turns uses ww-mutex. Signed-off-by: Dmitry Osipenko --- include/linux/kref.h | 12

[Intel-gfx] [PATCH v15 07/23] drm/shmem-helper: Make all exported symbols GPL

2023-08-27 Thread Dmitry Osipenko
Make all drm-shmem exported symbols GPL to make them consistent with the rest of drm-shmem symbols. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm

[Intel-gfx] [PATCH v15 03/23] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names

2023-08-27 Thread Dmitry Osipenko
Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_client.c | 6 +++--- drivers/gpu/drm/drm_gem.c| 20 ++-- drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +++--- drivers/gpu/drm/drm_internal.h | 4 ++-- drivers/gpu/drm

[Intel-gfx] [PATCH v15 01/23] drm/shmem-helper: Fix UAF in error path when freeing SGT of imported GEM

2023-08-27 Thread Dmitry Osipenko
t;) Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 3 ++- include/drm/drm_gem_shmem_helper.h | 7 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index a7

[Intel-gfx] [PATCH v15 02/23] drm/shmem-helper: Use flag for tracking page count bumped by get_pages_sgt()

2023-08-27 Thread Dmitry Osipenko
emoves the ambiguity. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 3 ++- drivers/gpu/drm/lima/lima_gem.c| 1 + include/drm/drm_gem_shmem_helper.h | 7 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helpe

[Intel-gfx] [PATCH v15 00/23] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers

2023-08-27 Thread Dmitry Osipenko
85e9-51bb40a8b...@collabora.com/T/ Dmitry Osipenko (23): drm/shmem-helper: Fix UAF in error path when freeing SGT of imported GEM drm/shmem-helper: Use flag for tracking page count bumped by get_pages_sgt() drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function nam

Re: [Intel-gfx] [PATCH v13 03/10] drm/shmem-helper: Add pages_pin_count field

2023-06-26 Thread Dmitry Osipenko
On 6/26/23 18:21, Boris Brezillon wrote: > On Mon, 26 Jun 2023 17:04:57 +0200 > Boris Brezillon wrote: > >> Hi Dmitry, >> >> Sorry for chiming in only now :-/. >> >> On Tue, 14 Mar 2023 05:26:52 +0300 >> Dmitry Osipenko wrote: >> >>>

Re: [Intel-gfx] [PATCH v4 6/6] drm/shmem-helper: Switch to reservation lock

2023-06-26 Thread Dmitry Osipenko
On 6/26/23 12:40, Boris Brezillon wrote: > I think here is the major problem I have with this patch: you've made > drm_gem_shmem_{get_pages,pin}() private, which forces me to call > drm_gem_shmem_pin() in a path where I already acquired the resv lock > (using the drm_exec infra proposed by

Re: [Intel-gfx] [PATCH v4 6/6] drm/shmem-helper: Switch to reservation lock

2023-06-26 Thread Dmitry Osipenko
On 6/26/23 12:40, Boris Brezillon wrote: > Same problem with this renaming: it's confusing because this function > was previously taking care of the locking, and it's no longer the case. > That's actually true for other public functions your patching, but I > won't go over all of them. > > I know

Re: [Intel-gfx] [PATCH v4 0/6] Move dma-buf mmap() reservation locking down to exporters

2023-06-21 Thread Dmitry Osipenko
On 5/30/23 01:39, Dmitry Osipenko wrote: > This patchset makes dma-buf exporters responisble for taking care of > the reservation lock. I also included patch that moves drm-shmem to use > reservation lock, to let CI test the whole set. I'm going to take all > the patches via the d

Re: [Intel-gfx] [PATCH v4 5/6] dma-buf: Change locking policy for mmap()

2023-06-21 Thread Dmitry Osipenko
On 6/21/23 08:42, Christian König wrote: > Am 20.06.23 um 17:58 schrieb Dmitry Osipenko: >> On 5/31/23 22:58, Dmitry Osipenko wrote: >>> On 5/30/23 01:39, Dmitry Osipenko wrote: >>>> Change locking policy of mmap() callback, making exporters responsible >>

Re: [Intel-gfx] [PATCH v4 2/6] dma-buf/heaps: Don't assert held reservation lock for dma-buf mmapping

2023-06-21 Thread Dmitry Osipenko
Hi, On 6/21/23 20:21, T.J. Mercier wrote: > On Mon, May 29, 2023 at 3:46 PM Dmitry Osipenko > wrote: >> >> Don't assert held dma-buf reservation lock on memory mapping of exported >> buffer. >> >> We're going to change dma-buf mmap() locking policy such t

Re: [Intel-gfx] [PATCH v4 5/6] dma-buf: Change locking policy for mmap()

2023-06-20 Thread Dmitry Osipenko
On 5/31/23 22:58, Dmitry Osipenko wrote: > On 5/30/23 01:39, Dmitry Osipenko wrote: >> Change locking policy of mmap() callback, making exporters responsible >> for handling dma-buf reservation locking. Previous locking policy stated >> that dma-buf is locked for both im

Re: [Intel-gfx] [PATCH v4 5/6] dma-buf: Change locking policy for mmap()

2023-05-31 Thread Dmitry Osipenko
On 5/30/23 01:39, Dmitry Osipenko wrote: > Change locking policy of mmap() callback, making exporters responsible > for handling dma-buf reservation locking. Previous locking policy stated > that dma-buf is locked for both importers and exporters by the dma-buf > core, which cause

[Intel-gfx] [PATCH v4 6/6] drm/shmem-helper: Switch to reservation lock

2023-05-29 Thread Dmitry Osipenko
-by: Daniel Vetter Acked-by: Thomas Zimmermann Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 210 -- drivers/gpu/drm/lima/lima_gem.c | 8 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +- .../gpu

[Intel-gfx] [PATCH v4 2/6] dma-buf/heaps: Don't assert held reservation lock for dma-buf mmapping

2023-05-29 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem solved by moving the lock down to exporters. This patch prepares dma-buf heaps for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/heaps/cma_heap.c| 3 --- drivers/dma

[Intel-gfx] [PATCH v4 5/6] dma-buf: Change locking policy for mmap()

2023-05-29 Thread Dmitry Osipenko
dma-bufs which required to take the lock from the DRM exporter side. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/dma-buf.c | 17 +++-- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c

[Intel-gfx] [PATCH v4 3/6] udmabuf: Don't assert held reservation lock for dma-buf mmapping

2023-05-29 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares udmabuf for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/udmabuf.c | 2 -- 1 file changed, 2

[Intel-gfx] [PATCH v4 4/6] drm: Don't assert held reservation lock for dma-buf mmapping

2023-05-29 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares DRM drivers for the locking policy update. Reviewed-by: Emil Velikov Acked-by: Christian König Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_prime.c

[Intel-gfx] [PATCH v4 1/6] media: videobuf2: Don't assert held reservation lock for dma-buf mmapping

2023-05-29 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares videobuf2 for the locking policy update. Reviewed-by: Emil Velikov Reviewed-by: Hans Verkuil Signed-off-by: Dmitry Osipenko --- drivers/media/common/videobuf2

[Intel-gfx] [PATCH v4 0/6] Move dma-buf mmap() reservation locking down to exporters

2023-05-29 Thread Dmitry Osipenko
ggested in a comment to v1. - Corrected drm-shmem patch dma_resv_lock(obj->resv) inconsistently used with dma_resv_unlock(shmem->base.resv). Now shmem->base.resv variant is used for all locks/unlocks. Dmitry Osipenko (6): media: videobuf2: Don't assert held reservation

Re: [Intel-gfx] [PATCH v3 6/6] drm/shmem-helper: Switch to reservation lock

2023-05-29 Thread Dmitry Osipenko
On 5/22/23 16:02, Emil Velikov wrote: >> -void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) >> +static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) >> +{ >> + int ret; >> + >> + dma_resv_assert_held(shmem->base.resv); >> + >> + ret =

Re: [Intel-gfx] [PATCH v3 6/6] drm/shmem-helper: Switch to reservation lock

2023-05-22 Thread Dmitry Osipenko
On 5/22/23 16:02, Emil Velikov wrote: > Hi Dmitry, > > Saw v3 fly by, so I had a quick look. Original RB still stands, > although I noticed a couple of non-blocking nitpicks. > > On Sun, 21 May 2023 at 22:00, Dmitry Osipenko > wrote: > >> -static int drm_gem

[Intel-gfx] [PATCH v3 6/6] drm/shmem-helper: Switch to reservation lock

2023-05-21 Thread Dmitry Osipenko
-by: Daniel Vetter Acked-by: Thomas Zimmermann Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 208 -- drivers/gpu/drm/lima/lima_gem.c | 8 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +- .../gpu

[Intel-gfx] [PATCH v3 5/6] dma-buf: Change locking policy for mmap()

2023-05-21 Thread Dmitry Osipenko
dma-bufs which required to take the lock from the DRM exporter side. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/dma-buf.c | 17 +++-- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c

[Intel-gfx] [PATCH v3 4/6] drm: Don't assert held reservation lock for dma-buf mmapping

2023-05-21 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares DRM drivers for the locking policy update. Reviewed-by: Emil Velikov Acked-by: Christian König Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_prime.c

[Intel-gfx] [PATCH v3 2/6] dma-buf/heaps: Don't assert held reservation lock for dma-buf mmapping

2023-05-21 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem solved by moving the lock down to exporters. This patch prepares dma-buf heaps for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/heaps/cma_heap.c| 3 --- drivers/dma

[Intel-gfx] [PATCH v3 1/6] media: videobuf2: Don't assert held reservation lock for dma-buf mmapping

2023-05-21 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares videobuf2 for the locking policy update. Reviewed-by: Emil Velikov Reviewed-by: Hans Verkuil Signed-off-by: Dmitry Osipenko --- drivers/media/common/videobuf2

[Intel-gfx] [PATCH v3 3/6] udmabuf: Don't assert held reservation lock for dma-buf mmapping

2023-05-21 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares udmabuf for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/udmabuf.c | 2 -- 1 file changed, 2

[Intel-gfx] [PATCH v3 0/6] Move dma-buf mmap() reservation locking down to exporters

2023-05-21 Thread Dmitry Osipenko
esv). Now shmem->base.resv variant is used for all locks/unlocks. Dmitry Osipenko (6): media: videobuf2: Don't assert held reservation lock for dma-buf mmapping dma-buf/heaps: Don't assert held reservation lock for dma-buf mmapping udmabuf: Don't assert held reservation lock for

Re: [Intel-gfx] [PATCH v2 6/7] dma-buf: Change locking policy for mmap()

2023-05-01 Thread Dmitry Osipenko
On 4/6/23 19:06, Dmitry Osipenko wrote: > Change locking policy of mmap() callback, making exporters responsible > for handling dma-buf reservation locking. Previous locking policy stated > that dma-buf is locked for both importers and exporters by the dma-buf > core, which cause

[Intel-gfx] [PATCH v2 2/7] dma-buf/heaps: Don't assert held reservation lock for dma-buf mmapping

2023-04-06 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem solved by moving the lock down to exporters. This patch prepares dma-buf heaps for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/heaps/cma_heap.c| 3 --- drivers/dma

[Intel-gfx] [PATCH v2 6/7] dma-buf: Change locking policy for mmap()

2023-04-06 Thread Dmitry Osipenko
dma-bufs which required to take the lock from the DRM exporter side. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/dma-buf.c | 17 +++-- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c

[Intel-gfx] [PATCH v2 7/7] drm/shmem-helper: Switch to reservation lock

2023-04-06 Thread Dmitry Osipenko
-by: Daniel Vetter Acked-by: Thomas Zimmermann Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 208 -- drivers/gpu/drm/lima/lima_gem.c | 8 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +- .../gpu

[Intel-gfx] [PATCH v2 5/7] drm: Don't assert held reservation lock for dma-buf mmapping

2023-04-06 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares DRM drivers for the locking policy update. Reviewed-by: Emil Velikov Acked-by: Christian König Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_prime.c

[Intel-gfx] [PATCH v2 4/7] fastrpc: Don't assert held reservation lock for dma-buf mmapping

2023-04-06 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares fastrpc for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/misc/fastrpc.c | 3 --- 1 file changed, 3 deletions

[Intel-gfx] [PATCH v2 3/7] udmabuf: Don't assert held reservation lock for dma-buf mmapping

2023-04-06 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares udmabuf for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/udmabuf.c | 2 -- 1 file changed, 2

[Intel-gfx] [PATCH v2 1/7] media: videobuf2: Don't assert held reservation lock for dma-buf mmapping

2023-04-06 Thread Dmitry Osipenko
these drivers are moved to use reservation lock universally. The problem is solved by moving the lock down to exporters. This patch prepares videobuf2 for the locking policy update. Reviewed-by: Emil Velikov Signed-off-by: Dmitry Osipenko --- drivers/media/common/videobuf2/videobuf2-dma-contig.c | 3

[Intel-gfx] [PATCH v2 0/7] Move dma-buf mmap() reservation locking down to exporters

2023-04-06 Thread Dmitry Osipenko
-b from Emil Velikov and placed the drm_WARN in the drm-shmem patch like he suggested in a comment to v1. - Corrected drm-shmem patch dma_resv_lock(obj->resv) inconsistently used with dma_resv_unlock(shmem->base.resv). Now shmem->base.resv variant is used for all locks

Re: [Intel-gfx] [PATCH v1 5/7] Revert "drm: Assert held reservation lock for dma-buf mmapping"

2023-04-04 Thread Dmitry Osipenko
On 4/3/23 18:17, Christian König wrote: > Am 02.04.23 um 18:48 schrieb Dmitry Osipenko: >> Don't assert held dma-buf reservation lock on memory mapping of exported >> buffer. >> >> We're going to change dma-buf mmap() locking policy such that exporters >> will have

Re: [Intel-gfx] [PATCH v1 0/7] Move dma-buf mmap() reservation locking down to exporters

2023-04-03 Thread Dmitry Osipenko
On 4/2/23 19:48, Dmitry Osipenko wrote: > This patchset makes dma-buf exporters responisble for taking care of > the reservation lock. I also included patch that moves drm-shmem to use > reservation lock, to let CI test the whole set. I'm going to take all > the patches via the d

[Intel-gfx] [PATCH v1 7/7] drm/shmem-helper: Switch to reservation lock

2023-04-02 Thread Dmitry Osipenko
-by: Daniel Vetter Acked-by: Thomas Zimmermann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 217 -- drivers/gpu/drm/lima/lima_gem.c | 8 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +- .../gpu/drm/panfrost

[Intel-gfx] [PATCH v1 6/7] dma-buf: Change locking policy for mmap()

2023-04-02 Thread Dmitry Osipenko
dma-bufs which required to take the lock from the DRM exporter side. Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/dma-buf.c | 17 +++-- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index aa4ea8530cb3

[Intel-gfx] [PATCH v1 5/7] Revert "drm: Assert held reservation lock for dma-buf mmapping"

2023-04-02 Thread Dmitry Osipenko
solved by moving the lock down to exporters. Fixes: 39ce25291871 ("drm: Assert held reservation lock for dma-buf mmapping") Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_prime.c| 2 -- drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 2 -- drivers/gpu/d

[Intel-gfx] [PATCH v1 4/7] Revert "fastrpc: Assert held reservation lock for dma-buf mmapping"

2023-04-02 Thread Dmitry Osipenko
solved by moving the lock down to exporters. Fixes: 265751a513ad ("fastrpc: Assert held reservation lock for dma-buf mmapping") Signed-off-by: Dmitry Osipenko --- drivers/misc/fastrpc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastr

[Intel-gfx] [PATCH v1 3/7] Revert "udmabuf: Assert held reservation lock for dma-buf mmapping"

2023-04-02 Thread Dmitry Osipenko
solved by moving the lock down to exporters. Fixes: aa3f99896443 ("udmabuf: Assert held reservation lock for dma-buf mmapping") Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/udmabuf.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf

[Intel-gfx] [PATCH v1 2/7] Revert "dma-buf/heaps: Assert held reservation lock for dma-buf mmapping"

2023-04-02 Thread Dmitry Osipenko
solved by moving the lock down to exporters. Fixes: 27f3733a1049 ("dma-buf/heaps: Assert held reservation lock for dma-buf mmapping") Signed-off-by: Dmitry Osipenko --- drivers/dma-buf/heaps/cma_heap.c| 3 --- drivers/dma-buf/heaps/system_heap.c | 3 --- 2 files changed, 6 deletion

[Intel-gfx] [PATCH v1 1/7] Revert "media: videobuf2: Assert held reservation lock for dma-buf mmapping"

2023-04-02 Thread Dmitry Osipenko
solved by moving the lock down to exporters. Fixes: 3a6ca1810f77 ("media: videobuf2: Assert held reservation lock for dma-buf mmapping") Signed-off-by: Dmitry Osipenko --- drivers/media/common/videobuf2/videobuf2-dma-contig.c | 3 --- drivers/media/common/videobuf2/videobuf2-dma-sg

[Intel-gfx] [PATCH v1 0/7] Move dma-buf mmap() reservation locking down to exporters

2023-04-02 Thread Dmitry Osipenko
] https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_114671v2/shard-snb5/igt@prime_vgem@s...@rcs0.html [2] https://elixir.bootlin.com/linux/v6.3-rc4/source/drivers/gpu/drm/drm_prime.c#L924 Dmitry Osipenko (7): Revert "media: videobuf2: Assert held reservation lock for dma-buf mmapping"

Re: [Intel-gfx] [PATCH v13 01/10] drm/shmem-helper: Switch to reservation lock

2023-04-02 Thread Dmitry Osipenko
On 3/26/23 12:19, Christian König wrote: > Am 25.03.23 um 15:58 schrieb Dmitry Osipenko: >> On 3/15/23 16:46, Dmitry Osipenko wrote: >>> On 3/14/23 05:26, Dmitry Osipenko wrote: >>>> @@ -633,7 +605,10 @@ int drm_gem_shmem_mmap(struct >>>> drm_gem_

Re: [Intel-gfx] [PATCH v13 01/10] drm/shmem-helper: Switch to reservation lock

2023-03-25 Thread Dmitry Osipenko
On 3/15/23 16:46, Dmitry Osipenko wrote: > On 3/14/23 05:26, Dmitry Osipenko wrote: >> @@ -633,7 +605,10 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object >> *shmem, struct vm_area_struct >> return ret; >> } >> >> +dma_resv_lo

Re: [Intel-gfx] [PATCH v13 01/10] drm/shmem-helper: Switch to reservation lock

2023-03-15 Thread Dmitry Osipenko
On 3/14/23 05:26, Dmitry Osipenko wrote: > @@ -633,7 +605,10 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object > *shmem, struct vm_area_struct > return ret; > } > > + dma_resv_lock(shmem->base.resv, NULL); > ret = drm_g

[Intel-gfx] [PATCH v13 10/10] drm/panfrost: Switch to generic memory shrinker

2023-03-13 Thread Dmitry Osipenko
Replace Panfrost's custom memory shrinker with a common drm-shmem memory shrinker. Tested-by: Steven Price # Firefly-RK3288 Reviewed-by: Steven Price Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/panfrost/Makefile | 1 - drivers/gpu/drm/panfrost/panfrost_device.h| 4

[Intel-gfx] [PATCH v13 09/10] drm/virtio: Support memory shrinking

2023-03-13 Thread Dmitry Osipenko
y if guest supports SWAP file or partition. Acked-by: Gerd Hoffmann Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_drv.h| 20 +++- drivers/gpu/drm/virtio/virtgpu_gem.c| 68 drivers/gpu/drm/virtio/virtgpu_ioctl.c | 37 +++ d

[Intel-gfx] [PATCH v13 08/10] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked()

2023-03-13 Thread Dmitry Osipenko
Export drm_gem_shmem_get_pages_sgt_locked() that will be used by virtio-gpu shrinker during GEM swap-in operation done under the held reservation lock. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 3 ++- include/drm/drm_gem_shmem_helper.h | 1 + 2 files

[Intel-gfx] [PATCH v13 07/10] drm/shmem-helper: Remove obsoleted is_iomem test

2023-03-13 Thread Dmitry Osipenko
y: Thomas Zimmermann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 -- 1 file changed, 6 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index a02377a5131b..9e94652a141c 100644 --- a/driver

[Intel-gfx] [PATCH v13 06/10] drm/shmem-helper: Add memory shrinker

2023-03-13 Thread Dmitry Osipenko
. Initialize drm-shmem internals using drmm_gem_shmem_init(drm_device), which will register drm-shmem shrinker 3. Implement madvise IOCTL that will use drm_gem_shmem_madvise() Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 351

[Intel-gfx] [PATCH v13 05/10] drm/shmem-helper: Factor out unpinning part from drm_gem_shmem_purge()

2023-03-13 Thread Dmitry Osipenko
Factor out pages unpinning code from drm_gem_shmem_purge() into new drm_gem_shmem_unpin_pages(). This prepares code for addition of memory shrinker support. The new common function will be used by shrinker for eviction of shmem pages. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm

[Intel-gfx] [PATCH v13 04/10] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin

2023-03-13 Thread Dmitry Osipenko
do that. Switch the vmap/vunmap to use pin/unpin functions in a preparation of addition of the memory shrinker support. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/

[Intel-gfx] [PATCH v13 03/10] drm/shmem-helper: Add pages_pin_count field

2023-03-13 Thread Dmitry Osipenko
-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 7 +++ include/drm/drm_gem_shmem_helper.h | 9 + 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index 4da9c9c39b9a..81d61791f874 100644

[Intel-gfx] [PATCH v13 02/10] drm/shmem-helper: Factor out pages alloc/release from drm_gem_shmem_get/put_pages()

2023-03-13 Thread Dmitry Osipenko
off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 67 +- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index 8fc2a3277486..4da9c9c39b9a 100644 --- a/drivers/gpu/

[Intel-gfx] [PATCH v13 01/10] drm/shmem-helper: Switch to reservation lock

2023-03-13 Thread Dmitry Osipenko
-by: Daniel Vetter Acked-by: Thomas Zimmermann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 217 -- drivers/gpu/drm/lima/lima_gem.c | 8 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 +- .../gpu/drm/panfrost

[Intel-gfx] [PATCH v13 00/10] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers

2023-03-13 Thread Dmitry Osipenko
6c16f303-81df-7ebe-85e9-51bb40a8b...@collabora.com/T/ Dmitry Osipenko (10): drm/shmem-helper: Switch to reservation lock drm/shmem-helper: Factor out pages alloc/release from drm_gem_shmem_get/put_pages() drm/shmem-helper: Add pages_pin_count field drm/shmem-helper: Switch drm_gem_shmem_vmap/vu

Re: [Intel-gfx] [PATCH v12 10/11] drm/virtio: Support memory shrinking

2023-03-07 Thread Dmitry Osipenko
On 3/7/23 21:25, Dmitry Osipenko wrote: >> Not really a problem with this patchset, but having such branches looks >> like a bug in the driver's GEM design. Whatever your GEM object needs or >> does, it should be hidden in the implementation. Why is virtio doing this? > T

Re: [Intel-gfx] [PATCH v12 10/11] drm/virtio: Support memory shrinking

2023-03-07 Thread Dmitry Osipenko
On 3/7/23 13:42, Thomas Zimmermann wrote: > Hi > > Am 05.03.23 um 23:10 schrieb Dmitry Osipenko: > [...] >>     *bo_ptr = bo; >> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c >> b/drivers/gpu/drm/virtio/virtgpu_plane.c >> index 4c09e313bebc..3f21512f

[Intel-gfx] [PATCH v12 09/11] drm/gem: Export drm_gem_pin/unpin()

2023-03-05 Thread Dmitry Osipenko
Export drm_gem_un/pin() functions. They will be used by VirtIO-GPU driver for pinning of an active framebuffer, preventing it from swapping out by memory shrinker. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem.c | 2 ++ drivers/gpu/drm/drm_internal.h | 2 -- include/drm

[Intel-gfx] [PATCH v12 11/11] drm/panfrost: Switch to generic memory shrinker

2023-03-05 Thread Dmitry Osipenko
Replace Panfrost's custom memory shrinker with a common drm-shmem memory shrinker. Tested-by: Steven Price # Firefly-RK3288 Reviewed-by: Steven Price Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/panfrost/Makefile | 1 - drivers/gpu/drm/panfrost/panfrost_device.h| 4

[Intel-gfx] [PATCH v12 08/11] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked()

2023-03-05 Thread Dmitry Osipenko
Export drm_gem_shmem_get_pages_sgt_locked() that will be used by virtio-gpu shrinker during GEM swap-in operation done under the held reservation lock. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 3 ++- include/drm/drm_gem_shmem_helper.h | 1 + 2 files

[Intel-gfx] [PATCH v12 10/11] drm/virtio: Support memory shrinking

2023-03-05 Thread Dmitry Osipenko
y if guest supports SWAP file or partition. Acked-by: Gerd Hoffmann Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_drv.h| 18 +++- drivers/gpu/drm/virtio/virtgpu_gem.c| 52 + drivers/gpu/drm/virtio/virtgpu_ioctl.c | 37 +++ d

[Intel-gfx] [PATCH v12 07/11] drm/shmem-helper: Remove obsoleted is_iomem test

2023-03-05 Thread Dmitry Osipenko
y: Thomas Zimmermann Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 -- 1 file changed, 6 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index e47cc45f39a1..b814352aae33 100644 --- a/driver

[Intel-gfx] [PATCH v12 05/11] drm/shmem-helper: Factor out unpinning part from drm_gem_shmem_purge()

2023-03-05 Thread Dmitry Osipenko
Factor out pages unpinning code from drm_gem_shmem_purge() into new drm_gem_shmem_unpin_pages(). This prepares code for addition of memory shrinker support. The new common function will be used by shrinker for eviction of shmem pages. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm

[Intel-gfx] [PATCH v12 06/11] drm/shmem-helper: Add memory shrinker

2023-03-05 Thread Dmitry Osipenko
. Initialize drm-shmem internals using drmm_gem_shmem_init(drm_device), which will register drm-shmem shrinker 3. Implement madvise IOCTL that will use drm_gem_shmem_madvise() Signed-off-by: Daniel Almeida Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c| 351

[Intel-gfx] [PATCH v12 03/11] drm/shmem-helper: Add pages_pin_count field

2023-03-05 Thread Dmitry Osipenko
-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 7 +++ include/drm/drm_gem_shmem_helper.h | 9 + 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index a62c41336a7f..0c3abb0c2ea2 100644

[Intel-gfx] [PATCH v12 04/11] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin

2023-03-05 Thread Dmitry Osipenko
do that. Switch the vmap/vunmap to use pin/unpin functions in a preparation of addition of the memory shrinker support. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/

  1   2   3   >