Hi All,
This patch-series addresses the 2 TODO / FIXME items recently reported by Daniel and after that moves the vboxvideo driver out of staging.
Note this applies on top of drm-misc-next + this patch: https://patchwork.kernel.org/patch/10824279/
Currently that patch is not yet in drm-misc, I can push it myself before pushing the rest of this series (after review).
Greg, the intent is for this series to be merged upstream through drm-misc, may we have your Acked-by for that please?
Regards,
Hans
Drop the initial_mode_queried workaround for kms clients which do not support hotplug, all kms clients should be able to deal with hotplug.
Suggested-by: Daniel Vetter daniel.vetter@ffwll.ch Signed-off-by: Hans de Goede hdegoede@redhat.com --- drivers/staging/vboxvideo/TODO | 3 --- drivers/staging/vboxvideo/vbox_drv.c | 25 ------------------------- drivers/staging/vboxvideo/vbox_drv.h | 6 ------ drivers/staging/vboxvideo/vbox_main.c | 6 +++--- drivers/staging/vboxvideo/vbox_mode.c | 21 ++------------------- 5 files changed, 5 insertions(+), 56 deletions(-)
diff --git a/drivers/staging/vboxvideo/TODO b/drivers/staging/vboxvideo/TODO index 7f97c47a4042..2e0f99c3f10c 100644 --- a/drivers/staging/vboxvideo/TODO +++ b/drivers/staging/vboxvideo/TODO @@ -1,8 +1,5 @@ TODO: -Get a full review from the drm-maintainers on dri-devel done on this driver --Drop all the logic around initial_mode_queried, the master_set and - master_drop callbacks and everything related to this. kms clients can handle - hotplugs. -Extend this TODO with the results of that review
Please send any patches to Greg Kroah-Hartman gregkh@linuxfoundation.org, diff --git a/drivers/staging/vboxvideo/vbox_drv.c b/drivers/staging/vboxvideo/vbox_drv.c index e7755a179850..fb6a0f0b8167 100644 --- a/drivers/staging/vboxvideo/vbox_drv.c +++ b/drivers/staging/vboxvideo/vbox_drv.c @@ -200,36 +200,11 @@ static const struct file_operations vbox_fops = { .read = drm_read, };
-static int vbox_master_set(struct drm_device *dev, - struct drm_file *file_priv, bool from_open) -{ - struct vbox_private *vbox = dev->dev_private; - - /* - * We do not yet know whether the new owner can handle hotplug, so we - * do not advertise dynamic modes on the first query and send a - * tentative hotplug notification after that to see if they query again. - */ - vbox->initial_mode_queried = false; - - return 0; -} - -static void vbox_master_drop(struct drm_device *dev, struct drm_file *file_priv) -{ - struct vbox_private *vbox = dev->dev_private; - - /* See vbox_master_set() */ - vbox->initial_mode_queried = false; -} - static struct drm_driver driver = { .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
.lastclose = drm_fb_helper_lastclose, - .master_set = vbox_master_set, - .master_drop = vbox_master_drop,
.fops = &vbox_fops, .irq_handler = vbox_irq_handler, diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h index 77f2a4e9000e..6dea8bf5f045 100644 --- a/drivers/staging/vboxvideo/vbox_drv.h +++ b/drivers/staging/vboxvideo/vbox_drv.h @@ -83,12 +83,6 @@ struct vbox_private { } ttm;
struct mutex hw_mutex; /* protects modeset and accel/vbva accesses */ - /* - * We decide whether or not user-space supports display hot-plug - * depending on whether they react to a hot-plug event after the initial - * mode query. - */ - bool initial_mode_queried; struct work_struct hotplug_work; u32 input_mapping_width; u32 input_mapping_height; diff --git a/drivers/staging/vboxvideo/vbox_main.c b/drivers/staging/vboxvideo/vbox_main.c index e1fb70a42d32..f4d02de5518a 100644 --- a/drivers/staging/vboxvideo/vbox_main.c +++ b/drivers/staging/vboxvideo/vbox_main.c @@ -32,9 +32,9 @@ void vbox_report_caps(struct vbox_private *vbox) u32 caps = VBVACAPS_DISABLE_CURSOR_INTEGRATION | VBVACAPS_IRQ | VBVACAPS_USE_VBVA_ONLY;
- if (vbox->initial_mode_queried) - caps |= VBVACAPS_VIDEO_MODE_HINTS; - + /* The host only accepts VIDEO_MODE_HINTS if it is send separately. */ + hgsmi_send_caps_info(vbox->guest_pool, caps); + caps |= VBVACAPS_VIDEO_MODE_HINTS; hgsmi_send_caps_info(vbox->guest_pool, caps); }
diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c index 213551394495..620a6e38f71f 100644 --- a/drivers/staging/vboxvideo/vbox_mode.c +++ b/drivers/staging/vboxvideo/vbox_mode.c @@ -736,29 +736,12 @@ static int vbox_get_modes(struct drm_connector *connector)
vbox_connector = to_vbox_connector(connector); vbox = connector->dev->dev_private; - /* - * Heuristic: we do not want to tell the host that we support dynamic - * resizing unless we feel confident that the user space client using - * the video driver can handle hot-plug events. So the first time modes - * are queried after a "master" switch we tell the host that we do not, - * and immediately after we send the client a hot-plug notification as - * a test to see if they will respond and query again. - * That is also the reason why capabilities are reported to the host at - * this place in the code rather than elsewhere. - * We need to report the flags location before reporting the IRQ - * capability. - */ + hgsmi_report_flags_location(vbox->guest_pool, GUEST_HEAP_OFFSET(vbox) + HOST_FLAGS_OFFSET); if (vbox_connector->vbox_crtc->crtc_id == 0) vbox_report_caps(vbox); - if (!vbox->initial_mode_queried) { - if (vbox_connector->vbox_crtc->crtc_id == 0) { - vbox->initial_mode_queried = true; - vbox_report_hotplug(vbox); - } - return drm_add_modes_noedid(connector, 800, 600); - } + num_modes = drm_add_modes_noedid(connector, 2560, 1600); preferred_width = vbox_connector->mode_hint.width ? vbox_connector->mode_hint.width : 1024;
Refactor vbox_update_mode_hints to no longer use the obsolete drm_modeset_lock_all() and switch it over to drm_connector_list_iter instead of directly accessing the list using list_for_each_entry.
Signed-off-by: Hans de Goede hdegoede@redhat.com --- drivers/staging/vboxvideo/vbox_irq.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c index 89944134ea86..16a1e29f5292 100644 --- a/drivers/staging/vboxvideo/vbox_irq.c +++ b/drivers/staging/vboxvideo/vbox_irq.c @@ -105,6 +105,7 @@ static void validate_or_set_position_hints(struct vbox_private *vbox) /* Query the host for the most recent video mode hints. */ static void vbox_update_mode_hints(struct vbox_private *vbox) { + struct drm_connector_list_iter conn_iter; struct drm_device *dev = &vbox->ddev; struct drm_connector *connector; struct vbox_connector *vbox_conn; @@ -122,13 +123,10 @@ static void vbox_update_mode_hints(struct vbox_private *vbox) }
validate_or_set_position_hints(vbox); - drm_modeset_lock_all(dev); - /* - * FIXME: this needs to use drm_connector_list_iter and some real - * locking for the actual data it changes, not the deprecated - * drm_modeset_lock_all() shotgun approach. - */ - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); + drm_connector_list_iter_begin(dev, &conn_iter); + drm_for_each_connector_iter(connector, &conn_iter) { vbox_conn = to_vbox_connector(connector);
hints = &vbox->last_mode_hints[vbox_conn->vbox_crtc->crtc_id]; @@ -157,7 +155,8 @@ static void vbox_update_mode_hints(struct vbox_private *vbox)
vbox_conn->vbox_crtc->disconnected = disconnected; } - drm_modeset_unlock_all(dev); + drm_connector_list_iter_end(&conn_iter); + drm_modeset_unlock(&dev->mode_config.connection_mutex); }
static void vbox_hotplug_worker(struct work_struct *work)
The vboxvideo driver has been converted to the atomic modesetting API and all FIXME and TODO items have been fixed, so it is time to move it out of staging.
Signed-off-by: Hans de Goede hdegoede@redhat.com --- drivers/gpu/drm/Kconfig | 2 ++ drivers/gpu/drm/Makefile | 1 + drivers/{staging => gpu/drm}/vboxvideo/Kconfig | 0 drivers/{staging => gpu/drm}/vboxvideo/Makefile | 0 drivers/{staging => gpu/drm}/vboxvideo/hgsmi_base.c | 0 drivers/{staging => gpu/drm}/vboxvideo/hgsmi_ch_setup.h | 0 drivers/{staging => gpu/drm}/vboxvideo/hgsmi_channels.h | 0 drivers/{staging => gpu/drm}/vboxvideo/hgsmi_defs.h | 0 drivers/{staging => gpu/drm}/vboxvideo/modesetting.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_drv.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_drv.h | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_fb.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_hgsmi.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_irq.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_main.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_mode.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_prime.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vbox_ttm.c | 0 drivers/{staging => gpu/drm}/vboxvideo/vboxvideo.h | 0 drivers/{staging => gpu/drm}/vboxvideo/vboxvideo_guest.h | 0 drivers/{staging => gpu/drm}/vboxvideo/vboxvideo_vbe.h | 0 drivers/{staging => gpu/drm}/vboxvideo/vbva_base.c | 0 drivers/staging/Kconfig | 2 -- drivers/staging/Makefile | 1 - drivers/staging/vboxvideo/TODO | 7 ------- 25 files changed, 3 insertions(+), 10 deletions(-) rename drivers/{staging => gpu/drm}/vboxvideo/Kconfig (100%) rename drivers/{staging => gpu/drm}/vboxvideo/Makefile (100%) rename drivers/{staging => gpu/drm}/vboxvideo/hgsmi_base.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/hgsmi_ch_setup.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/hgsmi_channels.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/hgsmi_defs.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/modesetting.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_drv.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_drv.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_fb.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_hgsmi.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_irq.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_main.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_mode.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_prime.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbox_ttm.c (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vboxvideo.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vboxvideo_guest.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vboxvideo_vbe.h (100%) rename drivers/{staging => gpu/drm}/vboxvideo/vbva_base.c (100%) delete mode 100644 drivers/staging/vboxvideo/TODO
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 4385f00e1d05..2aa26dd23271 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -333,6 +333,8 @@ source "drivers/gpu/drm/tve200/Kconfig"
source "drivers/gpu/drm/xen/Kconfig"
+source "drivers/gpu/drm/vboxvideo/Kconfig" + # Keep legacy drivers last
menuconfig DRM_LEGACY diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index ce8d1d384319..4d3e101c9f9d 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -109,3 +109,4 @@ obj-$(CONFIG_DRM_TINYDRM) += tinydrm/ obj-$(CONFIG_DRM_PL111) += pl111/ obj-$(CONFIG_DRM_TVE200) += tve200/ obj-$(CONFIG_DRM_XEN) += xen/ +obj-$(CONFIG_DRM_VBOXVIDEO) += vboxvideo/ diff --git a/drivers/staging/vboxvideo/Kconfig b/drivers/gpu/drm/vboxvideo/Kconfig similarity index 100% rename from drivers/staging/vboxvideo/Kconfig rename to drivers/gpu/drm/vboxvideo/Kconfig diff --git a/drivers/staging/vboxvideo/Makefile b/drivers/gpu/drm/vboxvideo/Makefile similarity index 100% rename from drivers/staging/vboxvideo/Makefile rename to drivers/gpu/drm/vboxvideo/Makefile diff --git a/drivers/staging/vboxvideo/hgsmi_base.c b/drivers/gpu/drm/vboxvideo/hgsmi_base.c similarity index 100% rename from drivers/staging/vboxvideo/hgsmi_base.c rename to drivers/gpu/drm/vboxvideo/hgsmi_base.c diff --git a/drivers/staging/vboxvideo/hgsmi_ch_setup.h b/drivers/gpu/drm/vboxvideo/hgsmi_ch_setup.h similarity index 100% rename from drivers/staging/vboxvideo/hgsmi_ch_setup.h rename to drivers/gpu/drm/vboxvideo/hgsmi_ch_setup.h diff --git a/drivers/staging/vboxvideo/hgsmi_channels.h b/drivers/gpu/drm/vboxvideo/hgsmi_channels.h similarity index 100% rename from drivers/staging/vboxvideo/hgsmi_channels.h rename to drivers/gpu/drm/vboxvideo/hgsmi_channels.h diff --git a/drivers/staging/vboxvideo/hgsmi_defs.h b/drivers/gpu/drm/vboxvideo/hgsmi_defs.h similarity index 100% rename from drivers/staging/vboxvideo/hgsmi_defs.h rename to drivers/gpu/drm/vboxvideo/hgsmi_defs.h diff --git a/drivers/staging/vboxvideo/modesetting.c b/drivers/gpu/drm/vboxvideo/modesetting.c similarity index 100% rename from drivers/staging/vboxvideo/modesetting.c rename to drivers/gpu/drm/vboxvideo/modesetting.c diff --git a/drivers/staging/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_drv.c rename to drivers/gpu/drm/vboxvideo/vbox_drv.c diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/gpu/drm/vboxvideo/vbox_drv.h similarity index 100% rename from drivers/staging/vboxvideo/vbox_drv.h rename to drivers/gpu/drm/vboxvideo/vbox_drv.h diff --git a/drivers/staging/vboxvideo/vbox_fb.c b/drivers/gpu/drm/vboxvideo/vbox_fb.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_fb.c rename to drivers/gpu/drm/vboxvideo/vbox_fb.c diff --git a/drivers/staging/vboxvideo/vbox_hgsmi.c b/drivers/gpu/drm/vboxvideo/vbox_hgsmi.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_hgsmi.c rename to drivers/gpu/drm/vboxvideo/vbox_hgsmi.c diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/gpu/drm/vboxvideo/vbox_irq.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_irq.c rename to drivers/gpu/drm/vboxvideo/vbox_irq.c diff --git a/drivers/staging/vboxvideo/vbox_main.c b/drivers/gpu/drm/vboxvideo/vbox_main.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_main.c rename to drivers/gpu/drm/vboxvideo/vbox_main.c diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_mode.c rename to drivers/gpu/drm/vboxvideo/vbox_mode.c diff --git a/drivers/staging/vboxvideo/vbox_prime.c b/drivers/gpu/drm/vboxvideo/vbox_prime.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_prime.c rename to drivers/gpu/drm/vboxvideo/vbox_prime.c diff --git a/drivers/staging/vboxvideo/vbox_ttm.c b/drivers/gpu/drm/vboxvideo/vbox_ttm.c similarity index 100% rename from drivers/staging/vboxvideo/vbox_ttm.c rename to drivers/gpu/drm/vboxvideo/vbox_ttm.c diff --git a/drivers/staging/vboxvideo/vboxvideo.h b/drivers/gpu/drm/vboxvideo/vboxvideo.h similarity index 100% rename from drivers/staging/vboxvideo/vboxvideo.h rename to drivers/gpu/drm/vboxvideo/vboxvideo.h diff --git a/drivers/staging/vboxvideo/vboxvideo_guest.h b/drivers/gpu/drm/vboxvideo/vboxvideo_guest.h similarity index 100% rename from drivers/staging/vboxvideo/vboxvideo_guest.h rename to drivers/gpu/drm/vboxvideo/vboxvideo_guest.h diff --git a/drivers/staging/vboxvideo/vboxvideo_vbe.h b/drivers/gpu/drm/vboxvideo/vboxvideo_vbe.h similarity index 100% rename from drivers/staging/vboxvideo/vboxvideo_vbe.h rename to drivers/gpu/drm/vboxvideo/vboxvideo_vbe.h diff --git a/drivers/staging/vboxvideo/vbva_base.c b/drivers/gpu/drm/vboxvideo/vbva_base.c similarity index 100% rename from drivers/staging/vboxvideo/vbva_base.c rename to drivers/gpu/drm/vboxvideo/vbva_base.c diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index e4f608815c05..ba960e6cb62c 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -98,8 +98,6 @@ source "drivers/staging/greybus/Kconfig"
source "drivers/staging/vc04_services/Kconfig"
-source "drivers/staging/vboxvideo/Kconfig" - source "drivers/staging/pi433/Kconfig"
source "drivers/staging/mt7621-pci/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 5868631e8f1b..bb25cc11fc4a 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -39,7 +39,6 @@ obj-$(CONFIG_MOST) += most/ obj-$(CONFIG_KS7010) += ks7010/ obj-$(CONFIG_GREYBUS) += greybus/ obj-$(CONFIG_BCM2835_VCHIQ) += vc04_services/ -obj-$(CONFIG_DRM_VBOXVIDEO) += vboxvideo/ obj-$(CONFIG_PI433) += pi433/ obj-$(CONFIG_SOC_MT7621) += mt7621-pci/ obj-$(CONFIG_SOC_MT7621) += mt7621-pinctrl/ diff --git a/drivers/staging/vboxvideo/TODO b/drivers/staging/vboxvideo/TODO deleted file mode 100644 index 2e0f99c3f10c..000000000000 --- a/drivers/staging/vboxvideo/TODO +++ /dev/null @@ -1,7 +0,0 @@ -TODO: --Get a full review from the drm-maintainers on dri-devel done on this driver --Extend this TODO with the results of that review - -Please send any patches to Greg Kroah-Hartman gregkh@linuxfoundation.org, -Hans de Goede hdegoede@redhat.com, Michael Thayer michael.thayer@oracle.com -and dri-devel@lists.freedesktop.org .
On Mon, Mar 04, 2019 at 05:47:21PM +0100, Hans de Goede wrote:
Hi All,
This patch-series addresses the 2 TODO / FIXME items recently reported by Daniel and after that moves the vboxvideo driver out of staging.
Note this applies on top of drm-misc-next + this patch: https://patchwork.kernel.org/patch/10824279/
Currently that patch is not yet in drm-misc, I can push it myself before pushing the rest of this series (after review).
Greg, the intent is for this series to be merged upstream through drm-misc, may we have your Acked-by for that please?
For all 3:
Acked-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
On Tue, Mar 05, 2019 at 08:03:23AM +0100, Greg Kroah-Hartman wrote:
On Mon, Mar 04, 2019 at 05:47:21PM +0100, Hans de Goede wrote:
Hi All,
This patch-series addresses the 2 TODO / FIXME items recently reported by Daniel and after that moves the vboxvideo driver out of staging.
Note this applies on top of drm-misc-next + this patch: https://patchwork.kernel.org/patch/10824279/
Currently that patch is not yet in drm-misc, I can push it myself before pushing the rest of this series (after review).
Greg, the intent is for this series to be merged upstream through drm-misc, may we have your Acked-by for that please?
For all 3:
Acked-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
Please add a patch 4 to add a MAINTAINERS entry pointing at the drm-misc git repo (and I guess Hans as maintainer/reviewer). With that, on all 4 patches:
Acked-by: Daniel Vetter daniel.vetter@ffwll.ch
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi,
On 11-03-19 14:09, Daniel Vetter wrote:
On Tue, Mar 05, 2019 at 08:03:23AM +0100, Greg Kroah-Hartman wrote:
On Mon, Mar 04, 2019 at 05:47:21PM +0100, Hans de Goede wrote:
Hi All,
This patch-series addresses the 2 TODO / FIXME items recently reported by Daniel and after that moves the vboxvideo driver out of staging.
Note this applies on top of drm-misc-next + this patch: https://patchwork.kernel.org/patch/10824279/
Currently that patch is not yet in drm-misc, I can push it myself before pushing the rest of this series (after review).
Greg, the intent is for this series to be merged upstream through drm-misc, may we have your Acked-by for that please?
For all 3:
Acked-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
Please add a patch 4 to add a MAINTAINERS entry pointing at the drm-misc git repo (and I guess Hans as maintainer/reviewer). With that, on all 4 patches:
Acked-by: Daniel Vetter daniel.vetter@ffwll.ch
Thank you. I agree this needs a MAINTAINERS entry.
Note I will send out the MAINTAINRS / 4th patch now, so that patchwork picks it up and dim can extract a patchwork URL.
Regards,
Hans
dri-devel@lists.freedesktop.org