2021-09-14 06:25:06

by Bibo Mao

[permalink] [raw]
Subject: [PATCH 1/2] drm/qxl: User page size macro for qxl release bo

Some architectures have different default page size, this patch
replaces hardcoded 4096 with PAGE_SIZE macro, since cmd bo size
is page aligned.

Signed-off-by: bibo mao <[email protected]>
---
drivers/gpu/drm/qxl/qxl_release.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index b19f2f00b215..469979cd0341 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -36,10 +36,10 @@
/* manage releaseables */
/* stack them 16 high for now -drawable object is 191 */
#define RELEASE_SIZE 256
-#define RELEASES_PER_BO (4096 / RELEASE_SIZE)
+#define RELEASES_PER_BO (PAGE_SIZE / RELEASE_SIZE)
/* put an alloc/dealloc surface cmd into one bo and round up to 128 */
#define SURFACE_RELEASE_SIZE 128
-#define SURFACE_RELEASES_PER_BO (4096 / SURFACE_RELEASE_SIZE)
+#define SURFACE_RELEASES_PER_BO (PAGE_SIZE / SURFACE_RELEASE_SIZE)

static const int release_size_per_bo[] = { RELEASE_SIZE, SURFACE_RELEASE_SIZE, RELEASE_SIZE };
static const int releases_per_bo[] = { RELEASES_PER_BO, SURFACE_RELEASES_PER_BO, RELEASES_PER_BO };
--
2.27.0


2021-09-14 06:25:45

by Bibo Mao

[permalink] [raw]
Subject: [PATCH 2/2] drm/qxl: Add qxl dma fence release function

Add qxl dma fence release function, previously default dma fence
release function is used, and fence pointer is used to free
the memory. With this patch, actual qxl release pointer is used
to free memory, so that dma fence can put at any place of
struct qxl_release.

Signed-off-by: bibo mao <[email protected]>
---
drivers/gpu/drm/qxl/qxl_release.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index 469979cd0341..a9724857c526 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -74,10 +74,25 @@ static long qxl_fence_wait(struct dma_fence *fence, bool intr,
return end - cur;
}

+static void qxl_fence_release_rcu(struct rcu_head *rcu)
+{
+ struct dma_fence *fence = container_of(rcu, struct dma_fence, rcu);
+ struct qxl_release *release;
+
+ release = container_of(fence, struct qxl_release, base);
+ kfree(release);
+}
+
+static void qxl_fence_release(struct dma_fence *fence)
+{
+ call_rcu(&fence->rcu, qxl_fence_release_rcu);
+}
+
static const struct dma_fence_ops qxl_fence_ops = {
.get_driver_name = qxl_get_driver_name,
.get_timeline_name = qxl_get_timeline_name,
.wait = qxl_fence_wait,
+ .release = qxl_fence_release,
};

static int
--
2.27.0

2021-09-15 06:36:15

by Gerd Hoffmann

[permalink] [raw]
Subject: Re: [PATCH 1/2] drm/qxl: User page size macro for qxl release bo

On Tue, Sep 14, 2021 at 02:23:51AM -0400, bibo mao wrote:
> Some architectures have different default page size, this patch
> replaces hardcoded 4096 with PAGE_SIZE macro, since cmd bo size
> is page aligned.
>
> Signed-off-by: bibo mao <[email protected]>

Pushed to drm-misc-next.

thanks,
Gerd

2021-09-15 06:41:17

by Gerd Hoffmann

[permalink] [raw]
Subject: Re: [PATCH 2/2] drm/qxl: Add qxl dma fence release function

On Tue, Sep 14, 2021 at 02:23:52AM -0400, bibo mao wrote:
> Add qxl dma fence release function, previously default dma fence
> release function is used, and fence pointer is used to free
> the memory. With this patch, actual qxl release pointer is used
> to free memory, so that dma fence can put at any place of
> struct qxl_release.

Why? Is there a problem with struct dma_fence being the first
element of struct qxl_release?

take care,
Gerd

2021-09-17 10:09:11

by Bibo Mao

[permalink] [raw]
Subject: Re: [PATCH 2/2] drm/qxl: Add qxl dma fence release function



On 09/15/2021 02:38 PM, Gerd Hoffmann wrote:
> On Tue, Sep 14, 2021 at 02:23:52AM -0400, bibo mao wrote:
>> Add qxl dma fence release function, previously default dma fence
>> release function is used, and fence pointer is used to free
>> the memory. With this patch, actual qxl release pointer is used
>> to free memory, so that dma fence can put at any place of
>> struct qxl_release.
>
> Why? Is there a problem with struct dma_fence being the first
> element of struct qxl_release?
Yes, there is no problem put it in the first element of struct qxl_release. This patch has no actual use,it is only more flexible. And you can discard this patch if other graphics drivers do the same thing like this.

regards
bibo,mao
>
> take care,
> Gerd
>