No longer true since commit 07f8d9bdb235 ("drm/qxl: add support for > 1 output"). qxl_num_crtc defaults to 4 and is configurable as a module parameter.
Signed-off-by: Gabriel Krisman Bertazi krisman@collabora.co.uk --- drivers/gpu/drm/qxl/qxl_fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c index e6ade6aab54c..4ba2d2f81bd3 100644 --- a/drivers/gpu/drm/qxl/qxl_fb.c +++ b/drivers/gpu/drm/qxl/qxl_fb.c @@ -399,7 +399,7 @@ int qxl_fbdev_init(struct qxl_device *qdev) &qxl_fb_helper_funcs);
ret = drm_fb_helper_init(qdev->ddev, &qfbdev->helper, - qxl_num_crtc /* num_crtc - QXL supports just 1 */, + qxl_num_crtc, QXLFB_CONN_LIMIT); if (ret) goto free;
qxl_device duplicates a pointer to struct device, which is not needed since we already have it in the drm_device structure. Clean it up.
Signed-off-by: Gabriel Krisman Bertazi krisman@collabora.co.uk --- drivers/gpu/drm/qxl/qxl_drv.h | 1 - drivers/gpu/drm/qxl/qxl_kms.c | 1 - drivers/gpu/drm/qxl/qxl_object.c | 16 ++++++++-------- drivers/gpu/drm/qxl/qxl_object.h | 8 ++++---- 4 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 0d877fa61162..a022de205134 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -242,7 +242,6 @@ void qxl_debugfs_remove_files(struct qxl_device *qdev); struct qxl_device;
struct qxl_device { - struct device *dev; struct drm_device *ddev; struct pci_dev *pdev; unsigned long flags; diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index d0666f5dccd6..7632e38493fc 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -122,7 +122,6 @@ int qxl_device_init(struct qxl_device *qdev, { int r, sb;
- qdev->dev = &pdev->dev; qdev->ddev = ddev; qdev->pdev = pdev; qdev->flags = flags; diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c index fa5440dc9a19..adaa131d1588 100644 --- a/drivers/gpu/drm/qxl/qxl_object.c +++ b/drivers/gpu/drm/qxl/qxl_object.c @@ -113,7 +113,7 @@ int qxl_bo_create(struct qxl_device *qdev, NULL, NULL, &qxl_ttm_bo_destroy); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) - dev_err(qdev->dev, + dev_err(qdev->ddev->dev, "object_init failed for (%lu, 0x%08X)\n", size, domain); return r; @@ -223,7 +223,7 @@ struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo)
int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr) { - struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; + struct drm_device *ddev = bo->gem_base.dev; int r;
if (bo->pin_count) { @@ -240,17 +240,17 @@ int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr) *gpu_addr = qxl_bo_gpu_offset(bo); } if (unlikely(r != 0)) - dev_err(qdev->dev, "%p pin failed\n", bo); + dev_err(ddev->dev, "%p pin failed\n", bo); return r; }
int qxl_bo_unpin(struct qxl_bo *bo) { - struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; + struct drm_device *ddev = bo->gem_base.dev; int r, i;
if (!bo->pin_count) { - dev_warn(qdev->dev, "%p unpin not necessary\n", bo); + dev_warn(ddev->dev, "%p unpin not necessary\n", bo); return 0; } bo->pin_count--; @@ -260,7 +260,7 @@ int qxl_bo_unpin(struct qxl_bo *bo) bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT; r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); if (unlikely(r != 0)) - dev_err(qdev->dev, "%p validate failed for unpin\n", bo); + dev_err(ddev->dev, "%p validate failed for unpin\n", bo); return r; }
@@ -270,9 +270,9 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
if (list_empty(&qdev->gem.objects)) return; - dev_err(qdev->dev, "Userspace still has active objects !\n"); + dev_err(qdev->ddev->dev, "Userspace still has active objects !\n"); list_for_each_entry_safe(bo, n, &qdev->gem.objects, list) { - dev_err(qdev->dev, "%p %p %lu %lu force free\n", + dev_err(qdev->ddev->dev, "%p %p %lu %lu force free\n", &bo->gem_base, bo, (unsigned long)bo->gem_base.size, *((unsigned long *)&bo->gem_base.refcount)); mutex_lock(&qdev->gem.mutex); diff --git a/drivers/gpu/drm/qxl/qxl_object.h b/drivers/gpu/drm/qxl/qxl_object.h index 4d8311373ba3..0374fd93f4d6 100644 --- a/drivers/gpu/drm/qxl/qxl_object.h +++ b/drivers/gpu/drm/qxl/qxl_object.h @@ -34,8 +34,8 @@ static inline int qxl_bo_reserve(struct qxl_bo *bo, bool no_wait) r = ttm_bo_reserve(&bo->tbo, true, no_wait, NULL); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) { - struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; - dev_err(qdev->dev, "%p reserve failed\n", bo); + struct drm_device *ddev = bo->gem_base.dev; + dev_err(ddev->dev, "%p reserve failed\n", bo); } return r; } @@ -70,8 +70,8 @@ static inline int qxl_bo_wait(struct qxl_bo *bo, u32 *mem_type, r = ttm_bo_reserve(&bo->tbo, true, no_wait, NULL); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) { - struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; - dev_err(qdev->dev, "%p reserve failed for wait\n", + struct drm_device *ddev = bo->gem_base.dev; + dev_err(ddev->dev, "%p reserve failed for wait\n", bo); } return r;
On 27 January 2017 at 01:05, Gabriel Krisman Bertazi krisman@collabora.co.uk wrote:
You can also drop pdev. It's in the same "boat" as dev.
-Emil
On 27 January 2017 at 01:23, Emil Velikov emil.l.velikov@gmail.com wrote:
... which you handled with 3/4. Pardon for the noise.
-Emil
qxl_device duplicates the pointer to struct pci_dev, which is not needed since we already have it in the drm_device structure. Clean it up.
Signed-off-by: Gabriel Krisman Bertazi krisman@collabora.co.uk --- drivers/gpu/drm/qxl/qxl_drv.h | 1 - drivers/gpu/drm/qxl/qxl_ioctl.c | 2 +- drivers/gpu/drm/qxl/qxl_kms.c | 1 - 3 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index a022de205134..05a96dde1916 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -243,7 +243,6 @@ struct qxl_device;
struct qxl_device { struct drm_device *ddev; - struct pci_dev *pdev; unsigned long flags;
resource_size_t vram_base, vram_size; diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c index 5a4c8c492683..7ad5070f2550 100644 --- a/drivers/gpu/drm/qxl/qxl_ioctl.c +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c @@ -375,7 +375,7 @@ static int qxl_clientcap_ioctl(struct drm_device *dev, void *data, byte = param->index / 8; idx = param->index % 8;
- if (qdev->pdev->revision < 4) + if (dev->pdev->revision < 4) return -ENOSYS;
if (byte >= 58) diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 7632e38493fc..52d1bc1bb0ca 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -123,7 +123,6 @@ int qxl_device_init(struct qxl_device *qdev, int r, sb;
qdev->ddev = ddev; - qdev->pdev = pdev; qdev->flags = flags;
mutex_init(&qdev->gem.mutex);
This is the recommended way to create the drm_device structure, according to DRM documentation.
Signed-off-by: Gabriel Krisman Bertazi krisman@collabora.co.uk --- drivers/gpu/drm/qxl/qxl_debugfs.c | 6 +++--- drivers/gpu/drm/qxl/qxl_display.c | 32 ++++++++++++++++---------------- drivers/gpu/drm/qxl/qxl_drv.c | 30 +++++++++--------------------- drivers/gpu/drm/qxl/qxl_drv.h | 6 +++--- drivers/gpu/drm/qxl/qxl_fb.c | 10 +++++----- drivers/gpu/drm/qxl/qxl_ioctl.c | 2 +- drivers/gpu/drm/qxl/qxl_irq.c | 2 +- drivers/gpu/drm/qxl/qxl_kms.c | 11 +++++++++-- drivers/gpu/drm/qxl/qxl_object.c | 8 ++++---- drivers/gpu/drm/qxl/qxl_ttm.c | 2 +- 10 files changed, 52 insertions(+), 57 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c index 057b2b547cac..d58751c94618 100644 --- a/drivers/gpu/drm/qxl/qxl_debugfs.c +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c @@ -133,8 +133,8 @@ int qxl_debugfs_add_files(struct qxl_device *qdev, qdev->debugfs_count = i; #if defined(CONFIG_DEBUG_FS) drm_debugfs_create_files(files, nfiles, - qdev->ddev->primary->debugfs_root, - qdev->ddev->primary); + qdev->ddev.primary->debugfs_root, + qdev->ddev.primary); #endif return 0; } @@ -147,7 +147,7 @@ void qxl_debugfs_remove_files(struct qxl_device *qdev) for (i = 0; i < qdev->debugfs_count; i++) { drm_debugfs_remove_files(qdev->debugfs[i].files, qdev->debugfs[i].num_files, - qdev->ddev->primary); + qdev->ddev.primary); } #endif } diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 416ade8566b7..1094cd33eb06 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -136,7 +136,7 @@ static int qxl_display_copy_rom_client_monitors_config(struct qxl_device *qdev)
static void qxl_update_offset_props(struct qxl_device *qdev) { - struct drm_device *dev = qdev->ddev; + struct drm_device *dev = &qdev->ddev; struct drm_connector *connector; struct qxl_output *output; struct qxl_head *head; @@ -156,7 +156,7 @@ static void qxl_update_offset_props(struct qxl_device *qdev) void qxl_display_read_client_monitors_config(struct qxl_device *qdev) {
- struct drm_device *dev = qdev->ddev; + struct drm_device *dev = &qdev->ddev; int status;
status = qxl_display_copy_rom_client_monitors_config(qdev); @@ -174,10 +174,10 @@ void qxl_display_read_client_monitors_config(struct qxl_device *qdev) drm_modeset_lock_all(dev); qxl_update_offset_props(qdev); drm_modeset_unlock_all(dev); - if (!drm_helper_hpd_irq_event(qdev->ddev)) { + if (!drm_helper_hpd_irq_event(dev)) { /* notify that the monitor configuration changed, to adjust at the arbitrary resolution */ - drm_kms_helper_hotplug_event(qdev->ddev); + drm_kms_helper_hotplug_event(dev); } }
@@ -1036,7 +1036,7 @@ static int qxl_mode_create_hotplug_mode_update_property(struct qxl_device *qdev) return 0;
qdev->hotplug_mode_update_property = - drm_property_create_range(qdev->ddev, DRM_MODE_PROP_IMMUTABLE, + drm_property_create_range(&qdev->ddev, DRM_MODE_PROP_IMMUTABLE, "hotplug_mode_update", 0, 1);
return 0; @@ -1175,28 +1175,28 @@ int qxl_modeset_init(struct qxl_device *qdev) int i; int ret;
- drm_mode_config_init(qdev->ddev); + drm_mode_config_init(&qdev->ddev);
ret = qxl_create_monitors_object(qdev); if (ret) return ret;
- qdev->ddev->mode_config.funcs = (void *)&qxl_mode_funcs; + qdev->ddev.mode_config.funcs = (void *)&qxl_mode_funcs;
/* modes will be validated against the framebuffer size */ - qdev->ddev->mode_config.min_width = 320; - qdev->ddev->mode_config.min_height = 200; - qdev->ddev->mode_config.max_width = 8192; - qdev->ddev->mode_config.max_height = 8192; + qdev->ddev.mode_config.min_width = 320; + qdev->ddev.mode_config.min_height = 200; + qdev->ddev.mode_config.max_width = 8192; + qdev->ddev.mode_config.max_height = 8192;
- qdev->ddev->mode_config.fb_base = qdev->vram_base; + qdev->ddev.mode_config.fb_base = qdev->vram_base;
- drm_mode_create_suggested_offset_properties(qdev->ddev); + drm_mode_create_suggested_offset_properties(&qdev->ddev); qxl_mode_create_hotplug_mode_update_property(qdev);
for (i = 0 ; i < qxl_num_crtc; ++i) { - qdev_crtc_init(qdev->ddev, i); - qdev_output_init(qdev->ddev, i); + qdev_crtc_init(&qdev->ddev, i); + qdev_output_init(&qdev->ddev, i); }
qdev->mode_info.mode_config_initialized = true; @@ -1214,7 +1214,7 @@ void qxl_modeset_fini(struct qxl_device *qdev)
qxl_destroy_monitors_object(qdev); if (qdev->mode_info.mode_config_initialized) { - drm_mode_config_cleanup(qdev->ddev); + drm_mode_config_cleanup(&qdev->ddev); qdev->mode_info.mode_config_initialized = false; } } diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c index 6e0f8a2d8ac9..8e17c241e63c 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.c +++ b/drivers/gpu/drm/qxl/qxl_drv.c @@ -62,7 +62,6 @@ static struct pci_driver qxl_pci_driver; static int qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { - struct drm_device *drm; struct qxl_device *qdev; int ret;
@@ -72,29 +71,19 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return -EINVAL; /* TODO: ENODEV ? */ }
- drm = drm_dev_alloc(&qxl_driver, &pdev->dev); - if (IS_ERR(drm)) - return -ENOMEM; - qdev = kzalloc(sizeof(struct qxl_device), GFP_KERNEL); - if (!qdev) { - ret = -ENOMEM; - goto free_drm_device; - } + if (!qdev) + return -ENOMEM;
ret = pci_enable_device(pdev); if (ret) - goto free_drm_device; - - drm->pdev = pdev; - pci_set_drvdata(pdev, drm); - drm->dev_private = qdev; + goto free_dev;
- ret = qxl_device_init(qdev, drm, pdev, ent->driver_data); + ret = qxl_device_init(qdev, &qxl_driver, pdev, ent->driver_data); if (ret) goto disable_pci;
- ret = drm_vblank_init(drm, 1); + ret = drm_vblank_init(&qdev->ddev, 1); if (ret) goto unload;
@@ -102,10 +91,10 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) if (ret) goto vblank_cleanup;
- drm_kms_helper_poll_init(qdev->ddev); + drm_kms_helper_poll_init(&qdev->ddev);
/* Complete initialization. */ - ret = drm_dev_register(drm, ent->driver_data); + ret = drm_dev_register(&qdev->ddev, ent->driver_data); if (ret) goto modeset_cleanup;
@@ -114,14 +103,13 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) modeset_cleanup: qxl_modeset_fini(qdev); vblank_cleanup: - drm_vblank_cleanup(drm); + drm_vblank_cleanup(&qdev->ddev); unload: qxl_device_fini(qdev); disable_pci: pci_disable_device(pdev); -free_drm_device: +free_dev: kfree(qdev); - kfree(drm); return ret; }
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 05a96dde1916..785c17b56f73 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -242,7 +242,7 @@ void qxl_debugfs_remove_files(struct qxl_device *qdev); struct qxl_device;
struct qxl_device { - struct drm_device *ddev; + struct drm_device ddev; unsigned long flags;
resource_size_t vram_base, vram_size; @@ -334,8 +334,8 @@ __printf(2,3) void qxl_io_log(struct qxl_device *qdev, const char *fmt, ...); extern const struct drm_ioctl_desc qxl_ioctls[]; extern int qxl_max_ioctl;
-int qxl_device_init(struct qxl_device *qdev, struct drm_device *ddev, - struct pci_dev *pdev, unsigned long flags); +int qxl_device_init(struct qxl_device *qdev, struct drm_driver *drv, + struct pci_dev *pdev, unsigned long flags); void qxl_device_fini(struct qxl_device *qdev);
int qxl_modeset_init(struct qxl_device *qdev); diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c index 4ba2d2f81bd3..53edfa498af5 100644 --- a/drivers/gpu/drm/qxl/qxl_fb.c +++ b/drivers/gpu/drm/qxl/qxl_fb.c @@ -268,7 +268,7 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
info->par = qfbdev;
- qxl_framebuffer_init(qdev->ddev, &qfbdev->qfb, &mode_cmd, gobj, + qxl_framebuffer_init(&qdev->ddev, &qfbdev->qfb, &mode_cmd, gobj, &qxlfb_fb_funcs);
fb = &qfbdev->qfb.base; @@ -297,7 +297,7 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev, sizes->fb_height);
/* setup aperture base/size for vesafb takeover */ - info->apertures->ranges[0].base = qdev->ddev->mode_config.fb_base; + info->apertures->ranges[0].base = qdev->ddev.mode_config.fb_base; info->apertures->ranges[0].size = qdev->vram_size;
info->fix.mmio_start = 0; @@ -395,10 +395,10 @@ int qxl_fbdev_init(struct qxl_device *qdev) spin_lock_init(&qfbdev->delayed_ops_lock); INIT_LIST_HEAD(&qfbdev->delayed_ops);
- drm_fb_helper_prepare(qdev->ddev, &qfbdev->helper, + drm_fb_helper_prepare(&qdev->ddev, &qfbdev->helper, &qxl_fb_helper_funcs);
- ret = drm_fb_helper_init(qdev->ddev, &qfbdev->helper, + ret = drm_fb_helper_init(&qdev->ddev, &qfbdev->helper, qxl_num_crtc, QXLFB_CONN_LIMIT); if (ret) @@ -426,7 +426,7 @@ void qxl_fbdev_fini(struct qxl_device *qdev) if (!qdev->mode_info.qfbdev) return;
- qxl_fbdev_destroy(qdev->ddev, qdev->mode_info.qfbdev); + qxl_fbdev_destroy(&qdev->ddev, qdev->mode_info.qfbdev); kfree(qdev->mode_info.qfbdev); qdev->mode_info.qfbdev = NULL; } diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c index 7ad5070f2550..0b82a87916ae 100644 --- a/drivers/gpu/drm/qxl/qxl_ioctl.c +++ b/drivers/gpu/drm/qxl/qxl_ioctl.c @@ -64,7 +64,7 @@ static int qxl_map_ioctl(struct drm_device *dev, void *data, struct qxl_device *qdev = dev->dev_private; struct drm_qxl_map *qxl_map = data;
- return qxl_mode_dumb_mmap(file_priv, qdev->ddev, qxl_map->handle, + return qxl_mode_dumb_mmap(file_priv, &qdev->ddev, qxl_map->handle, &qxl_map->offset); }
diff --git a/drivers/gpu/drm/qxl/qxl_irq.c b/drivers/gpu/drm/qxl/qxl_irq.c index 0bf1e20c6e44..23a40106ab53 100644 --- a/drivers/gpu/drm/qxl/qxl_irq.c +++ b/drivers/gpu/drm/qxl/qxl_irq.c @@ -90,7 +90,7 @@ int qxl_irq_init(struct qxl_device *qdev) atomic_set(&qdev->irq_received_cursor, 0); atomic_set(&qdev->irq_received_io_cmd, 0); qdev->irq_received_error = 0; - ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq); + ret = drm_irq_install(&qdev->ddev, qdev->ddev.pdev->irq); qdev->ram_header->int_mask = QXL_INTERRUPT_MASK; if (unlikely(ret != 0)) { DRM_ERROR("Failed installing irq: %d\n", ret); diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 52d1bc1bb0ca..2dcd5c14cb56 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -116,13 +116,20 @@ static void qxl_gc_work(struct work_struct *work) }
int qxl_device_init(struct qxl_device *qdev, - struct drm_device *ddev, + struct drm_driver *drv, struct pci_dev *pdev, unsigned long flags) { int r, sb;
- qdev->ddev = ddev; + r = drm_dev_init(&qdev->ddev, drv, &pdev->dev); + if (r) + return r; + + qdev->ddev.pdev = pdev; + pci_set_drvdata(pdev, &qdev->ddev); + qdev->ddev.dev_private = qdev; + qdev->flags = flags;
mutex_init(&qdev->gem.mutex); diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c index adaa131d1588..dbc13510a1f8 100644 --- a/drivers/gpu/drm/qxl/qxl_object.c +++ b/drivers/gpu/drm/qxl/qxl_object.c @@ -93,7 +93,7 @@ int qxl_bo_create(struct qxl_device *qdev, if (bo == NULL) return -ENOMEM; size = roundup(size, PAGE_SIZE); - r = drm_gem_object_init(qdev->ddev, &bo->gem_base, size); + r = drm_gem_object_init(&qdev->ddev, &bo->gem_base, size); if (unlikely(r)) { kfree(bo); return r; @@ -113,7 +113,7 @@ int qxl_bo_create(struct qxl_device *qdev, NULL, NULL, &qxl_ttm_bo_destroy); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) - dev_err(qdev->ddev->dev, + dev_err(qdev->ddev.dev, "object_init failed for (%lu, 0x%08X)\n", size, domain); return r; @@ -270,9 +270,9 @@ void qxl_bo_force_delete(struct qxl_device *qdev)
if (list_empty(&qdev->gem.objects)) return; - dev_err(qdev->ddev->dev, "Userspace still has active objects !\n"); + dev_err(qdev->ddev.dev, "Userspace still has active objects !\n"); list_for_each_entry_safe(bo, n, &qdev->gem.objects, list) { - dev_err(qdev->ddev->dev, "%p %p %lu %lu force free\n", + dev_err(qdev->ddev.dev, "%p %p %lu %lu force free\n", &bo->gem_base, bo, (unsigned long)bo->gem_base.size, *((unsigned long *)&bo->gem_base.refcount)); mutex_lock(&qdev->gem.mutex); diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c index bc1c896bc5e1..a8213b2b93e9 100644 --- a/drivers/gpu/drm/qxl/qxl_ttm.c +++ b/drivers/gpu/drm/qxl/qxl_ttm.c @@ -409,7 +409,7 @@ int qxl_ttm_init(struct qxl_device *qdev) r = ttm_bo_device_init(&qdev->mman.bdev, qdev->mman.bo_global_ref.ref.object, &qxl_bo_driver, - qdev->ddev->anon_inode->i_mapping, + qdev->ddev.anon_inode->i_mapping, DRM_FILE_PAGE_OFFSET, 0); if (r) { DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
On Thu, Jan 26, 2017 at 11:05:45PM -0200, Gabriel Krisman Bertazi wrote:
btw if you're super-bored could do an audit to make sure all drivers init crtc before calling this function. And then removing this argument and replacing it with dev->mode_config.num_crtcs. -Daniel
On Thu, Jan 26, 2017 at 11:05:45PM -0200, Gabriel Krisman Bertazi wrote:
Since I ended up reading it all anyway, on the entire series:
Acked-by: Daniel Vetter daniel.vetter@ffwll.ch
On Do, 2017-01-26 at 23:05 -0200, Gabriel Krisman Bertazi wrote:
Picked up patches 1-3 for drm-qemu branch.
Patch 4 doesn't apply and seems to have a dependency on out-of-tree changes, git am fails to do a 3way merge due to missing commits (trying to apply to 4.10-rc5).
cheers, Gerd
On Fri, Jan 27, 2017 at 09:20:42AM +0100, Gerd Hoffmann wrote:
It needs the demidlayer that's already in drm-next ... -Daniel
Daniel Vetter daniel@ffwll.ch writes:
Thank you guys for the review.
Yes, my patches were based on drm-misc next branch, I should have mentioned that in the original patch. It actually depends on stuff already in drm-misc, so I won't be able to rebase just this to drm-qemu tree.
Do you want to merge from drm-misc or should we push this one directly via drm-misc?
On Fri, Jan 27, 2017 at 02:41:29PM -0200, Gabriel Krisman Bertazi wrote:
I guess I could ask Gerd whether we wants to be part of the experiment to maintain small drivers in drm-misc, to avoid these kinds of coordination issues? Since some of the patches are in drm-misc and some in the qemu tree we need to wait for them to resync now (I'll send out another drm-misc pull later today). -Daniel
Hi,
Sounds reasonable. There isn't much activity, that's why I've grouped all four qemu drivers into a single branch already.
The docs throw 403 access denied though atm. So, how would that process look like then? Would you merge my drm-qemu pulls into drm-misc? Or would I commit to drm-misc directly?
cheers, Gerd
On Mon, Jan 30, 2017 at 10:41:18AM +0100, Gerd Hoffmann wrote:
drm-misc runs with the committer model, i.e. a few maintainers to do pull requests and backmerges, a big pile of people directly pushing patches. Someone wreaked the entire 01.org domain, but you can get at all the tooling and documentation with
git://anongit.freedesktop.org/drm-intel maintainer-tools
And then run make in there. We're not yet clear how exactly drivers within drm-misc would look like (wrt which drivers and how much review and stuff like that), hence the RFC. -Daniel
Hi,
drm-misc runs with the committer model, i.e. a few maintainers to do pull requests and backmerges, a big pile of people directly pushing patches.
[ looked at docs too meanwhile ]
Sounds good. I guess switching over simplifies things for all of us. We'll avoid issues like the one at hand. Patch flow would be faster too. Right now I'm only doing 1-2 drm-qemu pull requests per kernel release due to low patch volume even for all four qemu drivers combined.
Hmm. On a quick glance most of dim (except apply-patch) seems to be more useful for maintainers which do merges etc, not so much for committers.
I'm used to use https://github.com/stefanha/patches for qemu, and started using it for drm-qemu too. It makes applying patches easier. It manages a patch database, using notmuch mail storage, and can apply patches and patch series from the patch database. That way I don't have to save the patches as mbox somewhere. The tool also picks up [Reviewed,Tested,Acked}-by lines from replies, and it stores the message id (but unlike dim it doesn't build a patchwork link out of it).
See bfac9f4fb4d87881375ccdc5c85d5ad59f2f115d for example.
Would that format be acceptable for drm-misc?
Ok. How quickly could I start using drm-misc? I have some pending patches for the 4.11 merge window. Any chance I can push them through drm-misc-next? Or should I better send a pull req to Dave?
cheers, Gerd
PS: I'm kraxel@freedesktop.org
On Mon, Jan 30, 2017 at 06:14:49PM +0100, Gerd Hoffmann wrote:
Yeah, with dim I do send out pull requests every 1-2 weeks, depending upon how much pending stuff there is.
That sha1 isn't in linux-next, so no idea. But in principle, yes dim isn't all that much about handling patches, and much more about handling branches. One part that imo really should stick around is the drm-tip integration tree rebuilding. That allows us to distribute conflict handling (e.g. between drm-misc-fixes and drm-misc-next), and with more people and more drivers in drm-misc I expect more conflicts.
Would that format be acceptable for drm-misc?
The other bit is that dim is a nice place for catching obvious screw-ups. E.g. for drm-intel it checks that the patch only touches i915, and if not if there's an ack from Dave on it. So I think standardizing on that tool has benefits (as long as we can't just enforce such simple checks with CI on the server side).
But dim apply-branch is a supposed to be a drop-in replacement for git apply-mbox, so should be simple to integrate into another set of scripts to manage the mails. And if there's changes to dim needed to make that happen, we can do that (we push patches to it at a regular pace).
If you want you can get started right away. I plan to type some small docs for this experiment, but the only thing you need is an fdo account with drm-misc commit rights. Simplest to ping me (and fdo admins) on #dri-devel. -Daniel
Hi,
Ok, good point. I see there is a separate "dim rebuild-top" command, so that should be doable no matter how I actually apply the patches.
Trying to run dim throws errors at me though:
kraxel@nilsson ~/tmp/maintainer-tools (maintainer-tools)# ./dim help ./dim: line 1602: declare: -n: invalid option declare: usage: declare [-aAfFgilrtux] [-p] [name[=value] ...] kraxel@nilsson ~/tmp/maintainer-tools (maintainer-tools)# bash --version GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
The patches tool prepares a mbox file, then runs "git am". Shouldn't be that hard to make it configurable ...
Ok.
cheers, Gerd
On Tue, Jan 31, 2017 at 09:55:46AM +0100, Gerd Hoffmann wrote:
Hm, this is strange. I have
GNU bash, version 4.4.5(1)-release (x86_64-pc-linux-gnu)
here, but Jani is on debian stable so I guess even older bash than yours. Adding Jani, maybe he has an idea. -Daniel
On Tue, 31 Jan 2017, Gerd Hoffmann kraxel@redhat.com wrote:
declare -n introduced in bash 4.3 is needed for alias support. Workaround at [1].
[1] https://lists.freedesktop.org/archives/intel-gfx/2017-January/118474.html
N.b. dim currently doesn't do all its magic, such as adding Link: tag, if you apply more than one patch at a time. If you apply a multi-patch mbox, only the last one will get the Link: tag.
BR, Jani.
Hi,
Works for me. Thanks.
Hmm, that is bad.
One of the things the patches tool actually is very good at is applying a patch series. Grab the patches from the list, put them into a mbox file, in the correct order (which is a PITA to do manually with a MUA, especially in case there are replies with reviewed-by, ...).
Does dim detect that a Link: tag is already present and doesn't add another one then?
cheers, Gerd
On Tue, 31 Jan 2017, Gerd Hoffmann kraxel@redhat.com wrote:
Thanks, pushed.
Agreed.
Oh, it's a Notmuch based tool? Cool. I should add that to the Notmuch wiki.
The notmuch-emacs interface lets you pipe all the open messages in a thread using "c-u |". So you can expand/collapse messages as you like, and pipe them all as mbox. But that doesn't work either because dim can't properly handle it. I have a vested interest to fix this, but I haven't gotten around to it...
Does dim detect that a Link: tag is already present and doesn't add another one then?
Nope. Patches welcome. ;)
BR, Jani.
dri-devel@lists.freedesktop.org