* [PATCH v3 18/28] drm/qxl: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-11 12:33 UTC (permalink / raw)
Cc: David Airlie, linux-kernel, dri-devel, virtualization,
Cihangir Akturk, daniel, Dave Airlie
In-Reply-To: <1502454794-28558-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/qxl/qxl_display.c | 4 ++--
drivers/gpu/drm/qxl/qxl_dumb.c | 2 +-
drivers/gpu/drm/qxl/qxl_fb.c | 6 +++---
drivers/gpu/drm/qxl/qxl_gem.c | 2 +-
drivers/gpu/drm/qxl/qxl_ioctl.c | 4 ++--
drivers/gpu/drm/qxl/qxl_object.c | 6 +++---
6 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 14c5613..a54a766 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -306,7 +306,7 @@ void qxl_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct qxl_framebuffer *qxl_fb = to_qxl_framebuffer(fb);
- drm_gem_object_unreference_unlocked(qxl_fb->obj);
+ drm_gem_object_put_unlocked(qxl_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(qxl_fb);
}
@@ -1106,7 +1106,7 @@ qxl_user_framebuffer_create(struct drm_device *dev,
ret = qxl_framebuffer_init(dev, qxl_fb, mode_cmd, obj, &qxl_fb_funcs);
if (ret) {
kfree(qxl_fb);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return NULL;
}
diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
index 5e65d5d..a0c9e73 100644
--- a/drivers/gpu/drm/qxl/qxl_dumb.c
+++ b/drivers/gpu/drm/qxl/qxl_dumb.c
@@ -81,6 +81,6 @@ int qxl_mode_dumb_mmap(struct drm_file *file_priv,
return -ENOENT;
qobj = gem_to_qxl_bo(gobj);
*offset_p = qxl_bo_mmap_offset(qobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
index 844c4a3..52903ef 100644
--- a/drivers/gpu/drm/qxl/qxl_fb.c
+++ b/drivers/gpu/drm/qxl/qxl_fb.c
@@ -95,7 +95,7 @@ static void qxlfb_destroy_pinned_object(struct drm_gem_object *gobj)
qxl_bo_kunmap(qbo);
qxl_bo_unpin(qbo);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
}
int qxl_get_handle_for_primary_fb(struct qxl_device *qdev,
@@ -319,11 +319,11 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
qxl_bo_unpin(qbo);
}
if (fb && ret) {
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
diff --git a/drivers/gpu/drm/qxl/qxl_gem.c b/drivers/gpu/drm/qxl/qxl_gem.c
index 85f5467..f5c1e78 100644
--- a/drivers/gpu/drm/qxl/qxl_gem.c
+++ b/drivers/gpu/drm/qxl/qxl_gem.c
@@ -98,7 +98,7 @@ int qxl_gem_object_create_with_handle(struct qxl_device *qdev,
return r;
/* drop reference from allocate - handle holds it now */
*qobj = gem_to_qxl_bo(gobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
index 31effed..7b141db 100644
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
@@ -121,7 +121,7 @@ static int qxlhw_handle_to_bo(struct drm_file *file_priv, uint64_t handle,
qobj = gem_to_qxl_bo(gobj);
ret = qxl_release_list_add(release, qobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
if (ret)
return ret;
@@ -343,7 +343,7 @@ static int qxl_update_area_ioctl(struct drm_device *dev, void *data,
qxl_bo_unreserve(qobj);
out:
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 0a67ddf..c4aebcf 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -211,13 +211,13 @@ void qxl_bo_unref(struct qxl_bo **bo)
if ((*bo) == NULL)
return;
- drm_gem_object_unreference_unlocked(&(*bo)->gem_base);
+ drm_gem_object_put_unlocked(&(*bo)->gem_base);
*bo = NULL;
}
struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)
{
- drm_gem_object_reference(&bo->gem_base);
+ drm_gem_object_get(&bo->gem_base);
return bo;
}
@@ -316,7 +316,7 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
list_del_init(&bo->list);
mutex_unlock(&qdev->gem.mutex);
/* this should unref the ttm bo */
- drm_gem_object_unreference_unlocked(&bo->gem_base);
+ drm_gem_object_put_unlocked(&bo->gem_base);
}
}
--
2.7.4
^ permalink raw reply related
* [PATCH v3 06/28] drm/cirrus: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-11 12:32 UTC (permalink / raw)
Cc: David Airlie, Daniel Vetter, linux-kernel, dri-devel,
Gabriel Krisman Bertazi, Cihangir Akturk, Sean Paul, daniel,
Alex Deucher, Dave Airlie, virtualization, Peter Rosin,
Ville Syrjälä, Laurent Pinchart
In-Reply-To: <1502454794-28558-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/cirrus/cirrus_fbdev.c | 2 +-
drivers/gpu/drm/cirrus/cirrus_main.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
index 0f6815f..32fbfba 100644
--- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
@@ -251,7 +251,7 @@ static int cirrus_fbdev_destroy(struct drm_device *dev,
drm_fb_helper_unregister_fbi(&gfbdev->helper);
if (gfb->obj) {
- drm_gem_object_unreference_unlocked(gfb->obj);
+ drm_gem_object_put_unlocked(gfb->obj);
gfb->obj = NULL;
}
diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c
index e7fc95f..b5f5285 100644
--- a/drivers/gpu/drm/cirrus/cirrus_main.c
+++ b/drivers/gpu/drm/cirrus/cirrus_main.c
@@ -18,7 +18,7 @@ static void cirrus_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct cirrus_framebuffer *cirrus_fb = to_cirrus_framebuffer(fb);
- drm_gem_object_unreference_unlocked(cirrus_fb->obj);
+ drm_gem_object_put_unlocked(cirrus_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
@@ -67,13 +67,13 @@ cirrus_user_framebuffer_create(struct drm_device *dev,
cirrus_fb = kzalloc(sizeof(*cirrus_fb), GFP_KERNEL);
if (!cirrus_fb) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return ERR_PTR(-ENOMEM);
}
ret = cirrus_framebuffer_init(dev, cirrus_fb, mode_cmd, obj);
if (ret) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
kfree(cirrus_fb);
return ERR_PTR(ret);
}
@@ -261,7 +261,7 @@ int cirrus_dumb_create(struct drm_file *file,
return ret;
ret = drm_gem_handle_create(file, gobj, &handle);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
if (ret)
return ret;
@@ -310,7 +310,7 @@ cirrus_dumb_mmap_offset(struct drm_file *file,
bo = gem_to_cirrus_bo(obj);
*offset = cirrus_bo_mmap_offset(bo);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return 0;
}
--
2.7.4
^ permalink raw reply related
* [PATCH v3 05/28] drm/bochs: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-11 12:32 UTC (permalink / raw)
Cc: David Airlie, linux-kernel, dri-devel, virtualization,
Cihangir Akturk, daniel
In-Reply-To: <1502454794-28558-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/bochs/bochs_fbdev.c | 2 +-
drivers/gpu/drm/bochs/bochs_mm.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bochs/bochs_fbdev.c b/drivers/gpu/drm/bochs/bochs_fbdev.c
index 14eb8d0..6f0cf36 100644
--- a/drivers/gpu/drm/bochs/bochs_fbdev.c
+++ b/drivers/gpu/drm/bochs/bochs_fbdev.c
@@ -144,7 +144,7 @@ static int bochs_fbdev_destroy(struct bochs_device *bochs)
drm_fb_helper_unregister_fbi(&bochs->fb.helper);
if (gfb->obj) {
- drm_gem_object_unreference_unlocked(gfb->obj);
+ drm_gem_object_put_unlocked(gfb->obj);
gfb->obj = NULL;
}
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c
index c4cadb6..881b784 100644
--- a/drivers/gpu/drm/bochs/bochs_mm.c
+++ b/drivers/gpu/drm/bochs/bochs_mm.c
@@ -417,7 +417,7 @@ int bochs_dumb_create(struct drm_file *file, struct drm_device *dev,
return ret;
ret = drm_gem_handle_create(file, gobj, &handle);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
if (ret)
return ret;
@@ -457,7 +457,7 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev,
bo = gem_to_bochs_bo(obj);
*offset = bochs_bo_mmap_offset(bo);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return 0;
}
@@ -467,7 +467,7 @@ static void bochs_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct bochs_framebuffer *bochs_fb = to_bochs_framebuffer(fb);
- drm_gem_object_unreference_unlocked(bochs_fb->obj);
+ drm_gem_object_put_unlocked(bochs_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
@@ -518,13 +518,13 @@ bochs_user_framebuffer_create(struct drm_device *dev,
bochs_fb = kzalloc(sizeof(*bochs_fb), GFP_KERNEL);
if (!bochs_fb) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return ERR_PTR(-ENOMEM);
}
ret = bochs_framebuffer_init(dev, bochs_fb, mode_cmd, obj);
if (ret) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
kfree(bochs_fb);
return ERR_PTR(ret);
}
--
2.7.4
^ permalink raw reply related
* [PATCH v3 00/28] DRM API Conversions
From: Cihangir Akturk @ 2017-08-11 12:32 UTC (permalink / raw)
Cc: devel, linux-arm-msm, intel-gfx, linux-kernel, dri-devel, etnaviv,
Cihangir Akturk, amd-gfx, daniel, nouveau, linux-tegra,
virtualization, freedreno
Changes since v2:
- Patch series is based on *drm-misc-next* as suggested by Sean Paul.
- Dropped patch 05 (drm/atmel-hlcdc) and patch 25 (drm/vc4) from v2,
since they were already pulled in the drm-misc-next
Changes since v1:
- This time patches were generated with coccinelle instead of my own
script, as suggested by Daniel Vetter.
- Fixed the typo in commit messages. s/adn/and
Note: I've included r-b, a-b tags, as these patches are identical to v1
except for the file: drivers/gpu/drm/i915/i915_gem_object.h
This patch set replaces the occurrences of drm_*_reference() and
drm_*_unreference() with the new drm_*_get() and drm_*_put() functions.
All patches in the series do the same thing, converting to the new APIs.
I created patches per DRM driver as suggested by Daniel Vetter.
This patch set was generated by scripts/coccinelle/api/drm-get-put.cocci
Previous thread can be reached at:
https://marc.info/?l=dri-devel&m=150178288816047
Background:
In the kernel, reference counting APIs use *_get(), *_put() style naming
to reference-count the objects. But DRM subsystem uses a different
naming for them such as *_reference(), *_unreference() which is
inconsistent with the other reference counting APIs in the kernel. To
solve this consistency issue, Thierry Reding introduced a couple of
functions and compatibility aliases in the following commits for them.
commit 020a218f95bd3ceff7dd1022ff7ebc0497bc7bf9
Author: Thierry Reding <treding@nvidia.com>
Date: Tue Feb 28 15:46:38 2017 +0100
drm: Introduce drm_mode_object_{get,put}()
commit ad09360750afa18a0a0ce0253d6ea6033abc22e7
Author: Thierry Reding <treding@nvidia.com>
Date: Tue Feb 28 15:46:39 2017 +0100
drm: Introduce drm_connector_{get,put}()
commit a4a69da06bc11a937a6e417938b1bb698ee1fa46
Author: Thierry Reding <treding@nvidia.com>
Date: Tue Feb 28 15:46:40 2017 +0100
drm: Introduce drm_framebuffer_{get,put}()
commit e6b62714e87c8811d5564b6a0738dcde63a51774
Author: Thierry Reding <treding@nvidia.com>
Date: Tue Feb 28 15:46:41 2017 +0100
drm: Introduce drm_gem_object_{get,put}()
commit 6472e5090be7c78749a3c279b4faae87ab835c40
Author: Thierry Reding <treding@nvidia.com>
Date: Tue Feb 28 15:46:42 2017 +0100
drm: Introduce drm_property_blob_{get,put}()
Cihangir Akturk (28):
drm/amdgpu: switch to drm_*_get(), drm_*_put() helpers
drm: mali-dp: switch to drm_*_get(), drm_*_put() helpers
drm/armada: switch to drm_*_get(), drm_*_put() helpers
drm/ast: switch to drm_*_get(), drm_*_put() helpers
drm/bochs: switch to drm_*_get(), drm_*_put() helpers
drm/cirrus: switch to drm_*_get(), drm_*_put() helpers
drm/etnaviv: switch to drm_*_get(), drm_*_put() helpers
drm/exynos: switch to drm_*_get(), drm_*_put() helpers
drm/gma500: switch to drm_*_get(), drm_*_put() helpers
drm/hisilicon: switch to drm_*_get(), drm_*_put() helpers
drm/i915: switch to drm_*_get(), drm_*_put() helpers
drm/imx: switch to drm_*_get(), drm_*_put() helpers
drm/mediatek: switch to drm_*_get(), drm_*_put() helpers
drm/mgag200: switch to drm_*_get(), drm_*_put() helpers
drm/msm: switch to drm_*_get(), drm_*_put() helpers
drm/nouveau: switch to drm_*_get(), drm_*_put() helpers
drm/omapdrm: switch to drm_*_get(), drm_*_put() helpers
drm/qxl: switch to drm_*_get(), drm_*_put() helpers
drm/radeon: switch to drm_*_get(), drm_*_put() helpers
drm/rockchip: switch to drm_*_get(), drm_*_put() helpers
drm/tegra: switch to drm_*_get(), drm_*_put() helpers
drm/tilcdc: switch to drm_*_get(), drm_*_put() helpers
drm/udl: switch to drm_*_get(), drm_*_put() helpers
drm/vc4: switch to drm_*_get(), drm_*_put() helpers
drm/vgem: switch to drm_*_get(), drm_*_put() helpers
drm/virtio: switch to drm_*_get(), drm_*_put() helpers
drm/vmwgfx: switch to drm_*_get(), drm_*_put() helpers
drm: vboxvideo: switch to drm_*_get(), drm_*_put() helpers
drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 6 ++---
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 4 +--
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 22 ++++++++---------
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 6 ++---
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 6 ++---
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 6 ++---
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 6 ++---
drivers/gpu/drm/arm/malidp_planes.c | 2 +-
drivers/gpu/drm/armada/armada_crtc.c | 22 ++++++++---------
drivers/gpu/drm/armada/armada_drv.c | 2 +-
drivers/gpu/drm/armada/armada_fb.c | 8 +++---
drivers/gpu/drm/armada/armada_fbdev.c | 6 ++---
drivers/gpu/drm/armada/armada_gem.c | 14 +++++------
drivers/gpu/drm/armada/armada_overlay.c | 4 +--
drivers/gpu/drm/ast/ast_fb.c | 2 +-
drivers/gpu/drm/ast/ast_main.c | 10 ++++----
drivers/gpu/drm/ast/ast_mode.c | 6 ++---
drivers/gpu/drm/bochs/bochs_fbdev.c | 2 +-
drivers/gpu/drm/bochs/bochs_mm.c | 10 ++++----
drivers/gpu/drm/cirrus/cirrus_fbdev.c | 2 +-
drivers/gpu/drm/cirrus/cirrus_main.c | 10 ++++----
drivers/gpu/drm/etnaviv/etnaviv_drv.c | 8 +++---
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 20 +++++++--------
drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 2 +-
drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 4 +--
drivers/gpu/drm/exynos/exynos_drm_fb.c | 4 +--
drivers/gpu/drm/exynos/exynos_drm_gem.c | 12 ++++-----
drivers/gpu/drm/exynos/exynos_drm_plane.c | 2 +-
drivers/gpu/drm/gma500/framebuffer.c | 4 +--
drivers/gpu/drm/gma500/gem.c | 4 +--
drivers/gpu/drm/gma500/gma_display.c | 6 ++---
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 4 +--
drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 8 +++---
drivers/gpu/drm/i915/i915_gem_object.h | 4 +--
drivers/gpu/drm/i915/intel_display.c | 24 +++++++++---------
drivers/gpu/drm/i915/intel_dp_mst.c | 2 +-
drivers/gpu/drm/i915/intel_fbdev.c | 4 +--
drivers/gpu/drm/imx/ipuv3-crtc.c | 2 +-
drivers/gpu/drm/mediatek/mtk_drm_fb.c | 4 +--
drivers/gpu/drm/mediatek/mtk_drm_gem.c | 2 +-
drivers/gpu/drm/mgag200/mgag200_cursor.c | 2 +-
drivers/gpu/drm/mgag200/mgag200_fb.c | 4 +--
drivers/gpu/drm/mgag200/mgag200_main.c | 10 ++++----
drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 10 ++++----
drivers/gpu/drm/msm/adreno/a5xx_power.c | 2 +-
drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 +-
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 6 ++---
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 2 +-
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 2 +-
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 4 +--
drivers/gpu/drm/msm/msm_drv.c | 8 +++---
drivers/gpu/drm/msm/msm_fb.c | 4 +--
drivers/gpu/drm/msm/msm_fbdev.c | 2 +-
drivers/gpu/drm/msm/msm_gem.c | 8 +++---
drivers/gpu/drm/msm/msm_gem_submit.c | 4 +--
drivers/gpu/drm/msm/msm_gpu.c | 4 +--
drivers/gpu/drm/msm/msm_ringbuffer.c | 2 +-
drivers/gpu/drm/nouveau/dispnv04/crtc.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_abi16.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_display.c | 8 +++---
drivers/gpu/drm/nouveau/nouveau_fbcon.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_gem.c | 14 +++++------
drivers/gpu/drm/nouveau/nv50_display.c | 2 +-
drivers/gpu/drm/omapdrm/omap_drv.c | 2 +-
drivers/gpu/drm/omapdrm/omap_fb.c | 4 +--
drivers/gpu/drm/omapdrm/omap_fbdev.c | 2 +-
drivers/gpu/drm/omapdrm/omap_gem.c | 4 +--
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 2 +-
drivers/gpu/drm/qxl/qxl_display.c | 4 +--
drivers/gpu/drm/qxl/qxl_dumb.c | 2 +-
drivers/gpu/drm/qxl/qxl_fb.c | 6 ++---
drivers/gpu/drm/qxl/qxl_gem.c | 2 +-
drivers/gpu/drm/qxl/qxl_ioctl.c | 4 +--
drivers/gpu/drm/qxl/qxl_object.c | 6 ++---
drivers/gpu/drm/radeon/radeon_cs.c | 2 +-
drivers/gpu/drm/radeon/radeon_cursor.c | 6 ++---
drivers/gpu/drm/radeon/radeon_display.c | 12 ++++-----
drivers/gpu/drm/radeon/radeon_fb.c | 4 +--
drivers/gpu/drm/radeon/radeon_gem.c | 30 +++++++++++------------
drivers/gpu/drm/radeon/radeon_object.c | 2 +-
drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 6 ++---
drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c | 2 +-
drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 2 +-
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +--
drivers/gpu/drm/tegra/drm.c | 12 ++++-----
drivers/gpu/drm/tegra/fb.c | 8 +++---
drivers/gpu/drm/tegra/gem.c | 10 ++++----
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 6 ++---
drivers/gpu/drm/udl/udl_fb.c | 6 ++---
drivers/gpu/drm/udl/udl_gem.c | 4 +--
drivers/gpu/drm/vc4/vc4_bo.c | 2 +-
drivers/gpu/drm/vgem/vgem_drv.c | 4 +--
drivers/gpu/drm/vgem/vgem_fence.c | 2 +-
drivers/gpu/drm/virtio/virtgpu_display.c | 4 +--
drivers/gpu/drm/virtio/virtgpu_gem.c | 4 +--
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 14 +++++------
drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c | 4 +--
drivers/staging/vboxvideo/vbox_fb.c | 2 +-
drivers/staging/vboxvideo/vbox_main.c | 8 +++---
drivers/staging/vboxvideo/vbox_mode.c | 2 +-
103 files changed, 294 insertions(+), 294 deletions(-)
--
2.7.4
^ permalink raw reply
* Re: [PATCH v2 0/2] virtio_scsi: Set can_queue based on size of virtqueue.
From: Martin K. Petersen @ 2017-08-11 0:24 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: jejb, martin.petersen, linux-scsi, mst, linux-kernel,
virtualization, pbonzini, hch
In-Reply-To: <20170810165652.21515-1-rjones@redhat.com>
Richard,
> v1 was here:
>
> https://lkml.org/lkml/2017/8/10/689
>
> v1 -> v2:
>
> Remove .can_queue field from the templates.
Applied to 4.14/scsi-queue. Thank you!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply
* Re: [Intel-gfx] [PATCH libdrm] drm: Remove create_handle() drm_framebuffer "virtual".
From: Emil Velikov @ 2017-08-10 23:52 UTC (permalink / raw)
To: Joe Kniss
Cc: Heiko Stübner, Edward O'Callaghan, Dave Airlie, nouveau,
dri-devel, open list:VIRTIO CORE, NET..., linux-tegra,
Thierry Reding, amd-gfx mailing list, Vetter, Daniel, Baoyou Xie,
Alex Xie, StDenis, Tom, zhoucm1, linux-samsung-soc,
Joonyoung Shim, Russell King, Krzysztof Kozlowski, jonathanh,
open list:ARM/Rockchip SoC...
In-Reply-To: <CAOvnNvbNNtuLFy+7-beF=kGB0qYJckT_MEef3_=t-eWi-NFGXA@mail.gmail.com>
On 10 August 2017 at 20:29, Joe Kniss <djmk@google.com> wrote:
> On Wed, Aug 9, 2017 at 4:13 PM, Joe Kniss <djmk@google.com> wrote:
>> On Wed, Aug 9, 2017 at 12:14 PM, Noralf Trønnes <noralf@tronnes.org> wrote:
>>>
>>> Den 09.08.2017 01.42, skrev Joe Kniss:
>>>>
>>>> Because all drivers currently use gem objects for framebuffer planes,
>>>> the virtual create_handle() is not required. This change adds a
>>>> struct drm_gem_object *gems[4] field to drm_framebuffer and removes
>>>> create_handle() function pointer from drm_framebuffer_funcs. The
>>>> corresponding *_create_handle() function is removed from each driver.
>>>>
>>>> In many cases this change eliminates a struct *_framebuffer object,
>>>> as the only need for the derived struct is the addition of the gem
>>>> object pointer.
>>>>
>>>> TESTED: compiled: allyesconfig ARCH=x86,arm platforms:i915, rockchip
>>>>
>>>> Signed-off-by: Joe Kniss <djmk@google.com>
>>>> ---
>>>
>>>
>>> Hi Joe,
>>>
>>> I'm also looking into adding gem objs to drm_framebuffer in this patch:
>>> [PATCH v2 01/22] drm: Add GEM backed framebuffer library
>>> https://lists.freedesktop.org/archives/dri-devel/2017-August/149782.html
>>>
>>
>> Great. There's only minimal overlap here. I'll rebase this change on yours
>> once it's in.
>>
>>> [...]
>>>
>>>> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c
>>>> b/drivers/gpu/drm/drm_fb_cma_helper.c
>>>> index ade319d10e70..f5f011b910b1 100644
>>>> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
>>>> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
>>>> @@ -31,14 +31,9 @@
>>>> #define DEFAULT_FBDEFIO_DELAY_MS 50
>>>> -struct drm_fb_cma {
>>>> - struct drm_framebuffer fb;
>>>> - struct drm_gem_cma_object *obj[4];
>>>> -};
>>>> -
>>>> struct drm_fbdev_cma {
>>>> struct drm_fb_helper fb_helper;
>>>> - struct drm_fb_cma *fb;
>>>> + struct drm_framebuffer *fb;
>>>
>>>
>>> This fb pointer isn't necessary, since fb_helper already has one.
>>>
>
> So, looking deeper into this, it seems that the struct
> drm_framebuffer_funcs *fb_funcs is also redundant here? In which case
> this whole struct can go...
>
I think you're spot on.
Perhaps the goal was to allow drivers to use separate funcs for fb vs fbdev?
Not sure how well that will fair, yet again, all current users use the
same funcs for both.
-Emil
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Richard W.M. Jones @ 2017-08-10 21:50 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170811003621-mutt-send-email-mst@kernel.org>
On Fri, Aug 11, 2017 at 12:41:47AM +0300, Michael S. Tsirkin wrote:
> On Thu, Aug 10, 2017 at 10:35:11PM +0100, Richard W.M. Jones wrote:
> > On Fri, Aug 11, 2017 at 12:31:44AM +0300, Michael S. Tsirkin wrote:
> > > Then we probably should fail probe if vq size is too small.
> >
> > What does this mean?
> >
> > Rich.
>
> We must prevent driver from submitting s/g lists > vq size to device.
Fair point. I would have thought (not knowing anything about how this
works in the kernel) that the driver should be able to split up
scatter-gather lists if they are larger than what the driver supports?
Anyway the commit message is derived from what Paolo told me on IRC,
so let's see what he says.
Rich.
> Either tell linux to avoid s/g lists that are too long, or
> simply fail request if this happens, or refuse to attach driver to device.
>
> Later option would look something like this within probe:
>
> for (i = VIRTIO_SCSI_VQ_BASE; i < num_vqs; i++)
> if (vqs[i]->num < MAX_SG_USED_BY_LINUX)
> goto err;
>
>
> I don't know what's MAX_SG_USED_BY_LINUX though.
>
> > --
> > Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> > Read my programming and virtualization blog: http://rwmj.wordpress.com
> > virt-builder quickly builds VMs from scratch
> > http://libguestfs.org/virt-builder.1.html
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Michael S. Tsirkin @ 2017-08-10 21:41 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810213511.GB10017@redhat.com>
On Thu, Aug 10, 2017 at 10:35:11PM +0100, Richard W.M. Jones wrote:
> On Fri, Aug 11, 2017 at 12:31:44AM +0300, Michael S. Tsirkin wrote:
> > Then we probably should fail probe if vq size is too small.
>
> What does this mean?
>
> Rich.
We must prevent driver from submitting s/g lists > vq size to device.
Either tell linux to avoid s/g lists that are too long, or
simply fail request if this happens, or refuse to attach driver to device.
Later option would look something like this within probe:
for (i = VIRTIO_SCSI_VQ_BASE; i < num_vqs; i++)
if (vqs[i]->num < MAX_SG_USED_BY_LINUX)
goto err;
I don't know what's MAX_SG_USED_BY_LINUX though.
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> virt-builder quickly builds VMs from scratch
> http://libguestfs.org/virt-builder.1.html
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Richard W.M. Jones @ 2017-08-10 21:35 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170811003107-mutt-send-email-mst@kernel.org>
On Fri, Aug 11, 2017 at 12:31:44AM +0300, Michael S. Tsirkin wrote:
> Then we probably should fail probe if vq size is too small.
What does this mean?
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Michael S. Tsirkin @ 2017-08-10 21:31 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810213038.GC20914@redhat.com>
On Thu, Aug 10, 2017 at 10:30:38PM +0100, Richard W.M. Jones wrote:
> On Fri, Aug 11, 2017 at 12:21:16AM +0300, Michael S. Tsirkin wrote:
> > On Thu, Aug 10, 2017 at 05:40:34PM +0100, Richard W.M. Jones wrote:
> > > If using indirect descriptors, you can make the total_sg as large as
> > > you want.
> >
> > That would be a spec violation though, even if it happens to
> > work on current QEMU.
> >
> > The spec says:
> > A driver MUST NOT create a descriptor chain longer than the Queue Size of the device.
> >
> > What prompted this patch?
> > Do we ever encounter this situation?
>
> This patch is needed because the following (2/2) patch will trigger
> that BUG_ON if I set virtqueue_size=64 or any smaller value.
>
> The precise backtrace is below.
>
> Rich.
>
> [ 4.029510] ------------[ cut here ]------------
> [ 4.030127] kernel BUG at drivers/virtio/virtio_ring.c:299!
> [ 4.030834] invalid opcode: 0000 [#1] SMP
> [ 4.031340] Modules linked in: libcrc32c crc8 crc7 crc4 crc_itu_t virtio_pci virtio_mmio virtio_input virtio_balloon virtio_scsi nd_pmem nd_btt virtio_net virtio_crypto crypto_engine virtio_console virtio_rng virtio_blk virtio_ring virtio nfit crc32_generic crct10dif_pclmul crc32c_intel crc32_pclmul
> [ 4.034606] CPU: 0 PID: 1 Comm: init Not tainted 4.13.0-rc4+ #100
> [ 4.035354] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.10.2-0-g5f4c7b1-prebuilt.qemu-project.org 04/01/2014
> [ 4.036770] task: ffff9a859e243300 task.stack: ffffa731c00cc000
> [ 4.037506] RIP: 0010:virtqueue_add_sgs+0x23d/0x460 [virtio_ring]
> [ 4.038250] RSP: 0000:ffffa731c00cf6e0 EFLAGS: 00010097
> [ 4.038898] RAX: 0000000000000000 RBX: 0000000000000011 RCX: ffffdd0680646c40
> [ 4.039762] RDX: 0000000000000000 RSI: ffffa731c00cf7b8 RDI: ffff9a85945c4d68
> [ 4.040634] RBP: ffffa731c00cf748 R08: ffff9a85945c4a78 R09: 0000000001080020
> [ 4.041508] R10: ffffa731c00cf788 R11: ffff9a859b3d3120 R12: ffffa731c00cf7d0
> [ 4.042382] R13: ffffa731c00cf7d0 R14: 0000000000000001 R15: ffff9a859b3f8200
> [ 4.043248] FS: 0000000000000000(0000) GS:ffff9a859e600000(0000) knlGS:0000000000000000
> [ 4.044232] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 4.044942] CR2: 00007fcff02e931c CR3: 000000001d23b000 CR4: 00000000003406f0
> [ 4.045815] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> [ 4.046684] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> [ 4.047559] Call Trace:
> [ 4.047876] virtscsi_add_cmd+0x1c9/0x280 [virtio_scsi]
> [ 4.048528] virtscsi_kick_cmd+0x38/0x90 [virtio_scsi]
> [ 4.049161] virtscsi_queuecommand+0x104/0x280 [virtio_scsi]
> [ 4.049875] virtscsi_queuecommand_single+0x38/0x40 [virtio_scsi]
> [ 4.050628] scsi_dispatch_cmd+0xf9/0x390
> [ 4.051128] scsi_queue_rq+0x5e5/0x6f0
> [ 4.051602] blk_mq_dispatch_rq_list+0x1ff/0x3c0
> [ 4.052175] blk_mq_sched_dispatch_requests+0x199/0x1f0
> [ 4.052824] __blk_mq_run_hw_queue+0x11d/0x1b0
> [ 4.053382] __blk_mq_delay_run_hw_queue+0x8d/0xa0
> [ 4.053972] blk_mq_run_hw_queue+0x14/0x20
> [ 4.054485] blk_mq_sched_insert_requests+0x96/0x120
> [ 4.055095] blk_mq_flush_plug_list+0x19d/0x410
> [ 4.055661] blk_flush_plug_list+0xf9/0x2b0
> [ 4.056182] blk_finish_plug+0x2c/0x40
> [ 4.056655] __do_page_cache_readahead+0x32e/0x400
> [ 4.057261] filemap_fault+0x2fb/0x890
> [ 4.057731] ? filemap_fault+0x2fb/0x890
> [ 4.058220] ? find_held_lock+0x3c/0xb0
> [ 4.058714] ext4_filemap_fault+0x34/0x50
> [ 4.059212] __do_fault+0x1e/0x110
> [ 4.059644] __handle_mm_fault+0x6b2/0x1080
> [ 4.060167] handle_mm_fault+0x178/0x350
> [ 4.060662] __do_page_fault+0x26e/0x510
> [ 4.061152] trace_do_page_fault+0x9d/0x290
> [ 4.061677] do_async_page_fault+0x51/0xa0
> [ 4.062189] async_page_fault+0x28/0x30
> [ 4.062667] RIP: 0033:0x7fcff030a24f
> [ 4.063113] RSP: 002b:00007ffefc2ad078 EFLAGS: 00010206
> [ 4.063760] RAX: 00007fcff02e931c RBX: 00007fcff050f660 RCX: 00007fcff02e935c
> [ 4.064648] RDX: 0000000000000664 RSI: 0000000000000000 RDI: 00007fcff02e931c
> [ 4.065519] RBP: 00007ffefc2ad320 R08: 00007fcff02e931c R09: 0000000000027000
> [ 4.066392] R10: 00007fcff02e9980 R11: 0000000000000206 R12: 00007ffefc2ad0b0
> [ 4.067263] R13: 00007ffefc2ad408 R14: 0000000000000002 R15: 00000000000087f0
> [ 4.068135] Code: af 01 c7 45 c8 01 00 00 00 45 31 ed e9 9b fe ff ff 31 db 48 83 7d d0 00 0f 85 3f fe ff ff 0f 0b 48 8b 7d b8 e8 e5 fd 22 de eb 8b <0f> 0b 0f 0b 44 89 6d a8 45 89 f5 48 8b 45 a0 44 8d 70 01 48 83
> [ 4.070506] RIP: virtqueue_add_sgs+0x23d/0x460 [virtio_ring] RSP: ffffa731c00cf6e0
> [ 4.071434] ---[ end trace 02532659840e2a64 ]---
Then we probably should fail probe if vq size is too small.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines. Supports shell scripting,
> bindings from many languages. http://libguestfs.org
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Richard W.M. Jones @ 2017-08-10 21:30 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170811001447-mutt-send-email-mst@kernel.org>
On Fri, Aug 11, 2017 at 12:21:16AM +0300, Michael S. Tsirkin wrote:
> On Thu, Aug 10, 2017 at 05:40:34PM +0100, Richard W.M. Jones wrote:
> > If using indirect descriptors, you can make the total_sg as large as
> > you want.
>
> That would be a spec violation though, even if it happens to
> work on current QEMU.
>
> The spec says:
> A driver MUST NOT create a descriptor chain longer than the Queue Size of the device.
>
> What prompted this patch?
> Do we ever encounter this situation?
This patch is needed because the following (2/2) patch will trigger
that BUG_ON if I set virtqueue_size=64 or any smaller value.
The precise backtrace is below.
Rich.
[ 4.029510] ------------[ cut here ]------------
[ 4.030127] kernel BUG at drivers/virtio/virtio_ring.c:299!
[ 4.030834] invalid opcode: 0000 [#1] SMP
[ 4.031340] Modules linked in: libcrc32c crc8 crc7 crc4 crc_itu_t virtio_pci virtio_mmio virtio_input virtio_balloon virtio_scsi nd_pmem nd_btt virtio_net virtio_crypto crypto_engine virtio_console virtio_rng virtio_blk virtio_ring virtio nfit crc32_generic crct10dif_pclmul crc32c_intel crc32_pclmul
[ 4.034606] CPU: 0 PID: 1 Comm: init Not tainted 4.13.0-rc4+ #100
[ 4.035354] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.10.2-0-g5f4c7b1-prebuilt.qemu-project.org 04/01/2014
[ 4.036770] task: ffff9a859e243300 task.stack: ffffa731c00cc000
[ 4.037506] RIP: 0010:virtqueue_add_sgs+0x23d/0x460 [virtio_ring]
[ 4.038250] RSP: 0000:ffffa731c00cf6e0 EFLAGS: 00010097
[ 4.038898] RAX: 0000000000000000 RBX: 0000000000000011 RCX: ffffdd0680646c40
[ 4.039762] RDX: 0000000000000000 RSI: ffffa731c00cf7b8 RDI: ffff9a85945c4d68
[ 4.040634] RBP: ffffa731c00cf748 R08: ffff9a85945c4a78 R09: 0000000001080020
[ 4.041508] R10: ffffa731c00cf788 R11: ffff9a859b3d3120 R12: ffffa731c00cf7d0
[ 4.042382] R13: ffffa731c00cf7d0 R14: 0000000000000001 R15: ffff9a859b3f8200
[ 4.043248] FS: 0000000000000000(0000) GS:ffff9a859e600000(0000) knlGS:0000000000000000
[ 4.044232] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4.044942] CR2: 00007fcff02e931c CR3: 000000001d23b000 CR4: 00000000003406f0
[ 4.045815] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 4.046684] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 4.047559] Call Trace:
[ 4.047876] virtscsi_add_cmd+0x1c9/0x280 [virtio_scsi]
[ 4.048528] virtscsi_kick_cmd+0x38/0x90 [virtio_scsi]
[ 4.049161] virtscsi_queuecommand+0x104/0x280 [virtio_scsi]
[ 4.049875] virtscsi_queuecommand_single+0x38/0x40 [virtio_scsi]
[ 4.050628] scsi_dispatch_cmd+0xf9/0x390
[ 4.051128] scsi_queue_rq+0x5e5/0x6f0
[ 4.051602] blk_mq_dispatch_rq_list+0x1ff/0x3c0
[ 4.052175] blk_mq_sched_dispatch_requests+0x199/0x1f0
[ 4.052824] __blk_mq_run_hw_queue+0x11d/0x1b0
[ 4.053382] __blk_mq_delay_run_hw_queue+0x8d/0xa0
[ 4.053972] blk_mq_run_hw_queue+0x14/0x20
[ 4.054485] blk_mq_sched_insert_requests+0x96/0x120
[ 4.055095] blk_mq_flush_plug_list+0x19d/0x410
[ 4.055661] blk_flush_plug_list+0xf9/0x2b0
[ 4.056182] blk_finish_plug+0x2c/0x40
[ 4.056655] __do_page_cache_readahead+0x32e/0x400
[ 4.057261] filemap_fault+0x2fb/0x890
[ 4.057731] ? filemap_fault+0x2fb/0x890
[ 4.058220] ? find_held_lock+0x3c/0xb0
[ 4.058714] ext4_filemap_fault+0x34/0x50
[ 4.059212] __do_fault+0x1e/0x110
[ 4.059644] __handle_mm_fault+0x6b2/0x1080
[ 4.060167] handle_mm_fault+0x178/0x350
[ 4.060662] __do_page_fault+0x26e/0x510
[ 4.061152] trace_do_page_fault+0x9d/0x290
[ 4.061677] do_async_page_fault+0x51/0xa0
[ 4.062189] async_page_fault+0x28/0x30
[ 4.062667] RIP: 0033:0x7fcff030a24f
[ 4.063113] RSP: 002b:00007ffefc2ad078 EFLAGS: 00010206
[ 4.063760] RAX: 00007fcff02e931c RBX: 00007fcff050f660 RCX: 00007fcff02e935c
[ 4.064648] RDX: 0000000000000664 RSI: 0000000000000000 RDI: 00007fcff02e931c
[ 4.065519] RBP: 00007ffefc2ad320 R08: 00007fcff02e931c R09: 0000000000027000
[ 4.066392] R10: 00007fcff02e9980 R11: 0000000000000206 R12: 00007ffefc2ad0b0
[ 4.067263] R13: 00007ffefc2ad408 R14: 0000000000000002 R15: 00000000000087f0
[ 4.068135] Code: af 01 c7 45 c8 01 00 00 00 45 31 ed e9 9b fe ff ff 31 db 48 83 7d d0 00 0f 85 3f fe ff ff 0f 0b 48 8b 7d b8 e8 e5 fd 22 de eb 8b <0f> 0b 0f 0b 44 89 6d a8 45 89 f5 48 8b 45 a0 44 8d 70 01 48 83
[ 4.070506] RIP: virtqueue_add_sgs+0x23d/0x460 [virtio_ring] RSP: ffffa731c00cf6e0
[ 4.071434] ---[ end trace 02532659840e2a64 ]---
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Michael S. Tsirkin @ 2017-08-10 21:21 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: jejb, martin.petersen, linux-scsi, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810164035.19963-2-rjones@redhat.com>
On Thu, Aug 10, 2017 at 05:40:34PM +0100, Richard W.M. Jones wrote:
> If using indirect descriptors, you can make the total_sg as large as
> you want.
That would be a spec violation though, even if it happens to
work on current QEMU.
The spec says:
A driver MUST NOT create a descriptor chain longer than the Queue Size of the device.
What prompted this patch? Do we ever encounter this situation?
> If not, BUG is too serious because the function later
> returns -ENOSPC.
>
> Thanks Paolo Bonzini, Christoph Hellwig.
>
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> ---
> drivers/virtio/virtio_ring.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index 5e1b548828e6..27cbc1eab868 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -296,7 +296,6 @@ static inline int virtqueue_add(struct virtqueue *_vq,
> }
> #endif
>
> - BUG_ON(total_sg > vq->vring.num);
> BUG_ON(total_sg == 0);
>
> head = vq->free_head;
> @@ -305,8 +304,10 @@ static inline int virtqueue_add(struct virtqueue *_vq,
> * buffers, then go indirect. FIXME: tune this threshold */
> if (vq->indirect && total_sg > 1 && vq->vq.num_free)
> desc = alloc_indirect(_vq, total_sg, gfp);
> - else
> + else {
> desc = NULL;
> + WARN_ON_ONCE(total_sg > vq->vring.num && !vq->indirect);
> + }
>
> if (desc) {
> /* Use a single buffer which doesn't continue */
> --
> 2.13.1
^ permalink raw reply
* Re: [PATCH libdrm] drm: Remove create_handle() drm_framebuffer "virtual".
From: Joe Kniss via Virtualization @ 2017-08-10 19:29 UTC (permalink / raw)
To: Noralf Trønnes
Cc: Heiko Stübner, Dave Airlie, Michel Daenzer, dri-devel,
open list:VIRTIO CORE, NET..., Zhang, Jerry, Thierry Reding,
Patrik Jakobsson, Vetter, Daniel, baoyou.xie, ville.syrjala,
Alex Xie, StDenis, Tom, zhoucm1, Mario Kleiner, linux-samsung-soc,
joe, Joonyoung Shim, linux-mediatek, Russell King, krzk,
jonathanh
In-Reply-To: <CAOvnNvbEt=Uyve3cu_+6BB0EepvO=OKC6gpV3isRef+UdVoX-g@mail.gmail.com>
On Wed, Aug 9, 2017 at 4:13 PM, Joe Kniss <djmk@google.com> wrote:
> On Wed, Aug 9, 2017 at 12:14 PM, Noralf Trønnes <noralf@tronnes.org> wrote:
>>
>> Den 09.08.2017 01.42, skrev Joe Kniss:
>>>
>>> Because all drivers currently use gem objects for framebuffer planes,
>>> the virtual create_handle() is not required. This change adds a
>>> struct drm_gem_object *gems[4] field to drm_framebuffer and removes
>>> create_handle() function pointer from drm_framebuffer_funcs. The
>>> corresponding *_create_handle() function is removed from each driver.
>>>
>>> In many cases this change eliminates a struct *_framebuffer object,
>>> as the only need for the derived struct is the addition of the gem
>>> object pointer.
>>>
>>> TESTED: compiled: allyesconfig ARCH=x86,arm platforms:i915, rockchip
>>>
>>> Signed-off-by: Joe Kniss <djmk@google.com>
>>> ---
>>
>>
>> Hi Joe,
>>
>> I'm also looking into adding gem objs to drm_framebuffer in this patch:
>> [PATCH v2 01/22] drm: Add GEM backed framebuffer library
>> https://lists.freedesktop.org/archives/dri-devel/2017-August/149782.html
>>
>
> Great. There's only minimal overlap here. I'll rebase this change on yours
> once it's in.
>
>> [...]
>>
>>> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c
>>> b/drivers/gpu/drm/drm_fb_cma_helper.c
>>> index ade319d10e70..f5f011b910b1 100644
>>> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
>>> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
>>> @@ -31,14 +31,9 @@
>>> #define DEFAULT_FBDEFIO_DELAY_MS 50
>>> -struct drm_fb_cma {
>>> - struct drm_framebuffer fb;
>>> - struct drm_gem_cma_object *obj[4];
>>> -};
>>> -
>>> struct drm_fbdev_cma {
>>> struct drm_fb_helper fb_helper;
>>> - struct drm_fb_cma *fb;
>>> + struct drm_framebuffer *fb;
>>
>>
>> This fb pointer isn't necessary, since fb_helper already has one.
>>
So, looking deeper into this, it seems that the struct
drm_framebuffer_funcs *fb_funcs is also redundant here? In which case
this whole struct can go...
>
> I'll remove it... but I am sure when I look deeper there will be more
> of these in the various drivers too.
>
>> Noralf.
>>
>>
>
> -joe
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v2 2/2] virtio: virtio_scsi: Set can_queue to the length of the virtqueue.
From: Paolo Bonzini @ 2017-08-10 16:58 UTC (permalink / raw)
To: Richard W.M. Jones, jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
hch
In-Reply-To: <20170810165652.21515-3-rjones@redhat.com>
On 10/08/2017 18:56, Richard W.M. Jones wrote:
> Since switching to blk-mq as the default in commit 5c279bd9e406
> ("scsi: default to scsi-mq"), virtio-scsi LUNs consume about 10x as
> much kernel memory.
>
> qemu currently allocates a fixed 128 entry virtqueue. can_queue
> currently is set to 1024. But with indirect descriptors, each command
> in the queue takes 1 virtqueue entry, so the number of commands which
> can be queued is equal to the length of the virtqueue.
>
> Note I intend to send a patch to qemu to allow the virtqueue size to
> be configured from the qemu command line.
>
> Thanks Paolo Bonzini, Christoph Hellwig.
>
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> ---
> drivers/scsi/virtio_scsi.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
> index 9be211d68b15..7c28e8d4955a 100644
> --- a/drivers/scsi/virtio_scsi.c
> +++ b/drivers/scsi/virtio_scsi.c
> @@ -818,7 +818,6 @@ static struct scsi_host_template virtscsi_host_template_single = {
> .eh_timed_out = virtscsi_eh_timed_out,
> .slave_alloc = virtscsi_device_alloc,
>
> - .can_queue = 1024,
> .dma_boundary = UINT_MAX,
> .use_clustering = ENABLE_CLUSTERING,
> .target_alloc = virtscsi_target_alloc,
> @@ -839,7 +838,6 @@ static struct scsi_host_template virtscsi_host_template_multi = {
> .eh_timed_out = virtscsi_eh_timed_out,
> .slave_alloc = virtscsi_device_alloc,
>
> - .can_queue = 1024,
> .dma_boundary = UINT_MAX,
> .use_clustering = ENABLE_CLUSTERING,
> .target_alloc = virtscsi_target_alloc,
> @@ -972,6 +970,8 @@ static int virtscsi_probe(struct virtio_device *vdev)
> if (err)
> goto virtscsi_init_failed;
>
> + shost->can_queue = virtqueue_get_vring_size(vscsi->req_vqs[0].vq);
> +
> cmd_per_lun = virtscsi_config_get(vdev, cmd_per_lun) ?: 1;
> shost->cmd_per_lun = min_t(u32, cmd_per_lun, shost->can_queue);
> shost->max_sectors = virtscsi_config_get(vdev, max_sectors) ?: 0xFFFF;
>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
^ permalink raw reply
* [PATCH v2 2/2] virtio: virtio_scsi: Set can_queue to the length of the virtqueue.
From: Richard W.M. Jones @ 2017-08-10 16:56 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810165652.21515-1-rjones@redhat.com>
Since switching to blk-mq as the default in commit 5c279bd9e406
("scsi: default to scsi-mq"), virtio-scsi LUNs consume about 10x as
much kernel memory.
qemu currently allocates a fixed 128 entry virtqueue. can_queue
currently is set to 1024. But with indirect descriptors, each command
in the queue takes 1 virtqueue entry, so the number of commands which
can be queued is equal to the length of the virtqueue.
Note I intend to send a patch to qemu to allow the virtqueue size to
be configured from the qemu command line.
Thanks Paolo Bonzini, Christoph Hellwig.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
---
drivers/scsi/virtio_scsi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 9be211d68b15..7c28e8d4955a 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -818,7 +818,6 @@ static struct scsi_host_template virtscsi_host_template_single = {
.eh_timed_out = virtscsi_eh_timed_out,
.slave_alloc = virtscsi_device_alloc,
- .can_queue = 1024,
.dma_boundary = UINT_MAX,
.use_clustering = ENABLE_CLUSTERING,
.target_alloc = virtscsi_target_alloc,
@@ -839,7 +838,6 @@ static struct scsi_host_template virtscsi_host_template_multi = {
.eh_timed_out = virtscsi_eh_timed_out,
.slave_alloc = virtscsi_device_alloc,
- .can_queue = 1024,
.dma_boundary = UINT_MAX,
.use_clustering = ENABLE_CLUSTERING,
.target_alloc = virtscsi_target_alloc,
@@ -972,6 +970,8 @@ static int virtscsi_probe(struct virtio_device *vdev)
if (err)
goto virtscsi_init_failed;
+ shost->can_queue = virtqueue_get_vring_size(vscsi->req_vqs[0].vq);
+
cmd_per_lun = virtscsi_config_get(vdev, cmd_per_lun) ?: 1;
shost->cmd_per_lun = min_t(u32, cmd_per_lun, shost->can_queue);
shost->max_sectors = virtscsi_config_get(vdev, max_sectors) ?: 0xFFFF;
--
2.13.1
^ permalink raw reply related
* [PATCH v2 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Richard W.M. Jones @ 2017-08-10 16:56 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810165652.21515-1-rjones@redhat.com>
If using indirect descriptors, you can make the total_sg as large as
you want. If not, BUG is too serious because the function later
returns -ENOSPC.
Thanks Paolo Bonzini, Christoph Hellwig.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
drivers/virtio/virtio_ring.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 5e1b548828e6..27cbc1eab868 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -296,7 +296,6 @@ static inline int virtqueue_add(struct virtqueue *_vq,
}
#endif
- BUG_ON(total_sg > vq->vring.num);
BUG_ON(total_sg == 0);
head = vq->free_head;
@@ -305,8 +304,10 @@ static inline int virtqueue_add(struct virtqueue *_vq,
* buffers, then go indirect. FIXME: tune this threshold */
if (vq->indirect && total_sg > 1 && vq->vq.num_free)
desc = alloc_indirect(_vq, total_sg, gfp);
- else
+ else {
desc = NULL;
+ WARN_ON_ONCE(total_sg > vq->vring.num && !vq->indirect);
+ }
if (desc) {
/* Use a single buffer which doesn't continue */
--
2.13.1
^ permalink raw reply related
* [PATCH v2 0/2] virtio_scsi: Set can_queue based on size of virtqueue.
From: Richard W.M. Jones @ 2017-08-10 16:56 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
v1 was here:
https://lkml.org/lkml/2017/8/10/689
v1 -> v2:
Remove .can_queue field from the templates.
Rich.
^ permalink raw reply
* Re: [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Paolo Bonzini @ 2017-08-10 16:47 UTC (permalink / raw)
To: Richard W.M. Jones, jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
hch
In-Reply-To: <20170810164035.19963-2-rjones@redhat.com>
On 10/08/2017 18:40, Richard W.M. Jones wrote:
> If using indirect descriptors, you can make the total_sg as large as
> you want. If not, BUG is too serious because the function later
> returns -ENOSPC.
>
> Thanks Paolo Bonzini, Christoph Hellwig.
>
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> ---
> drivers/virtio/virtio_ring.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index 5e1b548828e6..27cbc1eab868 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -296,7 +296,6 @@ static inline int virtqueue_add(struct virtqueue *_vq,
> }
> #endif
>
> - BUG_ON(total_sg > vq->vring.num);
> BUG_ON(total_sg == 0);
>
> head = vq->free_head;
> @@ -305,8 +304,10 @@ static inline int virtqueue_add(struct virtqueue *_vq,
> * buffers, then go indirect. FIXME: tune this threshold */
> if (vq->indirect && total_sg > 1 && vq->vq.num_free)
> desc = alloc_indirect(_vq, total_sg, gfp);
> - else
> + else {
> desc = NULL;
> + WARN_ON_ONCE(total_sg > vq->vring.num && !vq->indirect);
So we get here only if vq->vq.num_free is zero. In that case,
vq->indirect makes no difference for the appropriateness of the warning
(that is, it should never be issued for indirect descriptors).
> + }
>
> if (desc) {
> /* Use a single buffer which doesn't continue */
>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo
^ permalink raw reply
* Re: [PATCH 2/2] virtio: virtio_scsi: Set can_queue to the length of the virtqueue.
From: Paolo Bonzini @ 2017-08-10 16:46 UTC (permalink / raw)
To: Richard W.M. Jones, jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
hch
In-Reply-To: <20170810164035.19963-3-rjones@redhat.com>
On 10/08/2017 18:40, Richard W.M. Jones wrote:
> Since switching to blk-mq as the default in commit 5c279bd9e406
> ("scsi: default to scsi-mq"), virtio-scsi LUNs consume about 10x as
> much kernel memory.
>
> qemu currently allocates a fixed 128 entry virtqueue. can_queue
> currently is set to 1024. But with indirect descriptors, each command
> in the queue takes 1 virtqueue entry, so the number of commands which
> can be queued is equal to the length of the virtqueue.
>
> Note I intend to send a patch to qemu to allow the virtqueue size to
> be configured from the qemu command line.
You can clear .can_queue from the templates. Otherwise looks good.
Paolo
> Thanks Paolo Bonzini, Christoph Hellwig.
>
> Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
> ---
> drivers/scsi/virtio_scsi.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
> index 9be211d68b15..d6b4ff634c0d 100644
> --- a/drivers/scsi/virtio_scsi.c
> +++ b/drivers/scsi/virtio_scsi.c
> @@ -972,6 +972,8 @@ static int virtscsi_probe(struct virtio_device *vdev)
> if (err)
> goto virtscsi_init_failed;
>
> + shost->can_queue = virtqueue_get_vring_size(vscsi->req_vqs[0].vq);
> +
> cmd_per_lun = virtscsi_config_get(vdev, cmd_per_lun) ?: 1;
> shost->cmd_per_lun = min_t(u32, cmd_per_lun, shost->can_queue);
> shost->max_sectors = virtscsi_config_get(vdev, max_sectors) ?: 0xFFFF;
>
^ permalink raw reply
* [PATCH 2/2] virtio: virtio_scsi: Set can_queue to the length of the virtqueue.
From: Richard W.M. Jones @ 2017-08-10 16:40 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810164035.19963-1-rjones@redhat.com>
Since switching to blk-mq as the default in commit 5c279bd9e406
("scsi: default to scsi-mq"), virtio-scsi LUNs consume about 10x as
much kernel memory.
qemu currently allocates a fixed 128 entry virtqueue. can_queue
currently is set to 1024. But with indirect descriptors, each command
in the queue takes 1 virtqueue entry, so the number of commands which
can be queued is equal to the length of the virtqueue.
Note I intend to send a patch to qemu to allow the virtqueue size to
be configured from the qemu command line.
Thanks Paolo Bonzini, Christoph Hellwig.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
---
drivers/scsi/virtio_scsi.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 9be211d68b15..d6b4ff634c0d 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -972,6 +972,8 @@ static int virtscsi_probe(struct virtio_device *vdev)
if (err)
goto virtscsi_init_failed;
+ shost->can_queue = virtqueue_get_vring_size(vscsi->req_vqs[0].vq);
+
cmd_per_lun = virtscsi_config_get(vdev, cmd_per_lun) ?: 1;
shost->cmd_per_lun = min_t(u32, cmd_per_lun, shost->can_queue);
shost->max_sectors = virtscsi_config_get(vdev, max_sectors) ?: 0xFFFF;
--
2.13.1
^ permalink raw reply related
* [PATCH 1/2] virtio: Reduce BUG if total_sg > virtqueue size to WARN.
From: Richard W.M. Jones @ 2017-08-10 16:40 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
In-Reply-To: <20170810164035.19963-1-rjones@redhat.com>
If using indirect descriptors, you can make the total_sg as large as
you want. If not, BUG is too serious because the function later
returns -ENOSPC.
Thanks Paolo Bonzini, Christoph Hellwig.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
---
drivers/virtio/virtio_ring.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 5e1b548828e6..27cbc1eab868 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -296,7 +296,6 @@ static inline int virtqueue_add(struct virtqueue *_vq,
}
#endif
- BUG_ON(total_sg > vq->vring.num);
BUG_ON(total_sg == 0);
head = vq->free_head;
@@ -305,8 +304,10 @@ static inline int virtqueue_add(struct virtqueue *_vq,
* buffers, then go indirect. FIXME: tune this threshold */
if (vq->indirect && total_sg > 1 && vq->vq.num_free)
desc = alloc_indirect(_vq, total_sg, gfp);
- else
+ else {
desc = NULL;
+ WARN_ON_ONCE(total_sg > vq->vring.num && !vq->indirect);
+ }
if (desc) {
/* Use a single buffer which doesn't continue */
--
2.13.1
^ permalink raw reply related
* [PATCH 0/2] virtio_scsi: Set can_queue based on size of virtqueue.
From: Richard W.M. Jones @ 2017-08-10 16:40 UTC (permalink / raw)
To: jejb
Cc: martin.petersen, linux-scsi, mst, linux-kernel, virtualization,
pbonzini, hch
Earlier discussion:
https://lkml.org/lkml/2017/8/4/601
"Increased memory usage with scsi-mq"
Downstream bug report:
https://bugzilla.redhat.com/show_bug.cgi?id=1478201
^ permalink raw reply
* [PATCH v2 27/29] drm/virtio: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-10 12:10 UTC (permalink / raw)
Cc: David Airlie, linux-kernel, dri-devel, virtualization,
Cihangir Akturk, daniel
In-Reply-To: <1502367012-9417-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_gem.c | 4 ++--
drivers/gpu/drm/virtio/virtgpu_ioctl.c | 14 +++++++-------
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d51bd45..ef2d450 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -53,7 +53,7 @@ static void virtio_gpu_user_framebuffer_destroy(struct drm_framebuffer *fb)
struct virtio_gpu_framebuffer *virtio_gpu_fb
= to_virtio_gpu_framebuffer(fb);
- drm_gem_object_unreference_unlocked(virtio_gpu_fb->obj);
+ drm_gem_object_put_unlocked(virtio_gpu_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(virtio_gpu_fb);
}
@@ -326,7 +326,7 @@ virtio_gpu_user_framebuffer_create(struct drm_device *dev,
ret = virtio_gpu_framebuffer_init(dev, virtio_gpu_fb, mode_cmd, obj);
if (ret) {
kfree(virtio_gpu_fb);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return NULL;
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index cc025d8..78da210 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -72,7 +72,7 @@ int virtio_gpu_gem_create(struct drm_file *file,
*obj_p = &obj->gem_base;
/* drop reference from allocate - handle holds it now */
- drm_gem_object_unreference_unlocked(&obj->gem_base);
+ drm_gem_object_put_unlocked(&obj->gem_base);
*handle_p = handle;
return 0;
@@ -137,7 +137,7 @@ int virtio_gpu_mode_dumb_mmap(struct drm_file *file_priv,
return -ENOENT;
obj = gem_to_virtio_gpu_obj(gobj);
*offset_p = virtio_gpu_object_mmap_offset(obj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
index b94bd54..461f81a 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
@@ -86,7 +86,7 @@ static void virtio_gpu_unref_list(struct list_head *head)
bo = buf->bo;
qobj = container_of(bo, struct virtio_gpu_object, tbo);
- drm_gem_object_unreference_unlocked(&qobj->gem_base);
+ drm_gem_object_put_unlocked(&qobj->gem_base);
}
}
@@ -261,7 +261,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
ret = virtio_gpu_object_attach(vgdev, qobj, res_id, NULL);
} else {
/* use a gem reference since unref list undoes them */
- drm_gem_object_reference(&qobj->gem_base);
+ drm_gem_object_get(&qobj->gem_base);
mainbuf.bo = &qobj->tbo;
list_add(&mainbuf.head, &validate_list);
@@ -304,7 +304,7 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
}
return ret;
}
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
rc->res_handle = res_id; /* similiar to a VM address */
rc->bo_handle = handle;
@@ -341,7 +341,7 @@ static int virtio_gpu_resource_info_ioctl(struct drm_device *dev, void *data,
ri->size = qobj->gem_base.size;
ri->res_handle = qobj->hw_res_handle;
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
@@ -389,7 +389,7 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev,
out_unres:
virtio_gpu_object_unreserve(qobj);
out:
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
@@ -439,7 +439,7 @@ static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data,
out_unres:
virtio_gpu_object_unreserve(qobj);
out:
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
@@ -462,7 +462,7 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data,
nowait = true;
ret = virtio_gpu_object_wait(qobj, nowait);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
--
2.7.4
^ permalink raw reply related
* [PATCH v2 19/29] drm/qxl: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-10 12:10 UTC (permalink / raw)
Cc: David Airlie, linux-kernel, dri-devel, virtualization,
Cihangir Akturk, daniel, Dave Airlie
In-Reply-To: <1502367012-9417-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/qxl/qxl_display.c | 4 ++--
drivers/gpu/drm/qxl/qxl_dumb.c | 2 +-
drivers/gpu/drm/qxl/qxl_fb.c | 6 +++---
drivers/gpu/drm/qxl/qxl_gem.c | 2 +-
drivers/gpu/drm/qxl/qxl_ioctl.c | 4 ++--
drivers/gpu/drm/qxl/qxl_object.c | 6 +++---
6 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 03fe182..7aa5097 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -306,7 +306,7 @@ void qxl_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct qxl_framebuffer *qxl_fb = to_qxl_framebuffer(fb);
- drm_gem_object_unreference_unlocked(qxl_fb->obj);
+ drm_gem_object_put_unlocked(qxl_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(qxl_fb);
}
@@ -1109,7 +1109,7 @@ qxl_user_framebuffer_create(struct drm_device *dev,
ret = qxl_framebuffer_init(dev, qxl_fb, mode_cmd, obj, &qxl_fb_funcs);
if (ret) {
kfree(qxl_fb);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return NULL;
}
diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
index 5e65d5d..a0c9e73 100644
--- a/drivers/gpu/drm/qxl/qxl_dumb.c
+++ b/drivers/gpu/drm/qxl/qxl_dumb.c
@@ -81,6 +81,6 @@ int qxl_mode_dumb_mmap(struct drm_file *file_priv,
return -ENOENT;
qobj = gem_to_qxl_bo(gobj);
*offset_p = qxl_bo_mmap_offset(qobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
index 573e7e9..47a25b0 100644
--- a/drivers/gpu/drm/qxl/qxl_fb.c
+++ b/drivers/gpu/drm/qxl/qxl_fb.c
@@ -95,7 +95,7 @@ static void qxlfb_destroy_pinned_object(struct drm_gem_object *gobj)
qxl_bo_kunmap(qbo);
qxl_bo_unpin(qbo);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
}
int qxl_get_handle_for_primary_fb(struct qxl_device *qdev,
@@ -320,11 +320,11 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
qxl_bo_unpin(qbo);
}
if (fb && ret) {
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
diff --git a/drivers/gpu/drm/qxl/qxl_gem.c b/drivers/gpu/drm/qxl/qxl_gem.c
index 85f5467..f5c1e78 100644
--- a/drivers/gpu/drm/qxl/qxl_gem.c
+++ b/drivers/gpu/drm/qxl/qxl_gem.c
@@ -98,7 +98,7 @@ int qxl_gem_object_create_with_handle(struct qxl_device *qdev,
return r;
/* drop reference from allocate - handle holds it now */
*qobj = gem_to_qxl_bo(gobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return 0;
}
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
index 0b82a87..dfefd45 100644
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
@@ -121,7 +121,7 @@ static int qxlhw_handle_to_bo(struct drm_file *file_priv, uint64_t handle,
qobj = gem_to_qxl_bo(gobj);
ret = qxl_release_list_add(release, qobj);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
if (ret)
return ret;
@@ -342,7 +342,7 @@ static int qxl_update_area_ioctl(struct drm_device *dev, void *data,
qxl_bo_unreserve(qobj);
out:
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
return ret;
}
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 9a7eef7..cdf1455 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -211,13 +211,13 @@ void qxl_bo_unref(struct qxl_bo **bo)
if ((*bo) == NULL)
return;
- drm_gem_object_unreference_unlocked(&(*bo)->gem_base);
+ drm_gem_object_put_unlocked(&(*bo)->gem_base);
*bo = NULL;
}
struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)
{
- drm_gem_object_reference(&bo->gem_base);
+ drm_gem_object_get(&bo->gem_base);
return bo;
}
@@ -316,7 +316,7 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
list_del_init(&bo->list);
mutex_unlock(&qdev->gem.mutex);
/* this should unref the ttm bo */
- drm_gem_object_unreference_unlocked(&bo->gem_base);
+ drm_gem_object_put_unlocked(&bo->gem_base);
}
}
--
2.7.4
^ permalink raw reply related
* [PATCH v2 07/29] drm/cirrus: switch to drm_*_get(), drm_*_put() helpers
From: Cihangir Akturk @ 2017-08-10 12:09 UTC (permalink / raw)
Cc: Archit Taneja, David Airlie, Daniel Vetter, linux-kernel,
dri-devel, virtualization, Cihangir Akturk, daniel, Alex Deucher,
Dave Airlie, Gabriel Krisman Bertazi, Ville Syrjälä,
Laurent Pinchart
In-Reply-To: <1502367012-9417-1-git-send-email-cakturk@gmail.com>
Use drm_*_get() and drm_*_put() helpers instead of drm_*_reference()
and drm_*_unreference() helpers.
drm_*_reference() and drm_*_unreference() functions are just
compatibility alias for drm_*_get() and drm_*_put() and should not be
used by new code. So convert all users of compatibility functions to
use the new APIs.
Generated by: scripts/coccinelle/api/drm-get-put.cocci
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
---
drivers/gpu/drm/cirrus/cirrus_fbdev.c | 2 +-
drivers/gpu/drm/cirrus/cirrus_main.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
index 7fa58ee..c0b9a29 100644
--- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
@@ -252,7 +252,7 @@ static int cirrus_fbdev_destroy(struct drm_device *dev,
drm_fb_helper_unregister_fbi(&gfbdev->helper);
if (gfb->obj) {
- drm_gem_object_unreference_unlocked(gfb->obj);
+ drm_gem_object_put_unlocked(gfb->obj);
gfb->obj = NULL;
}
diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c
index e7fc95f..b5f5285 100644
--- a/drivers/gpu/drm/cirrus/cirrus_main.c
+++ b/drivers/gpu/drm/cirrus/cirrus_main.c
@@ -18,7 +18,7 @@ static void cirrus_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct cirrus_framebuffer *cirrus_fb = to_cirrus_framebuffer(fb);
- drm_gem_object_unreference_unlocked(cirrus_fb->obj);
+ drm_gem_object_put_unlocked(cirrus_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
@@ -67,13 +67,13 @@ cirrus_user_framebuffer_create(struct drm_device *dev,
cirrus_fb = kzalloc(sizeof(*cirrus_fb), GFP_KERNEL);
if (!cirrus_fb) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return ERR_PTR(-ENOMEM);
}
ret = cirrus_framebuffer_init(dev, cirrus_fb, mode_cmd, obj);
if (ret) {
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
kfree(cirrus_fb);
return ERR_PTR(ret);
}
@@ -261,7 +261,7 @@ int cirrus_dumb_create(struct drm_file *file,
return ret;
ret = drm_gem_handle_create(file, gobj, &handle);
- drm_gem_object_unreference_unlocked(gobj);
+ drm_gem_object_put_unlocked(gobj);
if (ret)
return ret;
@@ -310,7 +310,7 @@ cirrus_dumb_mmap_offset(struct drm_file *file,
bo = gem_to_cirrus_bo(obj);
*offset = cirrus_bo_mmap_offset(bo);
- drm_gem_object_unreference_unlocked(obj);
+ drm_gem_object_put_unlocked(obj);
return 0;
}
--
2.7.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox