* [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-08 20:16 ` Andrey Grodzovsky
0 siblings, 0 replies; 11+ messages in thread
From: Andrey Grodzovsky @ 2020-12-08 20:16 UTC (permalink / raw)
To: dri-devel; +Cc: Alexander.Deucher, ckoenig.leichtzumerken, tzimmermann, amd-gfx
For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
and amdgpu_gem_object_funcs setting into single function called
from both code paths.
Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
from struct drm_driver")
v2: Use use amdgpu_gem_object_create() directly
Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
2 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index e5919ef..e42175e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
struct amdgpu_device *adev = drm_to_adev(dev);
struct amdgpu_bo *bo;
struct amdgpu_bo_param bp;
+ struct drm_gem_object *gobj;
int ret;
memset(&bp, 0, sizeof(bp));
@@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
bp.type = ttm_bo_type_sg;
bp.resv = resv;
dma_resv_lock(resv, NULL);
- ret = amdgpu_bo_create(adev, &bp, &bo);
+ ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
+ AMDGPU_GEM_DOMAIN_CPU,
+ 0, ttm_bo_type_sg, resv, &gobj);
if (ret)
goto error;
+ bo = gem_to_amdgpu_bo(gobj);
bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
if (dma_buf->ops != &amdgpu_dmabuf_ops)
bo->prime_shared_count = 1;
dma_resv_unlock(resv);
- return &bo->tbo.base;
+ return gobj;
error:
dma_resv_unlock(resv);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index c9f94fb..ccf4d80 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
bp.type = type;
bp.resv = resv;
bp.preferred_domain = initial_domain;
-retry:
bp.flags = flags;
bp.domain = initial_domain;
r = amdgpu_bo_create(adev, &bp, &bo);
- if (r) {
- if (r != -ERESTARTSYS) {
- if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
- flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
- goto retry;
- }
-
- if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
- initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
- goto retry;
- }
- DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
- size, initial_domain, alignment, r);
- }
+ if (r)
return r;
- }
+
*obj = &bo->tbo.base;
(*obj)->funcs = &amdgpu_gem_object_funcs;
@@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
uint64_t size = args->in.bo_size;
struct dma_resv *resv = NULL;
struct drm_gem_object *gobj;
- uint32_t handle;
+ uint32_t handle, initial_domain;
int r;
/* reject invalid gem flags */
@@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
resv = vm->root.base.bo->tbo.base.resv;
}
+retry:
+ initial_domain = (u32)(0xffffffff & args->in.domains);
r = amdgpu_gem_object_create(adev, size, args->in.alignment,
- (u32)(0xffffffff & args->in.domains),
+ initial_domain,
flags, ttm_bo_type_device, resv, &gobj);
+ if (r) {
+ if (r != -ERESTARTSYS) {
+ if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
+ flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+ goto retry;
+ }
+
+ if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
+ initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
+ goto retry;
+ }
+ DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
+ size, initial_domain, args->in.alignment, r);
+ }
+ return r;
+ }
+
if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
if (!r) {
struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-08 20:16 ` Andrey Grodzovsky
0 siblings, 0 replies; 11+ messages in thread
From: Andrey Grodzovsky @ 2020-12-08 20:16 UTC (permalink / raw)
To: dri-devel
Cc: Alexander.Deucher, ckoenig.leichtzumerken, tzimmermann, amd-gfx,
Andrey Grodzovsky
For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
and amdgpu_gem_object_funcs setting into single function called
from both code paths.
Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
from struct drm_driver")
v2: Use use amdgpu_gem_object_create() directly
Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
2 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index e5919ef..e42175e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
struct amdgpu_device *adev = drm_to_adev(dev);
struct amdgpu_bo *bo;
struct amdgpu_bo_param bp;
+ struct drm_gem_object *gobj;
int ret;
memset(&bp, 0, sizeof(bp));
@@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
bp.type = ttm_bo_type_sg;
bp.resv = resv;
dma_resv_lock(resv, NULL);
- ret = amdgpu_bo_create(adev, &bp, &bo);
+ ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
+ AMDGPU_GEM_DOMAIN_CPU,
+ 0, ttm_bo_type_sg, resv, &gobj);
if (ret)
goto error;
+ bo = gem_to_amdgpu_bo(gobj);
bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
if (dma_buf->ops != &amdgpu_dmabuf_ops)
bo->prime_shared_count = 1;
dma_resv_unlock(resv);
- return &bo->tbo.base;
+ return gobj;
error:
dma_resv_unlock(resv);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index c9f94fb..ccf4d80 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
bp.type = type;
bp.resv = resv;
bp.preferred_domain = initial_domain;
-retry:
bp.flags = flags;
bp.domain = initial_domain;
r = amdgpu_bo_create(adev, &bp, &bo);
- if (r) {
- if (r != -ERESTARTSYS) {
- if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
- flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
- goto retry;
- }
-
- if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
- initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
- goto retry;
- }
- DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
- size, initial_domain, alignment, r);
- }
+ if (r)
return r;
- }
+
*obj = &bo->tbo.base;
(*obj)->funcs = &amdgpu_gem_object_funcs;
@@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
uint64_t size = args->in.bo_size;
struct dma_resv *resv = NULL;
struct drm_gem_object *gobj;
- uint32_t handle;
+ uint32_t handle, initial_domain;
int r;
/* reject invalid gem flags */
@@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
resv = vm->root.base.bo->tbo.base.resv;
}
+retry:
+ initial_domain = (u32)(0xffffffff & args->in.domains);
r = amdgpu_gem_object_create(adev, size, args->in.alignment,
- (u32)(0xffffffff & args->in.domains),
+ initial_domain,
flags, ttm_bo_type_device, resv, &gobj);
+ if (r) {
+ if (r != -ERESTARTSYS) {
+ if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
+ flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+ goto retry;
+ }
+
+ if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
+ initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
+ goto retry;
+ }
+ DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
+ size, initial_domain, args->in.alignment, r);
+ }
+ return r;
+ }
+
if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
if (!r) {
struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
2020-12-08 20:16 ` Andrey Grodzovsky
@ 2020-12-08 21:22 ` Alex Deucher
-1 siblings, 0 replies; 11+ messages in thread
From: Alex Deucher @ 2020-12-08 21:22 UTC (permalink / raw)
To: Andrey Grodzovsky
Cc: Deucher, Alexander, Christian König, amd-gfx list,
Thomas Zimmermann, Maling list - DRI developers
On Tue, Dec 8, 2020 at 3:16 PM Andrey Grodzovsky
<andrey.grodzovsky@amd.com> wrote:
>
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-08 21:22 ` Alex Deucher
0 siblings, 0 replies; 11+ messages in thread
From: Alex Deucher @ 2020-12-08 21:22 UTC (permalink / raw)
To: Andrey Grodzovsky
Cc: Deucher, Alexander, Christian König, amd-gfx list,
Thomas Zimmermann, Maling list - DRI developers
On Tue, Dec 8, 2020 at 3:16 PM Andrey Grodzovsky
<andrey.grodzovsky@amd.com> wrote:
>
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
2020-12-08 20:16 ` Andrey Grodzovsky
@ 2020-12-09 4:38 ` Alex Deucher
-1 siblings, 0 replies; 11+ messages in thread
From: Alex Deucher @ 2020-12-09 4:38 UTC (permalink / raw)
To: Andrey Grodzovsky
Cc: Deucher, Alexander, Christian König, amd-gfx list,
Thomas Zimmermann, Maling list - DRI developers
On Tue, Dec 8, 2020 at 3:16 PM Andrey Grodzovsky
<andrey.grodzovsky@amd.com> wrote:
>
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
Just noticed this, size and args->in.alignment are u64, so these
should be %llu. With that fixed, my RB still stands.
Alex
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-09 4:38 ` Alex Deucher
0 siblings, 0 replies; 11+ messages in thread
From: Alex Deucher @ 2020-12-09 4:38 UTC (permalink / raw)
To: Andrey Grodzovsky
Cc: Deucher, Alexander, Christian König, amd-gfx list,
Thomas Zimmermann, Maling list - DRI developers
On Tue, Dec 8, 2020 at 3:16 PM Andrey Grodzovsky
<andrey.grodzovsky@amd.com> wrote:
>
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
Just noticed this, size and args->in.alignment are u64, so these
should be %llu. With that fixed, my RB still stands.
Alex
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
2020-12-08 20:16 ` Andrey Grodzovsky
(?)
@ 2020-12-09 5:17 ` kernel test robot
-1 siblings, 0 replies; 11+ messages in thread
From: kernel test robot @ 2020-12-09 5:17 UTC (permalink / raw)
To: Andrey Grodzovsky, dri-devel
Cc: Alexander.Deucher, ckoenig.leichtzumerken, kbuild-all, amd-gfx,
tzimmermann
[-- Attachment #1: Type: text/plain, Size: 10778 bytes --]
Hi Andrey,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next drm-tip/drm-tip linus/master v5.10-rc7 next-20201208]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
base: https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
config: xtensa-randconfig-r004-20201208 (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/a7b4d98b3660452b6787b39dc59980606b462ff3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
git checkout a7b4d98b3660452b6787b39dc59980606b462ff3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c: In function 'amdgpu_gem_create_ioctl':
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~
| |
| uint64_t {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:48: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~~^
| |
| long int
| %lld
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%u' expects argument of type 'unsigned int', but argument 5 has type '__u64' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~~~~~~~~~~~~~~~
| |
| __u64 {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:56: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~^
| |
| unsigned int
| %llu
In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
At top level:
drivers/gpu/drm/amd/amdgpu/amdgpu.h:198:19: warning: 'no_system_mem_limit' defined but not used [-Wunused-const-variable=]
198 | static const bool no_system_mem_limit;
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:197:19: warning: 'debug_evictions' defined but not used [-Wunused-const-variable=]
197 | static const bool debug_evictions; /* = false */
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:196:18: warning: 'sched_policy' defined but not used [-Wunused-const-variable=]
196 | static const int sched_policy = KFD_SCHED_POLICY_HWS;
| ^~~~~~~~~~~~
In file included from drivers/gpu/drm/amd/amdgpu/../display/dc/dc_types.h:33,
from drivers/gpu/drm/amd/amdgpu/../display/dc/dm_services_types.h:30,
from drivers/gpu/drm/amd/amdgpu/../include/dm_pp_interface.h:26,
from drivers/gpu/drm/amd/amdgpu/amdgpu.h:67,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:76:32: warning: 'dc_fixpt_ln2_div_2' defined but not used [-Wunused-const-variable=]
76 | static const struct fixed31_32 dc_fixpt_ln2_div_2 = { 1488522236LL };
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:75:32: warning: 'dc_fixpt_ln2' defined but not used [-Wunused-const-variable=]
75 | static const struct fixed31_32 dc_fixpt_ln2 = { 2977044471LL };
| ^~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:74:32: warning: 'dc_fixpt_e' defined but not used [-Wunused-const-variable=]
74 | static const struct fixed31_32 dc_fixpt_e = { 11674931555LL };
| ^~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:73:32: warning: 'dc_fixpt_two_pi' defined but not used [-Wunused-const-variable=]
73 | static const struct fixed31_32 dc_fixpt_two_pi = { 26986075409LL };
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:72:32: warning: 'dc_fixpt_pi' defined but not used [-Wunused-const-variable=]
72 | static const struct fixed31_32 dc_fixpt_pi = { 13493037705LL };
| ^~~~~~~~~~~
vim +288 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
213
214 /*
215 * GEM ioctls.
216 */
217 int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
218 struct drm_file *filp)
219 {
220 struct amdgpu_device *adev = drm_to_adev(dev);
221 struct amdgpu_fpriv *fpriv = filp->driver_priv;
222 struct amdgpu_vm *vm = &fpriv->vm;
223 union drm_amdgpu_gem_create *args = data;
224 uint64_t flags = args->in.domain_flags;
225 uint64_t size = args->in.bo_size;
226 struct dma_resv *resv = NULL;
227 struct drm_gem_object *gobj;
228 uint32_t handle, initial_domain;
229 int r;
230
231 /* reject invalid gem flags */
232 if (flags & ~(AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
233 AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
234 AMDGPU_GEM_CREATE_CPU_GTT_USWC |
235 AMDGPU_GEM_CREATE_VRAM_CLEARED |
236 AMDGPU_GEM_CREATE_VM_ALWAYS_VALID |
237 AMDGPU_GEM_CREATE_EXPLICIT_SYNC |
238 AMDGPU_GEM_CREATE_ENCRYPTED))
239
240 return -EINVAL;
241
242 /* reject invalid gem domains */
243 if (args->in.domains & ~AMDGPU_GEM_DOMAIN_MASK)
244 return -EINVAL;
245
246 if (!amdgpu_is_tmz(adev) && (flags & AMDGPU_GEM_CREATE_ENCRYPTED)) {
247 DRM_NOTE_ONCE("Cannot allocate secure buffer since TMZ is disabled\n");
248 return -EINVAL;
249 }
250
251 /* create a gem object to contain this object in */
252 if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
253 AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) {
254 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
255 /* if gds bo is created from user space, it must be
256 * passed to bo list
257 */
258 DRM_ERROR("GDS bo cannot be per-vm-bo\n");
259 return -EINVAL;
260 }
261 flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
262 }
263
264 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
265 r = amdgpu_bo_reserve(vm->root.base.bo, false);
266 if (r)
267 return r;
268
269 resv = vm->root.base.bo->tbo.base.resv;
270 }
271
272 retry:
273 initial_domain = (u32)(0xffffffff & args->in.domains);
274 r = amdgpu_gem_object_create(adev, size, args->in.alignment,
275 initial_domain,
276 flags, ttm_bo_type_device, resv, &gobj);
277 if (r) {
278 if (r != -ERESTARTSYS) {
279 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
280 flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
281 goto retry;
282 }
283
284 if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
285 initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
286 goto retry;
287 }
> 288 DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
289 size, initial_domain, args->in.alignment, r);
290 }
291 return r;
292 }
293
294 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
295 if (!r) {
296 struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
297
298 abo->parent = amdgpu_bo_ref(vm->root.base.bo);
299 }
300 amdgpu_bo_unreserve(vm->root.base.bo);
301 }
302 if (r)
303 return r;
304
305 r = drm_gem_handle_create(filp, gobj, &handle);
306 /* drop reference from allocate - handle holds it now */
307 drm_gem_object_put(gobj);
308 if (r)
309 return r;
310
311 memset(args, 0, sizeof(*args));
312 args->out.handle = handle;
313 return 0;
314 }
315
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30434 bytes --]
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-09 5:17 ` kernel test robot
0 siblings, 0 replies; 11+ messages in thread
From: kernel test robot @ 2020-12-09 5:17 UTC (permalink / raw)
To: Andrey Grodzovsky, dri-devel
Cc: Alexander.Deucher, ckoenig.leichtzumerken, kbuild-all, amd-gfx,
tzimmermann
[-- Attachment #1: Type: text/plain, Size: 10778 bytes --]
Hi Andrey,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next drm-tip/drm-tip linus/master v5.10-rc7 next-20201208]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
base: https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
config: xtensa-randconfig-r004-20201208 (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/a7b4d98b3660452b6787b39dc59980606b462ff3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
git checkout a7b4d98b3660452b6787b39dc59980606b462ff3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c: In function 'amdgpu_gem_create_ioctl':
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~
| |
| uint64_t {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:48: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~~^
| |
| long int
| %lld
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%u' expects argument of type 'unsigned int', but argument 5 has type '__u64' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~~~~~~~~~~~~~~~
| |
| __u64 {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:56: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~^
| |
| unsigned int
| %llu
In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
At top level:
drivers/gpu/drm/amd/amdgpu/amdgpu.h:198:19: warning: 'no_system_mem_limit' defined but not used [-Wunused-const-variable=]
198 | static const bool no_system_mem_limit;
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:197:19: warning: 'debug_evictions' defined but not used [-Wunused-const-variable=]
197 | static const bool debug_evictions; /* = false */
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:196:18: warning: 'sched_policy' defined but not used [-Wunused-const-variable=]
196 | static const int sched_policy = KFD_SCHED_POLICY_HWS;
| ^~~~~~~~~~~~
In file included from drivers/gpu/drm/amd/amdgpu/../display/dc/dc_types.h:33,
from drivers/gpu/drm/amd/amdgpu/../display/dc/dm_services_types.h:30,
from drivers/gpu/drm/amd/amdgpu/../include/dm_pp_interface.h:26,
from drivers/gpu/drm/amd/amdgpu/amdgpu.h:67,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:76:32: warning: 'dc_fixpt_ln2_div_2' defined but not used [-Wunused-const-variable=]
76 | static const struct fixed31_32 dc_fixpt_ln2_div_2 = { 1488522236LL };
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:75:32: warning: 'dc_fixpt_ln2' defined but not used [-Wunused-const-variable=]
75 | static const struct fixed31_32 dc_fixpt_ln2 = { 2977044471LL };
| ^~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:74:32: warning: 'dc_fixpt_e' defined but not used [-Wunused-const-variable=]
74 | static const struct fixed31_32 dc_fixpt_e = { 11674931555LL };
| ^~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:73:32: warning: 'dc_fixpt_two_pi' defined but not used [-Wunused-const-variable=]
73 | static const struct fixed31_32 dc_fixpt_two_pi = { 26986075409LL };
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:72:32: warning: 'dc_fixpt_pi' defined but not used [-Wunused-const-variable=]
72 | static const struct fixed31_32 dc_fixpt_pi = { 13493037705LL };
| ^~~~~~~~~~~
vim +288 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
213
214 /*
215 * GEM ioctls.
216 */
217 int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
218 struct drm_file *filp)
219 {
220 struct amdgpu_device *adev = drm_to_adev(dev);
221 struct amdgpu_fpriv *fpriv = filp->driver_priv;
222 struct amdgpu_vm *vm = &fpriv->vm;
223 union drm_amdgpu_gem_create *args = data;
224 uint64_t flags = args->in.domain_flags;
225 uint64_t size = args->in.bo_size;
226 struct dma_resv *resv = NULL;
227 struct drm_gem_object *gobj;
228 uint32_t handle, initial_domain;
229 int r;
230
231 /* reject invalid gem flags */
232 if (flags & ~(AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
233 AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
234 AMDGPU_GEM_CREATE_CPU_GTT_USWC |
235 AMDGPU_GEM_CREATE_VRAM_CLEARED |
236 AMDGPU_GEM_CREATE_VM_ALWAYS_VALID |
237 AMDGPU_GEM_CREATE_EXPLICIT_SYNC |
238 AMDGPU_GEM_CREATE_ENCRYPTED))
239
240 return -EINVAL;
241
242 /* reject invalid gem domains */
243 if (args->in.domains & ~AMDGPU_GEM_DOMAIN_MASK)
244 return -EINVAL;
245
246 if (!amdgpu_is_tmz(adev) && (flags & AMDGPU_GEM_CREATE_ENCRYPTED)) {
247 DRM_NOTE_ONCE("Cannot allocate secure buffer since TMZ is disabled\n");
248 return -EINVAL;
249 }
250
251 /* create a gem object to contain this object in */
252 if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
253 AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) {
254 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
255 /* if gds bo is created from user space, it must be
256 * passed to bo list
257 */
258 DRM_ERROR("GDS bo cannot be per-vm-bo\n");
259 return -EINVAL;
260 }
261 flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
262 }
263
264 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
265 r = amdgpu_bo_reserve(vm->root.base.bo, false);
266 if (r)
267 return r;
268
269 resv = vm->root.base.bo->tbo.base.resv;
270 }
271
272 retry:
273 initial_domain = (u32)(0xffffffff & args->in.domains);
274 r = amdgpu_gem_object_create(adev, size, args->in.alignment,
275 initial_domain,
276 flags, ttm_bo_type_device, resv, &gobj);
277 if (r) {
278 if (r != -ERESTARTSYS) {
279 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
280 flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
281 goto retry;
282 }
283
284 if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
285 initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
286 goto retry;
287 }
> 288 DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
289 size, initial_domain, args->in.alignment, r);
290 }
291 return r;
292 }
293
294 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
295 if (!r) {
296 struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
297
298 abo->parent = amdgpu_bo_ref(vm->root.base.bo);
299 }
300 amdgpu_bo_unreserve(vm->root.base.bo);
301 }
302 if (r)
303 return r;
304
305 r = drm_gem_handle_create(filp, gobj, &handle);
306 /* drop reference from allocate - handle holds it now */
307 drm_gem_object_put(gobj);
308 if (r)
309 return r;
310
311 memset(args, 0, sizeof(*args));
312 args->out.handle = handle;
313 return 0;
314 }
315
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30434 bytes --]
[-- Attachment #3: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-09 5:17 ` kernel test robot
0 siblings, 0 replies; 11+ messages in thread
From: kernel test robot @ 2020-12-09 5:17 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 10994 bytes --]
Hi Andrey,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next drm-tip/drm-tip linus/master v5.10-rc7 next-20201208]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
base: https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
config: xtensa-randconfig-r004-20201208 (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/a7b4d98b3660452b6787b39dc59980606b462ff3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Andrey-Grodzovsky/drm-amdgpu-Initialise-drm_gem_object_funcs-for-imported-BOs/20201209-041733
git checkout a7b4d98b3660452b6787b39dc59980606b462ff3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c: In function 'amdgpu_gem_create_ioctl':
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~
| |
| uint64_t {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:48: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~~^
| |
| long int
| %lld
In file included from include/drm/drm_mm.h:49,
from include/drm/drm_vma_manager.h:26,
from include/drm/drm_gem.h:40,
from include/drm/drm_gem_ttm_helper.h:8,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:36:
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:14: warning: format '%u' expects argument of type 'unsigned int', but argument 5 has type '__u64' {aka 'long long unsigned int'} [-Wformat=]
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 | size, initial_domain, args->in.alignment, r);
| ~~~~~~~~~~~~~~~~~~
| |
| __u64 {aka long long unsigned int}
include/drm/drm_print.h:504:25: note: in definition of macro 'DRM_DEBUG'
504 | __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
| ^~~
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:288:56: note: format string is defined here
288 | DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
| ~^
| |
| unsigned int
| %llu
In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
At top level:
drivers/gpu/drm/amd/amdgpu/amdgpu.h:198:19: warning: 'no_system_mem_limit' defined but not used [-Wunused-const-variable=]
198 | static const bool no_system_mem_limit;
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:197:19: warning: 'debug_evictions' defined but not used [-Wunused-const-variable=]
197 | static const bool debug_evictions; /* = false */
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/amdgpu.h:196:18: warning: 'sched_policy' defined but not used [-Wunused-const-variable=]
196 | static const int sched_policy = KFD_SCHED_POLICY_HWS;
| ^~~~~~~~~~~~
In file included from drivers/gpu/drm/amd/amdgpu/../display/dc/dc_types.h:33,
from drivers/gpu/drm/amd/amdgpu/../display/dc/dm_services_types.h:30,
from drivers/gpu/drm/amd/amdgpu/../include/dm_pp_interface.h:26,
from drivers/gpu/drm/amd/amdgpu/amdgpu.h:67,
from drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:38:
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:76:32: warning: 'dc_fixpt_ln2_div_2' defined but not used [-Wunused-const-variable=]
76 | static const struct fixed31_32 dc_fixpt_ln2_div_2 = { 1488522236LL };
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:75:32: warning: 'dc_fixpt_ln2' defined but not used [-Wunused-const-variable=]
75 | static const struct fixed31_32 dc_fixpt_ln2 = { 2977044471LL };
| ^~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:74:32: warning: 'dc_fixpt_e' defined but not used [-Wunused-const-variable=]
74 | static const struct fixed31_32 dc_fixpt_e = { 11674931555LL };
| ^~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:73:32: warning: 'dc_fixpt_two_pi' defined but not used [-Wunused-const-variable=]
73 | static const struct fixed31_32 dc_fixpt_two_pi = { 26986075409LL };
| ^~~~~~~~~~~~~~~
drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:72:32: warning: 'dc_fixpt_pi' defined but not used [-Wunused-const-variable=]
72 | static const struct fixed31_32 dc_fixpt_pi = { 13493037705LL };
| ^~~~~~~~~~~
vim +288 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
213
214 /*
215 * GEM ioctls.
216 */
217 int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
218 struct drm_file *filp)
219 {
220 struct amdgpu_device *adev = drm_to_adev(dev);
221 struct amdgpu_fpriv *fpriv = filp->driver_priv;
222 struct amdgpu_vm *vm = &fpriv->vm;
223 union drm_amdgpu_gem_create *args = data;
224 uint64_t flags = args->in.domain_flags;
225 uint64_t size = args->in.bo_size;
226 struct dma_resv *resv = NULL;
227 struct drm_gem_object *gobj;
228 uint32_t handle, initial_domain;
229 int r;
230
231 /* reject invalid gem flags */
232 if (flags & ~(AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
233 AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
234 AMDGPU_GEM_CREATE_CPU_GTT_USWC |
235 AMDGPU_GEM_CREATE_VRAM_CLEARED |
236 AMDGPU_GEM_CREATE_VM_ALWAYS_VALID |
237 AMDGPU_GEM_CREATE_EXPLICIT_SYNC |
238 AMDGPU_GEM_CREATE_ENCRYPTED))
239
240 return -EINVAL;
241
242 /* reject invalid gem domains */
243 if (args->in.domains & ~AMDGPU_GEM_DOMAIN_MASK)
244 return -EINVAL;
245
246 if (!amdgpu_is_tmz(adev) && (flags & AMDGPU_GEM_CREATE_ENCRYPTED)) {
247 DRM_NOTE_ONCE("Cannot allocate secure buffer since TMZ is disabled\n");
248 return -EINVAL;
249 }
250
251 /* create a gem object to contain this object in */
252 if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
253 AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) {
254 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
255 /* if gds bo is created from user space, it must be
256 * passed to bo list
257 */
258 DRM_ERROR("GDS bo cannot be per-vm-bo\n");
259 return -EINVAL;
260 }
261 flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
262 }
263
264 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
265 r = amdgpu_bo_reserve(vm->root.base.bo, false);
266 if (r)
267 return r;
268
269 resv = vm->root.base.bo->tbo.base.resv;
270 }
271
272 retry:
273 initial_domain = (u32)(0xffffffff & args->in.domains);
274 r = amdgpu_gem_object_create(adev, size, args->in.alignment,
275 initial_domain,
276 flags, ttm_bo_type_device, resv, &gobj);
277 if (r) {
278 if (r != -ERESTARTSYS) {
279 if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
280 flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
281 goto retry;
282 }
283
284 if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
285 initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
286 goto retry;
287 }
> 288 DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
289 size, initial_domain, args->in.alignment, r);
290 }
291 return r;
292 }
293
294 if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
295 if (!r) {
296 struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
297
298 abo->parent = amdgpu_bo_ref(vm->root.base.bo);
299 }
300 amdgpu_bo_unreserve(vm->root.base.bo);
301 }
302 if (r)
303 return r;
304
305 r = drm_gem_handle_create(filp, gobj, &handle);
306 /* drop reference from allocate - handle holds it now */
307 drm_gem_object_put(gobj);
308 if (r)
309 return r;
310
311 memset(args, 0, sizeof(*args));
312 args->out.handle = handle;
313 return 0;
314 }
315
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30434 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
2020-12-08 20:16 ` Andrey Grodzovsky
@ 2020-12-09 10:12 ` Christian König
-1 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2020-12-09 10:12 UTC (permalink / raw)
To: Andrey Grodzovsky, dri-devel; +Cc: Alexander.Deucher, tzimmermann, amd-gfx
Am 08.12.20 um 21:16 schrieb Andrey Grodzovsky:
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs
@ 2020-12-09 10:12 ` Christian König
0 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2020-12-09 10:12 UTC (permalink / raw)
To: Andrey Grodzovsky, dri-devel; +Cc: Alexander.Deucher, tzimmermann, amd-gfx
Am 08.12.20 um 21:16 schrieb Andrey Grodzovsky:
> For BOs imported from outside of amdgpu, setting of amdgpu_gem_object_funcs
> was missing in amdgpu_dma_buf_create_obj. Fix by refactoring BO creation
> and amdgpu_gem_object_funcs setting into single function called
> from both code paths.
>
> Fixes: d693def4fd1c ("drm: Remove obsolete GEM and PRIME callbacks
> from struct drm_driver")
>
> v2: Use use amdgpu_gem_object_create() directly
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 ++++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 ++++++++++++++++-------------
> 2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index e5919ef..e42175e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -424,6 +424,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> struct amdgpu_device *adev = drm_to_adev(dev);
> struct amdgpu_bo *bo;
> struct amdgpu_bo_param bp;
> + struct drm_gem_object *gobj;
> int ret;
>
> memset(&bp, 0, sizeof(bp));
> @@ -434,17 +435,20 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
> bp.type = ttm_bo_type_sg;
> bp.resv = resv;
> dma_resv_lock(resv, NULL);
> - ret = amdgpu_bo_create(adev, &bp, &bo);
> + ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_CPU,
> + 0, ttm_bo_type_sg, resv, &gobj);
> if (ret)
> goto error;
>
> + bo = gem_to_amdgpu_bo(gobj);
> bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
> bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
> if (dma_buf->ops != &amdgpu_dmabuf_ops)
> bo->prime_shared_count = 1;
>
> dma_resv_unlock(resv);
> - return &bo->tbo.base;
> + return gobj;
>
> error:
> dma_resv_unlock(resv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index c9f94fb..ccf4d80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> bp.type = type;
> bp.resv = resv;
> bp.preferred_domain = initial_domain;
> -retry:
> bp.flags = flags;
> bp.domain = initial_domain;
> r = amdgpu_bo_create(adev, &bp, &bo);
> - if (r) {
> - if (r != -ERESTARTSYS) {
> - if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> - flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> - goto retry;
> - }
> -
> - if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> - initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> - goto retry;
> - }
> - DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> - size, initial_domain, alignment, r);
> - }
> + if (r)
> return r;
> - }
> +
> *obj = &bo->tbo.base;
> (*obj)->funcs = &amdgpu_gem_object_funcs;
>
> @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> uint64_t size = args->in.bo_size;
> struct dma_resv *resv = NULL;
> struct drm_gem_object *gobj;
> - uint32_t handle;
> + uint32_t handle, initial_domain;
> int r;
>
> /* reject invalid gem flags */
> @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> resv = vm->root.base.bo->tbo.base.resv;
> }
>
> +retry:
> + initial_domain = (u32)(0xffffffff & args->in.domains);
> r = amdgpu_gem_object_create(adev, size, args->in.alignment,
> - (u32)(0xffffffff & args->in.domains),
> + initial_domain,
> flags, ttm_bo_type_device, resv, &gobj);
> + if (r) {
> + if (r != -ERESTARTSYS) {
> + if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> + flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> + goto retry;
> + }
> +
> + if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) {
> + initial_domain |= AMDGPU_GEM_DOMAIN_GTT;
> + goto retry;
> + }
> + DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> + size, initial_domain, args->in.alignment, r);
> + }
> + return r;
> + }
> +
> if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
> if (!r) {
> struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-12-09 10:13 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-08 20:16 [PATCH v2] [PATCH] drm/amdgpu: Initialise drm_gem_object_funcs for imported BOs Andrey Grodzovsky
2020-12-08 20:16 ` Andrey Grodzovsky
2020-12-08 21:22 ` Alex Deucher
2020-12-08 21:22 ` Alex Deucher
2020-12-09 4:38 ` Alex Deucher
2020-12-09 4:38 ` Alex Deucher
2020-12-09 5:17 ` kernel test robot
2020-12-09 5:17 ` kernel test robot
2020-12-09 5:17 ` kernel test robot
2020-12-09 10:12 ` Christian König
2020-12-09 10:12 ` Christian König
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.