* [PATCH] vhost: fix VHOST_GET_BACKEND_FEATURES ioctl request definition
From: Gleb Fotengauer-Malinovskiy @ 2018-09-03 17:59 UTC (permalink / raw)
To: Michael S. Tsirkin, Jason Wang, David S. Miller, kvm,
virtualization, netdev, linux-kernel
The _IOC_READ flag fits this ioctl request more because this request
actually only writes to, but doesn't read from userspace.
See NOTEs in include/uapi/asm-generic/ioctl.h for more information.
Fixes: 429711aec282 ("vhost: switch to use new message format")
Signed-off-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
---
include/uapi/linux/vhost.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h
index b1e22c40c4b6..84c3de89696a 100644
--- a/include/uapi/linux/vhost.h
+++ b/include/uapi/linux/vhost.h
@@ -176,7 +176,7 @@ struct vhost_memory {
#define VHOST_BACKEND_F_IOTLB_MSG_V2 0x1
#define VHOST_SET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x25, __u64)
-#define VHOST_GET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x26, __u64)
+#define VHOST_GET_BACKEND_FEATURES _IOR(VHOST_VIRTIO, 0x26, __u64)
/* VHOST_NET specific defines */
--
glebfm
^ permalink raw reply related
* Re: [PATCH v3 00/13] remove_conflicting_framebuffers() cleanup
From: Daniel Vetter @ 2018-09-03 16:26 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz
Cc: linux-fbdev, David Airlie, dri-devel, Michał Mirosław,
Alex Deucher, Thierry Reding, amd-gfx, Daniel Vetter, linux-tegra,
Dave Airlie, Maxime Ripard, Jonathan Hunter, virtualization,
linux-arm-kernel
In-Reply-To: <1705932.lAR3QV8q47@amdc3058>
On Mon, Sep 03, 2018 at 01:31:34PM +0200, Bartlomiej Zolnierkiewicz wrote:
> On Monday, September 03, 2018 09:43:15 AM Daniel Vetter wrote:
> > On Sat, Sep 01, 2018 at 04:08:41PM +0200, Michał Mirosław wrote:
> > > This series cleans up duplicated code for replacing firmware FB
> > > driver with proper DRI driver and adds handover support to
> > > Tegra driver.
> > >
> > > This is a sligtly updated version of a series sent on 24 Nov 2017.
> > >
> > > ---
> > > v2:
> > > - rebased on current drm-next
> > > - dropped staging/sm750fb changes
> > > - added kernel docs for DRM helpers
> > > v3:
> > > - move kerneldoc to fbdev, where functions are implemented
> > > - split kerneldoc for remove_conflicting_framebuffers()
> >
> > Ah, that's not quite what I had in mind. I think having the docs (also) in
> > the drm helpers would be good, since that's where drm people will look,
> > and that's the function they'll call. I just wanted you to split the fbdev
> > and drm parts into 2 patches (since those are two different maintainers).
> >
> > Anyway, this is ok too, so imo ready for merging. If you can resurrect the
> > drm docs (with a patch title of "drm/fb-helper: document fbdev remove
> > functions" or similar) that would be great.
> >
> > Only thing we need for merging now is the ack from Bartlomiej.
>
> For the whole patchset:
>
> Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Thanks, entire patch set applied to drm-misc-next for 4.20.
-Daniel
>
> > -Daniel
> >
> > > - propagate return value in remove_conflicting_pci_framebuffers()
> > >
> > > ---
> > > Michał Mirosław (13):
> > > fbdev: show fbdev number for debugging
> > > fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
> > > fbdev: add kerneldoc do remove_conflicting_framebuffers()
> > > fbdev: add remove_conflicting_pci_framebuffers()
> > > drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
> > > drm/bochs: use simpler remove_conflicting_pci_framebuffers()
> > > drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
> > > drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
> > > drm/radeon: use simpler remove_conflicting_pci_framebuffers()
> > > drm/virtio: use simpler remove_conflicting_pci_framebuffers()
> > > drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
> > > drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
> > > drm/tegra: kick out simplefb
> > >
> > > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +--------
> > > drivers/gpu/drm/bochs/bochs_drv.c | 18 +------
> > > drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +--------
> > > drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +-------
> > > drivers/gpu/drm/mgag200/mgag200_main.c | 9 ----
> > > drivers/gpu/drm/radeon/radeon_drv.c | 23 +--------
> > > drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +------
> > > drivers/gpu/drm/tegra/drm.c | 4 ++
> > > drivers/gpu/drm/vc4/vc4_drv.c | 20 +-------
> > > drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 ++-------
> > > drivers/video/fbdev/core/fbmem.c | 63 +++++++++++++++++++++++-
> > > include/drm/drm_fb_helper.h | 12 +++++
> > > include/linux/fb.h | 2 +
> > > 13 files changed, 89 insertions(+), 172 deletions(-)
>
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v3 04/13] fbdev: add remove_conflicting_pci_framebuffers()
From: Daniel Vetter @ 2018-09-03 16:16 UTC (permalink / raw)
To: Michał Mirosław
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, amd-gfx,
Jonathan Hunter, Alex Deucher, Thierry Reding, dri-devel,
linux-tegra, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <7db1c278276de420eb45a1b71d06b5eb6bbd49ef.1535810304.git.mirq-linux@rere.qmqm.pl>
On Sat, Sep 01, 2018 at 04:08:45PM +0200, Michał Mirosław wrote:
> Almost all PCI drivers using remove_conflicting_framebuffers() wrap it
> with the same code.
>
> ---
This cuts away the sob. Just fyi.
-Daniel
> v2: add kerneldoc for DRM helper
> v3: propagate remove_conflicting_framebuffers() return value
> + move kerneldoc to where function is implemented
>
> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> ---
> drivers/video/fbdev/core/fbmem.c | 35 ++++++++++++++++++++++++++++++++
> include/drm/drm_fb_helper.h | 12 +++++++++++
> include/linux/fb.h | 2 ++
> 3 files changed, 49 insertions(+)
>
> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
> index 2de93b5014e3..cd96b1c62bbe 100644
> --- a/drivers/video/fbdev/core/fbmem.c
> +++ b/drivers/video/fbdev/core/fbmem.c
> @@ -34,6 +34,7 @@
> #include <linux/fb.h>
> #include <linux/fbcon.h>
> #include <linux/mem_encrypt.h>
> +#include <linux/pci.h>
>
> #include <asm/fb.h>
>
> @@ -1812,6 +1813,40 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
> }
> EXPORT_SYMBOL(remove_conflicting_framebuffers);
>
> +/**
> + * remove_conflicting_pci_framebuffers - remove firmware-configured framebuffers for PCI devices
> + * @pdev: PCI device
> + * @resource_id: index of PCI BAR configuring framebuffer memory
> + * @name: requesting driver name
> + *
> + * This function removes framebuffer devices (eg. initialized by firmware)
> + * using memory range configured for @pdev's BAR @resource_id.
> + *
> + * The function assumes that PCI device with shadowed ROM drives a primary
> + * display and so kicks out vga16fb.
> + */
> +int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, int res_id, const char *name)
> +{
> + struct apertures_struct *ap;
> + bool primary = false;
> + int err;
> +
> + ap = alloc_apertures(1);
> + if (!ap)
> + return -ENOMEM;
> +
> + ap->ranges[0].base = pci_resource_start(pdev, res_id);
> + ap->ranges[0].size = pci_resource_len(pdev, res_id);
> +#ifdef CONFIG_X86
> + primary = pdev->resource[PCI_ROM_RESOURCE].flags &
> + IORESOURCE_ROM_SHADOW;
> +#endif
> + err = remove_conflicting_framebuffers(ap, name, primary);
> + kfree(ap);
> + return err;
> +}
> +EXPORT_SYMBOL(remove_conflicting_pci_framebuffers);
> +
> /**
> * register_framebuffer - registers a frame buffer device
> * @fb_info: frame buffer info structure
> diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
> index b069433e7fc1..20ea856db900 100644
> --- a/include/drm/drm_fb_helper.h
> +++ b/include/drm/drm_fb_helper.h
> @@ -577,4 +577,16 @@ drm_fb_helper_remove_conflicting_framebuffers(struct apertures_struct *a,
> #endif
> }
>
> +static inline int
> +drm_fb_helper_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
> + int resource_id,
> + const char *name)
> +{
> +#if IS_REACHABLE(CONFIG_FB)
> + return remove_conflicting_pci_framebuffers(pdev, resource_id, name);
> +#else
> + return 0;
> +#endif
> +}
> +
> #endif
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index aa74a228bb92..abeffd55b66a 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -632,6 +632,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
> extern int register_framebuffer(struct fb_info *fb_info);
> extern int unregister_framebuffer(struct fb_info *fb_info);
> extern int unlink_framebuffer(struct fb_info *fb_info);
> +extern int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, int res_id,
> + const char *name);
> extern int remove_conflicting_framebuffers(struct apertures_struct *a,
> const char *name, bool primary);
> extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
> --
> 2.18.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v3 00/13] remove_conflicting_framebuffers() cleanup
From: Bartlomiej Zolnierkiewicz @ 2018-09-03 11:31 UTC (permalink / raw)
To: Daniel Vetter
Cc: linux-fbdev, David Airlie, amd-gfx, Michał Mirosław,
Alex Deucher, Thierry Reding, dri-devel, linux-tegra, Dave Airlie,
Maxime Ripard, Jonathan Hunter, virtualization, linux-arm-kernel
In-Reply-To: <20180903074315.GB21634@phenom.ffwll.local>
On Monday, September 03, 2018 09:43:15 AM Daniel Vetter wrote:
> On Sat, Sep 01, 2018 at 04:08:41PM +0200, Michał Mirosław wrote:
> > This series cleans up duplicated code for replacing firmware FB
> > driver with proper DRI driver and adds handover support to
> > Tegra driver.
> >
> > This is a sligtly updated version of a series sent on 24 Nov 2017.
> >
> > ---
> > v2:
> > - rebased on current drm-next
> > - dropped staging/sm750fb changes
> > - added kernel docs for DRM helpers
> > v3:
> > - move kerneldoc to fbdev, where functions are implemented
> > - split kerneldoc for remove_conflicting_framebuffers()
>
> Ah, that's not quite what I had in mind. I think having the docs (also) in
> the drm helpers would be good, since that's where drm people will look,
> and that's the function they'll call. I just wanted you to split the fbdev
> and drm parts into 2 patches (since those are two different maintainers).
>
> Anyway, this is ok too, so imo ready for merging. If you can resurrect the
> drm docs (with a patch title of "drm/fb-helper: document fbdev remove
> functions" or similar) that would be great.
>
> Only thing we need for merging now is the ack from Bartlomiej.
For the whole patchset:
Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> -Daniel
>
> > - propagate return value in remove_conflicting_pci_framebuffers()
> >
> > ---
> > Michał Mirosław (13):
> > fbdev: show fbdev number for debugging
> > fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
> > fbdev: add kerneldoc do remove_conflicting_framebuffers()
> > fbdev: add remove_conflicting_pci_framebuffers()
> > drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
> > drm/bochs: use simpler remove_conflicting_pci_framebuffers()
> > drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
> > drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
> > drm/radeon: use simpler remove_conflicting_pci_framebuffers()
> > drm/virtio: use simpler remove_conflicting_pci_framebuffers()
> > drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
> > drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
> > drm/tegra: kick out simplefb
> >
> > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +--------
> > drivers/gpu/drm/bochs/bochs_drv.c | 18 +------
> > drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +--------
> > drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +-------
> > drivers/gpu/drm/mgag200/mgag200_main.c | 9 ----
> > drivers/gpu/drm/radeon/radeon_drv.c | 23 +--------
> > drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +------
> > drivers/gpu/drm/tegra/drm.c | 4 ++
> > drivers/gpu/drm/vc4/vc4_drv.c | 20 +-------
> > drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 ++-------
> > drivers/video/fbdev/core/fbmem.c | 63 +++++++++++++++++++++++-
> > include/drm/drm_fb_helper.h | 12 +++++
> > include/linux/fb.h | 2 +
> > 13 files changed, 89 insertions(+), 172 deletions(-)
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* [PATCH 5/5] drm/virtio: fix DRM_FORMAT_* handling
From: Gerd Hoffmann @ 2018-09-03 10:57 UTC (permalink / raw)
To: dri-devel; +Cc: David Airlie, open list, open list:VIRTIO GPU DRIVER
In-Reply-To: <20180903105756.24912-1-kraxel@redhat.com>
Use DRM_FORMAT_HOST_XRGB8888, so we are using the correct format code
on bigendian machines. Also add DRIVER_PREFER_HOST_BYTE_ORDER driver
feature flag so drm_mode_addfb() asks for the correct format code.
Both DRM_FORMAT_* and VIRTIO_GPU_FORMAT_* are defined to be little
endian, so using a different mapping on bigendian machines is wrong.
It's there because of broken drm_mode_addfb() behavior. So with
drm_mode_addfb() being fixed we can fix this too.
While wading through the code I've noticed we have a little issue in
virtio: We attach a format to the bo when it is created
(DRM_IOCTL_MODE_CREATE_DUMB), not when we map it as framebuffer
(DRM_IOCTL_MODE_ADDFB). Easy way out: Support a single format only.
Pick DRM_FORMAT_HOST_XRGB8888, it is the only one actually used in
practice. Drop unused mappings in virtio_gpu_translate_format().
With this patch applied both ADDFB and ADDFB2 ioctls work correctly in
the virtio-gpu.ko driver on big endian machines. Without the patch only
ADDFB (which still seems to be used by the majority of userspace) works
correctly.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 4 +++
drivers/gpu/drm/virtio/virtgpu_drv.c | 4 ++-
drivers/gpu/drm/virtio/virtgpu_fb.c | 2 +-
drivers/gpu/drm/virtio/virtgpu_gem.c | 7 +++--
drivers/gpu/drm/virtio/virtgpu_plane.c | 54 ++------------------------------
5 files changed, 15 insertions(+), 56 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 25503b9335..f6c4af1db4 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -306,6 +306,10 @@ virtio_gpu_user_framebuffer_create(struct drm_device *dev,
struct virtio_gpu_framebuffer *virtio_gpu_fb;
int ret;
+ if (mode_cmd->pixel_format != DRM_FORMAT_HOST_XRGB8888 &&
+ mode_cmd->pixel_format != DRM_FORMAT_HOST_ARGB8888)
+ return ERR_PTR(-ENOENT);
+
/* lookup object associated with res handle */
obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[0]);
if (!obj)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index d9287c144f..4b28f41ac1 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -114,7 +114,9 @@ static const struct file_operations virtio_gpu_driver_fops = {
};
static struct drm_driver driver = {
- .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
+ .driver_features = (DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
+ DRIVER_RENDER | DRIVER_ATOMIC |
+ DRIVER_PREFER_HOST_BYTE_ORDER),
.load = virtio_gpu_driver_load,
.unload = virtio_gpu_driver_unload,
.open = virtio_gpu_driver_open,
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
index a121b1c795..9d87ebd645 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -233,7 +233,7 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
mode_cmd.width = sizes->surface_width;
mode_cmd.height = sizes->surface_height;
mode_cmd.pitches[0] = mode_cmd.width * 4;
- mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
+ mode_cmd.pixel_format = DRM_FORMAT_HOST_XRGB8888;
format = virtio_gpu_translate_format(mode_cmd.pixel_format);
if (format == 0)
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 0f2768eaca..82c817f37c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -90,7 +90,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
uint32_t resid;
uint32_t format;
- pitch = args->width * ((args->bpp + 1) / 8);
+ if (args->bpp != 32)
+ return -EINVAL;
+
+ pitch = args->width * 4;
args->size = pitch * args->height;
args->size = ALIGN(args->size, PAGE_SIZE);
@@ -99,7 +102,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
if (ret)
goto fail;
- format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
+ format = virtio_gpu_translate_format(DRM_FORMAT_HOST_XRGB8888);
virtio_gpu_resource_id_get(vgdev, &resid);
virtio_gpu_cmd_create_resource(vgdev, resid, format,
args->width, args->height);
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index dc5b5b2b7a..3221d50b9a 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -28,22 +28,11 @@
#include <drm/drm_atomic_helper.h>
static const uint32_t virtio_gpu_formats[] = {
- DRM_FORMAT_XRGB8888,
- DRM_FORMAT_ARGB8888,
- DRM_FORMAT_BGRX8888,
- DRM_FORMAT_BGRA8888,
- DRM_FORMAT_RGBX8888,
- DRM_FORMAT_RGBA8888,
- DRM_FORMAT_XBGR8888,
- DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_HOST_XRGB8888,
};
static const uint32_t virtio_gpu_cursor_formats[] = {
-#ifdef __BIG_ENDIAN
- DRM_FORMAT_BGRA8888,
-#else
- DRM_FORMAT_ARGB8888,
-#endif
+ DRM_FORMAT_HOST_ARGB8888,
};
uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
@@ -51,32 +40,6 @@ uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
uint32_t format;
switch (drm_fourcc) {
-#ifdef __BIG_ENDIAN
- case DRM_FORMAT_XRGB8888:
- format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
- break;
- case DRM_FORMAT_ARGB8888:
- format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
- break;
- case DRM_FORMAT_BGRX8888:
- format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
- break;
- case DRM_FORMAT_BGRA8888:
- format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
- break;
- case DRM_FORMAT_RGBX8888:
- format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
- break;
- case DRM_FORMAT_RGBA8888:
- format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
- break;
- case DRM_FORMAT_XBGR8888:
- format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
- break;
- case DRM_FORMAT_ABGR8888:
- format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
- break;
-#else
case DRM_FORMAT_XRGB8888:
format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
break;
@@ -89,19 +52,6 @@ uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
case DRM_FORMAT_BGRA8888:
format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
break;
- case DRM_FORMAT_RGBX8888:
- format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
- break;
- case DRM_FORMAT_RGBA8888:
- format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
- break;
- case DRM_FORMAT_XBGR8888:
- format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
- break;
- case DRM_FORMAT_ABGR8888:
- format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
- break;
-#endif
default:
/*
* This should not happen, we handle everything listed
--
2.9.3
^ permalink raw reply related
* [PATCH 4/5] drm/bochs: fix DRM_FORMAT_* handling for big endian machines.
From: Gerd Hoffmann @ 2018-09-03 10:57 UTC (permalink / raw)
To: dri-devel
Cc: David Airlie, open list,
open list:DRM DRIVER FOR BOCHS VIRTUAL GPU
In-Reply-To: <20180903105756.24912-1-kraxel@redhat.com>
Use DRM_FORMAT_HOST_XRGB8888, so we are using the correct format code
on bigendian machines. Also add DRIVER_PREFER_HOST_BYTE_ORDER driver
feature flag so drm_mode_addfb() asks for the correct format code.
Create our own plane and use drm_crtc_init_with_planes() instead of
depending on the default created by drm_crtc_init(). That way the plane
format list is correct on bigendian machines.
With this patch applied both ADDFB and ADDFB2 ioctls work correctly in
the bochs-drm.ko driver on big endian machines. Without the patch only
ADDFB (which still seems to be used by the majority of userspace) works
correctly.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
drivers/gpu/drm/bochs/bochs_drv.c | 3 ++-
drivers/gpu/drm/bochs/bochs_fbdev.c | 5 ++---
drivers/gpu/drm/bochs/bochs_kms.c | 33 ++++++++++++++++++++++++++++++++-
drivers/gpu/drm/bochs/bochs_mm.c | 2 +-
4 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
index 7b20318483..fa84a3c841 100644
--- a/drivers/gpu/drm/bochs/bochs_drv.c
+++ b/drivers/gpu/drm/bochs/bochs_drv.c
@@ -81,7 +81,8 @@ static const struct file_operations bochs_fops = {
};
static struct drm_driver bochs_driver = {
- .driver_features = DRIVER_GEM | DRIVER_MODESET,
+ .driver_features = (DRIVER_GEM | DRIVER_MODESET |
+ DRIVER_PREFER_HOST_BYTE_ORDER),
.load = bochs_load,
.unload = bochs_unload,
.fops = &bochs_fops,
diff --git a/drivers/gpu/drm/bochs/bochs_fbdev.c b/drivers/gpu/drm/bochs/bochs_fbdev.c
index 14eb8d0d5a..bf728790fa 100644
--- a/drivers/gpu/drm/bochs/bochs_fbdev.c
+++ b/drivers/gpu/drm/bochs/bochs_fbdev.c
@@ -64,9 +64,8 @@ static int bochsfb_create(struct drm_fb_helper *helper,
mode_cmd.width = sizes->surface_width;
mode_cmd.height = sizes->surface_height;
- mode_cmd.pitches[0] = mode_cmd.width * ((sizes->surface_bpp + 7) / 8);
- mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp,
- sizes->surface_depth);
+ mode_cmd.pitches[0] = sizes->surface_width * 4;
+ mode_cmd.pixel_format = DRM_FORMAT_HOST_XRGB8888;
size = mode_cmd.pitches[0] * mode_cmd.height;
/* alloc, pin & map bo */
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
index ca5a9afdd5..2662cdcf2d 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
@@ -129,12 +129,43 @@ static const struct drm_crtc_helper_funcs bochs_helper_funcs = {
.commit = bochs_crtc_commit,
};
+static const uint32_t bochs_formats[] = {
+ DRM_FORMAT_HOST_XRGB8888,
+};
+
+static struct drm_plane *bochs_primary_plane(struct drm_device *dev)
+{
+ struct drm_plane *primary;
+ int ret;
+
+ primary = kzalloc(sizeof(*primary), GFP_KERNEL);
+ if (primary == NULL) {
+ DRM_DEBUG_KMS("Failed to allocate primary plane\n");
+ return NULL;
+ }
+
+ ret = drm_universal_plane_init(dev, primary, 0,
+ &drm_primary_helper_funcs,
+ bochs_formats,
+ ARRAY_SIZE(bochs_formats),
+ NULL,
+ DRM_PLANE_TYPE_PRIMARY, NULL);
+ if (ret) {
+ kfree(primary);
+ primary = NULL;
+ }
+
+ return primary;
+}
+
static void bochs_crtc_init(struct drm_device *dev)
{
struct bochs_device *bochs = dev->dev_private;
struct drm_crtc *crtc = &bochs->crtc;
+ struct drm_plane *primary = bochs_primary_plane(dev);
- drm_crtc_init(dev, crtc, &bochs_crtc_funcs);
+ drm_crtc_init_with_planes(dev, crtc, primary, NULL,
+ &bochs_crtc_funcs, NULL);
drm_crtc_helper_add(crtc, &bochs_helper_funcs);
}
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c
index c9c7097030..fdf151fbdb 100644
--- a/drivers/gpu/drm/bochs/bochs_mm.c
+++ b/drivers/gpu/drm/bochs/bochs_mm.c
@@ -506,7 +506,7 @@ bochs_user_framebuffer_create(struct drm_device *dev,
(mode_cmd->pixel_format >> 16) & 0xff,
(mode_cmd->pixel_format >> 24) & 0xff);
- if (mode_cmd->pixel_format != DRM_FORMAT_XRGB8888)
+ if (mode_cmd->pixel_format != DRM_FORMAT_HOST_XRGB8888)
return ERR_PTR(-ENOENT);
obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
--
2.9.3
^ permalink raw reply related
* Re: [PATCH v3 00/13] remove_conflicting_framebuffers() cleanup
From: Daniel Vetter @ 2018-09-03 7:43 UTC (permalink / raw)
To: Michał Mirosław
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, amd-gfx,
Jonathan Hunter, Alex Deucher, Thierry Reding, dri-devel,
linux-tegra, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
On Sat, Sep 01, 2018 at 04:08:41PM +0200, Michał Mirosław wrote:
> This series cleans up duplicated code for replacing firmware FB
> driver with proper DRI driver and adds handover support to
> Tegra driver.
>
> This is a sligtly updated version of a series sent on 24 Nov 2017.
>
> ---
> v2:
> - rebased on current drm-next
> - dropped staging/sm750fb changes
> - added kernel docs for DRM helpers
> v3:
> - move kerneldoc to fbdev, where functions are implemented
> - split kerneldoc for remove_conflicting_framebuffers()
Ah, that's not quite what I had in mind. I think having the docs (also) in
the drm helpers would be good, since that's where drm people will look,
and that's the function they'll call. I just wanted you to split the fbdev
and drm parts into 2 patches (since those are two different maintainers).
Anyway, this is ok too, so imo ready for merging. If you can resurrect the
drm docs (with a patch title of "drm/fb-helper: document fbdev remove
functions" or similar) that would be great.
Only thing we need for merging now is the ack from Bartlomiej.
-Daniel
> - propagate return value in remove_conflicting_pci_framebuffers()
>
> ---
> Michał Mirosław (13):
> fbdev: show fbdev number for debugging
> fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
> fbdev: add kerneldoc do remove_conflicting_framebuffers()
> fbdev: add remove_conflicting_pci_framebuffers()
> drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
> drm/bochs: use simpler remove_conflicting_pci_framebuffers()
> drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
> drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
> drm/radeon: use simpler remove_conflicting_pci_framebuffers()
> drm/virtio: use simpler remove_conflicting_pci_framebuffers()
> drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
> drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
> drm/tegra: kick out simplefb
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +--------
> drivers/gpu/drm/bochs/bochs_drv.c | 18 +------
> drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +--------
> drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +-------
> drivers/gpu/drm/mgag200/mgag200_main.c | 9 ----
> drivers/gpu/drm/radeon/radeon_drv.c | 23 +--------
> drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +------
> drivers/gpu/drm/tegra/drm.c | 4 ++
> drivers/gpu/drm/vc4/vc4_drv.c | 20 +-------
> drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 ++-------
> drivers/video/fbdev/core/fbmem.c | 63 +++++++++++++++++++++++-
> include/drm/drm_fb_helper.h | 12 +++++
> include/linux/fb.h | 2 +
> 13 files changed, 89 insertions(+), 172 deletions(-)
>
> --
> 2.18.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* [PATCH v3 13/13] drm/tegra: kick out simplefb
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, Eric Anholt,
amd-gfx, Jonathan Hunter, Alex Deucher, Thierry Reding,
linux-tegra, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Kick out firmware fb when loading Tegra driver.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/tegra/drm.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 7afe2f635f74..b51ec138fed2 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -1203,6 +1203,10 @@ static int host1x_drm_probe(struct host1x_device *dev)
dev_set_drvdata(&dev->dev, drm);
+ err = drm_fb_helper_remove_conflicting_framebuffers(NULL, "tegradrmfb", false);
+ if (err < 0)
+ goto unref;
+
err = drm_dev_register(drm, 0);
if (err < 0)
goto unref;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 12/13] drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz,
Maxime Ripard, Eric Anholt, amd-gfx, Jonathan Hunter,
David Airlie, Thierry Reding, Alex Deucher, Dave Airlie,
virtualization, linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Use remove_conflicting_framebuffers(NULL) instead of duplicating it.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 50d19605c38f..555b5db8036f 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -60,22 +60,6 @@ static struct drm_driver sun4i_drv_driver = {
/* Frame Buffer Operations */
};
-static void sun4i_remove_framebuffers(void)
-{
- struct apertures_struct *ap;
-
- ap = alloc_apertures(1);
- if (!ap)
- return;
-
- /* The framebuffer can be located anywhere in RAM */
- ap->ranges[0].base = 0;
- ap->ranges[0].size = ~0;
-
- drm_fb_helper_remove_conflicting_framebuffers(ap, "sun4i-drm-fb", false);
- kfree(ap);
-}
-
static int sun4i_drv_bind(struct device *dev)
{
struct drm_device *drm;
@@ -118,7 +102,7 @@ static int sun4i_drv_bind(struct device *dev)
drm->irq_enabled = true;
/* Remove early framebuffers (ie. simplefb) */
- sun4i_remove_framebuffers();
+ drm_fb_helper_remove_conflicting_framebuffers(NULL, "sun4i-drm-fb", false);
/* Create our framebuffer */
ret = sun4i_framebuffer_init(drm);
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 11/13] drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Use remove_conflicting_framebuffers(NULL) instead of open-coding it.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Eric Anholt <eric@anholt.net>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/vc4/vc4_drv.c | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index 94b99c90425a..96bb90325995 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -246,24 +246,6 @@ static void vc4_match_add_drivers(struct device *dev,
}
}
-static void vc4_kick_out_firmware_fb(void)
-{
- struct apertures_struct *ap;
-
- ap = alloc_apertures(1);
- if (!ap)
- return;
-
- /* Since VC4 is a UMA device, the simplefb node may have been
- * located anywhere in memory.
- */
- ap->ranges[0].base = 0;
- ap->ranges[0].size = ~0;
-
- drm_fb_helper_remove_conflicting_framebuffers(ap, "vc4drmfb", false);
- kfree(ap);
-}
-
static int vc4_drm_bind(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -296,7 +278,7 @@ static int vc4_drm_bind(struct device *dev)
if (ret)
goto gem_destroy;
- vc4_kick_out_firmware_fb();
+ drm_fb_helper_remove_conflicting_framebuffers(NULL, "vc4drmfb", false);
ret = drm_dev_register(drm, 0);
if (ret < 0)
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 10/13] drm/virtio: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, virtualization, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, Jonathan Hunter,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 +++---------------------
1 file changed, 3 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
index 7df8d0c9026a..115ed546ca4e 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
@@ -28,26 +28,6 @@
#include "virtgpu_drv.h"
-static void virtio_pci_kick_out_firmware_fb(struct pci_dev *pci_dev)
-{
- struct apertures_struct *ap;
- bool primary;
-
- ap = alloc_apertures(1);
- if (!ap)
- return;
-
- ap->ranges[0].base = pci_resource_start(pci_dev, 0);
- ap->ranges[0].size = pci_resource_len(pci_dev, 0);
-
- primary = pci_dev->resource[PCI_ROM_RESOURCE].flags
- & IORESOURCE_ROM_SHADOW;
-
- drm_fb_helper_remove_conflicting_framebuffers(ap, "virtiodrmfb", primary);
-
- kfree(ap);
-}
-
int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev)
{
struct drm_device *dev;
@@ -69,7 +49,9 @@ int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev)
pname);
dev->pdev = pdev;
if (vga)
- virtio_pci_kick_out_firmware_fb(pdev);
+ drm_fb_helper_remove_conflicting_pci_framebuffers(pdev,
+ 0,
+ "virtiodrmfb");
snprintf(unique, sizeof(unique), "pci:%s", pname);
ret = drm_dev_set_unique(dev, unique);
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 08/13] drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Remove duplicated call, while at it.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +--------------------
drivers/gpu/drm/mgag200/mgag200_main.c | 9 ---------
2 files changed, 1 insertion(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index 74cdde2ee474..ac6af4bd9df6 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -42,29 +42,10 @@ static const struct pci_device_id pciidlist[] = {
MODULE_DEVICE_TABLE(pci, pciidlist);
-static void mgag200_kick_out_firmware_fb(struct pci_dev *pdev)
-{
- struct apertures_struct *ap;
- bool primary = false;
-
- ap = alloc_apertures(1);
- if (!ap)
- return;
-
- ap->ranges[0].base = pci_resource_start(pdev, 0);
- ap->ranges[0].size = pci_resource_len(pdev, 0);
-
-#ifdef CONFIG_X86
- primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
-#endif
- drm_fb_helper_remove_conflicting_framebuffers(ap, "mgag200drmfb", primary);
- kfree(ap);
-}
-
static int mga_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
- mgag200_kick_out_firmware_fb(pdev);
+ drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "mgag200drmfb");
return drm_get_pci_dev(pdev, ent, &driver);
}
diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
index 780f983b0294..79d54103d470 100644
--- a/drivers/gpu/drm/mgag200/mgag200_main.c
+++ b/drivers/gpu/drm/mgag200/mgag200_main.c
@@ -124,20 +124,11 @@ static int mga_probe_vram(struct mga_device *mdev, void __iomem *mem)
static int mga_vram_init(struct mga_device *mdev)
{
void __iomem *mem;
- struct apertures_struct *aper = alloc_apertures(1);
- if (!aper)
- return -ENOMEM;
/* BAR 0 is VRAM */
mdev->mc.vram_base = pci_resource_start(mdev->dev->pdev, 0);
mdev->mc.vram_window = pci_resource_len(mdev->dev->pdev, 0);
- aper->ranges[0].base = mdev->mc.vram_base;
- aper->ranges[0].size = mdev->mc.vram_window;
-
- drm_fb_helper_remove_conflicting_framebuffers(aper, "mgafb", true);
- kfree(aper);
-
if (!devm_request_mem_region(mdev->dev->dev, mdev->mc.vram_base, mdev->mc.vram_window,
"mgadrmfb_vram")) {
DRM_ERROR("can't reserve VRAM\n");
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 09/13] drm/radeon: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/radeon/radeon_drv.c | 23 +----------------------
1 file changed, 1 insertion(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index b28288a781ef..36c98a0ec991 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -311,27 +311,6 @@ static struct drm_driver kms_driver;
bool radeon_device_is_virtual(void);
-static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
-{
- struct apertures_struct *ap;
- bool primary = false;
-
- ap = alloc_apertures(1);
- if (!ap)
- return -ENOMEM;
-
- ap->ranges[0].base = pci_resource_start(pdev, 0);
- ap->ranges[0].size = pci_resource_len(pdev, 0);
-
-#ifdef CONFIG_X86
- primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
-#endif
- drm_fb_helper_remove_conflicting_framebuffers(ap, "radeondrmfb", primary);
- kfree(ap);
-
- return 0;
-}
-
static int radeon_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
@@ -341,7 +320,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
return -EPROBE_DEFER;
/* Get rid of things like offb */
- ret = radeon_kick_out_firmware_fb(pdev);
+ ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "radeondrmfb");
if (ret)
return ret;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 07/13] drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, virtualization, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, Jonathan Hunter,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +----------------------
1 file changed, 1 insertion(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
index 69c4e352dd78..85ed8657c862 100644
--- a/drivers/gpu/drm/cirrus/cirrus_drv.c
+++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
@@ -42,33 +42,12 @@ static const struct pci_device_id pciidlist[] = {
};
-static int cirrus_kick_out_firmware_fb(struct pci_dev *pdev)
-{
- struct apertures_struct *ap;
- bool primary = false;
-
- ap = alloc_apertures(1);
- if (!ap)
- return -ENOMEM;
-
- ap->ranges[0].base = pci_resource_start(pdev, 0);
- ap->ranges[0].size = pci_resource_len(pdev, 0);
-
-#ifdef CONFIG_X86
- primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
-#endif
- drm_fb_helper_remove_conflicting_framebuffers(ap, "cirrusdrmfb", primary);
- kfree(ap);
-
- return 0;
-}
-
static int cirrus_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
int ret;
- ret = cirrus_kick_out_firmware_fb(pdev);
+ ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "cirrusdrmfb");
if (ret)
return ret;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 05/13] drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +-----------------------
1 file changed, 1 insertion(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 0b19482b36b8..9b6e037719db 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -560,28 +560,6 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
static struct drm_driver kms_driver;
-static int amdgpu_kick_out_firmware_fb(struct pci_dev *pdev)
-{
- struct apertures_struct *ap;
- bool primary = false;
-
- ap = alloc_apertures(1);
- if (!ap)
- return -ENOMEM;
-
- ap->ranges[0].base = pci_resource_start(pdev, 0);
- ap->ranges[0].size = pci_resource_len(pdev, 0);
-
-#ifdef CONFIG_X86
- primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
-#endif
- drm_fb_helper_remove_conflicting_framebuffers(ap, "amdgpudrmfb", primary);
- kfree(ap);
-
- return 0;
-}
-
-
static int amdgpu_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
@@ -609,7 +587,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
return ret;
/* Get rid of things like offb */
- ret = amdgpu_kick_out_firmware_fb(pdev);
+ ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "amdgpudrmfb");
if (ret)
return ret;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 06/13] drm/bochs: use simpler remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, virtualization, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, Jonathan Hunter,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/bochs/bochs_drv.c | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
index 7b20318483e4..c61b40c72b62 100644
--- a/drivers/gpu/drm/bochs/bochs_drv.c
+++ b/drivers/gpu/drm/bochs/bochs_drv.c
@@ -143,22 +143,6 @@ static const struct dev_pm_ops bochs_pm_ops = {
/* ---------------------------------------------------------------------- */
/* pci interface */
-static int bochs_kick_out_firmware_fb(struct pci_dev *pdev)
-{
- struct apertures_struct *ap;
-
- ap = alloc_apertures(1);
- if (!ap)
- return -ENOMEM;
-
- ap->ranges[0].base = pci_resource_start(pdev, 0);
- ap->ranges[0].size = pci_resource_len(pdev, 0);
- drm_fb_helper_remove_conflicting_framebuffers(ap, "bochsdrmfb", false);
- kfree(ap);
-
- return 0;
-}
-
static int bochs_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
@@ -171,7 +155,7 @@ static int bochs_pci_probe(struct pci_dev *pdev,
return -ENOMEM;
}
- ret = bochs_kick_out_firmware_fb(pdev);
+ ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "bochsdrmfb");
if (ret)
return ret;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 04/13] fbdev: add remove_conflicting_pci_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Almost all PCI drivers using remove_conflicting_framebuffers() wrap it
with the same code.
---
v2: add kerneldoc for DRM helper
v3: propagate remove_conflicting_framebuffers() return value
+ move kerneldoc to where function is implemented
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/video/fbdev/core/fbmem.c | 35 ++++++++++++++++++++++++++++++++
include/drm/drm_fb_helper.h | 12 +++++++++++
include/linux/fb.h | 2 ++
3 files changed, 49 insertions(+)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 2de93b5014e3..cd96b1c62bbe 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -34,6 +34,7 @@
#include <linux/fb.h>
#include <linux/fbcon.h>
#include <linux/mem_encrypt.h>
+#include <linux/pci.h>
#include <asm/fb.h>
@@ -1812,6 +1813,40 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
}
EXPORT_SYMBOL(remove_conflicting_framebuffers);
+/**
+ * remove_conflicting_pci_framebuffers - remove firmware-configured framebuffers for PCI devices
+ * @pdev: PCI device
+ * @resource_id: index of PCI BAR configuring framebuffer memory
+ * @name: requesting driver name
+ *
+ * This function removes framebuffer devices (eg. initialized by firmware)
+ * using memory range configured for @pdev's BAR @resource_id.
+ *
+ * The function assumes that PCI device with shadowed ROM drives a primary
+ * display and so kicks out vga16fb.
+ */
+int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, int res_id, const char *name)
+{
+ struct apertures_struct *ap;
+ bool primary = false;
+ int err;
+
+ ap = alloc_apertures(1);
+ if (!ap)
+ return -ENOMEM;
+
+ ap->ranges[0].base = pci_resource_start(pdev, res_id);
+ ap->ranges[0].size = pci_resource_len(pdev, res_id);
+#ifdef CONFIG_X86
+ primary = pdev->resource[PCI_ROM_RESOURCE].flags &
+ IORESOURCE_ROM_SHADOW;
+#endif
+ err = remove_conflicting_framebuffers(ap, name, primary);
+ kfree(ap);
+ return err;
+}
+EXPORT_SYMBOL(remove_conflicting_pci_framebuffers);
+
/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b069433e7fc1..20ea856db900 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -577,4 +577,16 @@ drm_fb_helper_remove_conflicting_framebuffers(struct apertures_struct *a,
#endif
}
+static inline int
+drm_fb_helper_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
+ int resource_id,
+ const char *name)
+{
+#if IS_REACHABLE(CONFIG_FB)
+ return remove_conflicting_pci_framebuffers(pdev, resource_id, name);
+#else
+ return 0;
+#endif
+}
+
#endif
diff --git a/include/linux/fb.h b/include/linux/fb.h
index aa74a228bb92..abeffd55b66a 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -632,6 +632,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
extern int register_framebuffer(struct fb_info *fb_info);
extern int unregister_framebuffer(struct fb_info *fb_info);
extern int unlink_framebuffer(struct fb_info *fb_info);
+extern int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, int res_id,
+ const char *name);
extern int remove_conflicting_framebuffers(struct apertures_struct *a,
const char *name, bool primary);
extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 03/13] fbdev: add kerneldoc do remove_conflicting_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Document remove_conflicting_framebuffers() behaviour.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/video/fbdev/core/fbmem.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 0df148eb4699..2de93b5014e3 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1775,6 +1775,16 @@ int unlink_framebuffer(struct fb_info *fb_info)
}
EXPORT_SYMBOL(unlink_framebuffer);
+/**
+ * remove_conflicting_framebuffers - remove firmware-configured framebuffers
+ * @a: memory range, users of which are to be removed
+ * @name: requesting driver name
+ * @primary: also kick vga16fb if present
+ *
+ * This function removes framebuffer devices (initialized by firmware/bootloader)
+ * which use memory range described by @a. If @a is NULL all such devices are
+ * removed.
+ */
int remove_conflicting_framebuffers(struct apertures_struct *a,
const char *name, bool primary)
{
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 01/13] fbdev: show fbdev number for debugging
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/video/fbdev/core/fbmem.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index f741ba8df01b..30a18d4c9de4 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1618,8 +1618,8 @@ static int do_remove_conflicting_framebuffers(struct apertures_struct *a,
(primary && gen_aper && gen_aper->count &&
gen_aper->ranges[0].base == VGA_FB_PHYS)) {
- printk(KERN_INFO "fb: switching to %s from %s\n",
- name, registered_fb[i]->fix.id);
+ printk(KERN_INFO "fb%d: switching to %s from %s\n",
+ i, name, registered_fb[i]->fix.id);
ret = do_unregister_framebuffer(registered_fb[i]);
if (ret)
return ret;
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 02/13] fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535810304.git.mirq-linux@rere.qmqm.pl>
Interpret (otherwise-invalid) NULL apertures argument to mean all-memory
range. This will allow to remove several duplicates of this code
from drivers in following patches.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
v2: added kerneldoc to corresponding DRM helper
v3: split kerneldoc to another patch
---
drivers/video/fbdev/core/fbmem.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 30a18d4c9de4..0df148eb4699 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1779,11 +1779,25 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
const char *name, bool primary)
{
int ret;
+ bool do_free = false;
+
+ if (!a) {
+ a = alloc_apertures(1);
+ if (!a)
+ return -ENOMEM;
+
+ a->ranges[0].base = 0;
+ a->ranges[0].size = ~0;
+ do_free = true;
+ }
mutex_lock(®istration_lock);
ret = do_remove_conflicting_framebuffers(a, name, primary);
mutex_unlock(®istration_lock);
+ if (do_free)
+ kfree(a);
+
return ret;
}
EXPORT_SYMBOL(remove_conflicting_framebuffers);
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply related
* [PATCH v3 00/13] remove_conflicting_framebuffers() cleanup
From: Michał Mirosław @ 2018-09-01 14:08 UTC (permalink / raw)
To: dri-devel
Cc: linux-fbdev, linux-tegra, Bartlomiej Zolnierkiewicz, David Airlie,
amd-gfx, Jonathan Hunter, Eric Anholt, Thierry Reding,
Alex Deucher, Dave Airlie, Maxime Ripard, virtualization,
linux-arm-kernel
In-Reply-To: <cover.1535656077.git.mirq-linux@rere.qmqm.pl>
This series cleans up duplicated code for replacing firmware FB
driver with proper DRI driver and adds handover support to
Tegra driver.
This is a sligtly updated version of a series sent on 24 Nov 2017.
---
v2:
- rebased on current drm-next
- dropped staging/sm750fb changes
- added kernel docs for DRM helpers
v3:
- move kerneldoc to fbdev, where functions are implemented
- split kerneldoc for remove_conflicting_framebuffers()
- propagate return value in remove_conflicting_pci_framebuffers()
---
Michał Mirosław (13):
fbdev: show fbdev number for debugging
fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
fbdev: add kerneldoc do remove_conflicting_framebuffers()
fbdev: add remove_conflicting_pci_framebuffers()
drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
drm/bochs: use simpler remove_conflicting_pci_framebuffers()
drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
drm/radeon: use simpler remove_conflicting_pci_framebuffers()
drm/virtio: use simpler remove_conflicting_pci_framebuffers()
drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
drm/tegra: kick out simplefb
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +--------
drivers/gpu/drm/bochs/bochs_drv.c | 18 +------
drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +--------
drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +-------
drivers/gpu/drm/mgag200/mgag200_main.c | 9 ----
drivers/gpu/drm/radeon/radeon_drv.c | 23 +--------
drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +------
drivers/gpu/drm/tegra/drm.c | 4 ++
drivers/gpu/drm/vc4/vc4_drv.c | 20 +-------
drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 ++-------
drivers/video/fbdev/core/fbmem.c | 63 +++++++++++++++++++++++-
include/drm/drm_fb_helper.h | 12 +++++
include/linux/fb.h | 2 +
13 files changed, 89 insertions(+), 172 deletions(-)
--
2.18.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v2 00/12] remove_conflicting_framebuffers() cleanup
From: Michał Mirosław @ 2018-09-01 13:45 UTC (permalink / raw)
To: Chris Wilson
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, amd-gfx,
virtualization, linux-tegra, Thierry Reding, dri-devel,
Daniel Vetter, Alex Deucher, Maxime Ripard, linux-arm-kernel
In-Reply-To: <153570646209.15613.3061584574975657074@skylake-alporthouse-com>
On Fri, Aug 31, 2018 at 10:07:42AM +0100, Chris Wilson wrote:
[...]
> Ahah, someone is looking at remove_conflicting_framebuffers(). May I
> interest you in a use-after-free?
> [ 378.423513] stack segment: 0000 [#1] PREEMPT SMP PTI
> [ 378.423530] CPU: 1 PID: 4338 Comm: pm_rpm Tainted: G U 4.19.0-rc1-CI-CI_DRM_4746+ #1
> [ 378.423548] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./J4205-ITX, BIOS P1.10 09/29/2016
> [ 378.423570] RIP: 0010:do_remove_conflicting_framebuffers+0x56/0x170
> [ 378.423587] Code: 49 8b 45 00 48 85 c0 74 50 f6 40 0a 08 74 4a 4d 85 e4 48 8b a8 78 04 00 00 74 1f 48 85 ed 74 1a 41 8b 0c 24 31 db 85 c9 74 10 <8b> 55 00 85 d2 75 42 83 c3 01 41 39 1c 24 77 f0 48 85 ed 74 1a 45
> [ 378.423620] RSP: 0018:ffffc900001dfa88 EFLAGS: 00010202
> [ 378.423632] RAX: ffff880274470008 RBX: 0000000000000000 RCX: 0000000000000001
> [ 378.423646] RDX: 0000000000000001 RSI: ffffffffa025c634 RDI: ffff88025cc3b428
> [ 378.423660] RBP: 6b6b6b6b6b6b6b6b R08: 000000001edaddfa R09: ffffffffa025c634
> [ 378.423673] R10: ffffc900001dfae8 R11: ffffffff820de938 R12: ffff88025cc3b428
> [ 378.423687] R13: ffffffff8234ca20 R14: ffffffff8234cb20 R15: 0000000000000001
> [ 378.423701] FS: 00007fcf03d0a980(0000) GS:ffff880277e80000(0000) knlGS:0000000000000000
> [ 378.423717] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 378.423729] CR2: 00007fffece1fdb8 CR3: 00000001fe32e000 CR4: 00000000003406e0
> [ 378.423742] Call Trace:
> [ 378.423756] remove_conflicting_framebuffers+0x28/0x40
> [ 378.423856] i915_driver_load+0x7f5/0x10c0 [i915]
[...]
Looks like registered_fb[] entry is pointing to (partially?) freed or
corrupted fb_info, but I can't see how this could be an effect of
remove_conflicting_framebuffers().
Best Regards,
Michał Mirosław
^ permalink raw reply
* ICITS'19 - Quito, Ecuador; Deadline: September 16
From: Marle @ 2018-08-31 13:01 UTC (permalink / raw)
To: virtualization
[-- Attachment #1.1: Type: text/plain, Size: 6040 bytes --]
* Proceedings by Springer, indexed in Scopus, ISI, etc.
***********************************************************
ICITS'19 - The 2019 International Conference on Information Technology & Systems
Quito, Ecuador, 6 - 8 February 2019
http://www.icits.me <http://www.icits.me/>
********************************************************************************
ICITS'19 - The 2019 International Conference on Information Technology & Systems, to be held at Quito, Ecuador, 6 - 8 February 2019, is an international forum for researchers and practitioners to present and discuss the most recent innovations, trends, results, experiences and concerns in the several perspectives of Information Technology & Systems.
We are pleased to invite you to submit your papers to ICITS'19. They can be written in English, Spanish or Portuguese. All submissions will be reviewed on the basis of relevance, originality, importance and clarity.
Topics
Submitted papers should be related with one or more of the main themes proposed for the Conference:
A) Information and Knowledge Management (IKM);
B) Organizational Models and Information Systems (OMIS);
C) Software and Systems Modeling (SSM);
D) Software Systems, Architectures, Applications and Tools (SSAAT);
E) Multimedia Systems and Applications (MSA);
F) Computer Networks, Mobility and Pervasive Systems (CNMPS);
G) Intelligent and Decision Support Systems (IDSS);
H) Big Data Analytics and Applications (BDAA);
I) Human-Computer Interaction (HCI);
J) Ethics, Computers and Security (ECS)
K) Health Informatics (HIS);
L) Information Technologies in Education (ITE);
M) Cybersecurity and Cyber-defense;
N) Electromagnetics, Sensors and Antennas for Security.
Submission and Decision
Submitted papers written in English (until 10-page limit) must comply with the format of Advances in Intelligent Systems and Computing series (see Instructions for Authors at Springer Website <http://www.springer.com/series/11156> or download a DOC example <http://www.icits.me/springerformat.doc>), must not have been published before, not be under review for any other conference or publication and not include any information leading to the authors’ identification. Therefore, the authors’ names, affiliations and bibliographic references should not be included in the version for evaluation by the Scientific Committee. This information should only be included in the camera-ready version, saved in Word or Latex format and also in PDF format. These files must be accompanied by the Consent to Publish form <http://www.icits.me/copyright.pdf> filled out, in a ZIP file, and uploaded at the conference management system.
Submitted papers written in Spanish or Portuguese (until 15-page limit) must comply with the format of RISTI <http://www.risti.xyz/> - Revista Ibérica de Sistemas e Tecnologias de Informação (download instructions/template for authors in Spanish <http://www.risti.xyz/formato-es.doc> or Portuguese <http://www.risti.xyz/formato-pt.doc>), must not have been published before, not be under review for any other conference or publication and not include any information leading to the authors’ identification. Therefore, the authors’ names, affiliations and bibliographic references should not be included in the version for evaluation by the Scientific Committee. This information should only be included in the camera-ready version, saved in Word. These file must be uploaded at the conference management system in a ZIP file.
All papers will be subjected to a “double-blind review” by at least two members of the Scientific Committee.
Based on Scientific Committee evaluation, a paper can be rejected or accepted by the Conference Chairs. In the later case, it can be accepted as paper or poster.
The authors of papers accepted as posters must build and print a poster to be exhibited during the Conference. This poster must follow an A1 or A2 vertical format. The Conference can includes Work Sessions where these posters are presented and orally discussed, with a 7 minute limit per poster.
The authors of accepted papers will have 15 minutes to present their work in a Conference Work Session; approximately 5 minutes of discussion will follow each presentation.
Publication and Indexing
To ensure that an accepted paper is published, at least one of the authors must be fully registered by the 9th of November 2018, and the paper must comply with the suggested layout and page-limit. Additionally, all recommended changes must be addressed by the authors before they submit the camera-ready version.
No more than one paper per registration will be published. An extra fee must be paid for publication of additional papers, with a maximum of one additional paper per registration. One registration permits only the participation of one author in the conference.
Papers written in English and accepted and registered will be published in Proceedings by Springer, in a book of the Advances in Intelligent Systems and Computing <http://www.springer.com/series/11156>series, will be submitted for indexation by ISI, EI-Compendex, SCOPUS and DBLP, among others, and will be available in the SpringerLink Digital Library <http://link.springer.com/>.
Papers written in Spanish or Portuguese and accepted and registered will be published in a Special Issue of RISTI <http://www.risti.xyz/index.php?option=com_content&view=article&id=3&Itemid=104&lang=es> and will be submitted for indexation by SCOPUS, among others.
Important Dates
Paper Submission: September 16, 2018
Notification of Acceptance: October 21, 2018
Payment of Registration, to ensure the inclusion of an accepted paper in the conference proceedings: November 9, 2018.
Camera-ready Submission: November 9, 2018
ICITS'19 website: http://www.icits.me <http://www.icits.me/>
---
Este e-mail foi verificado em termos de vírus pelo AVG.
http://www.avg.com
[-- Attachment #1.2: Type: text/html, Size: 8358 bytes --]
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v2 00/12] remove_conflicting_framebuffers() cleanup
From: Chris Wilson @ 2018-08-31 9:07 UTC (permalink / raw)
To: Michał Mirosław, Daniel Vetter
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, amd-gfx,
virtualization, linux-tegra, Thierry Reding, dri-devel,
Alex Deucher, Maxime Ripard, linux-arm-kernel
In-Reply-To: <20180831090439.GT21634@phenom.ffwll.local>
Quoting Daniel Vetter (2018-08-31 10:04:39)
> On Thu, Aug 30, 2018 at 11:00:01PM +0200, Michał Mirosław wrote:
> > This series cleans up duplicated code for replacing firmware FB
> > driver with proper DRI driver and adds handover support to
> > Tegra driver.
> >
> > This is a sligtly updated version of a series sent on 24 Nov 2017.
> >
> > v2:
> > - rebased on current drm-next
> > - dropped staging/sm750fb changes
> > - added kernel docs for DRM helpers
> >
> > Michał Mirosław (12):
> > fbdev: show fbdev number for debugging
> > fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
> > fbdev: add remove_conflicting_pci_framebuffers()
> > drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
> > drm/bochs: use simpler remove_conflicting_pci_framebuffers()
> > drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
> > drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
> > drm/radeon: use simpler remove_conflicting_pci_framebuffers()
> > drm/virtio: use simpler remove_conflicting_pci_framebuffers()
> > drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
> > drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
> > drm/tegra: kick out simplefb
>
> Looks very neat. A bit confused about the drm changes in the fbdev-titled
> patches 1&3, but I guess we can merge as-is. Up to you whether you want to
> split or not I'd say.
Ahah, someone is looking at remove_conflicting_framebuffers(). May I
interest you in a use-after-free?
[ 378.423513] stack segment: 0000 [#1] PREEMPT SMP PTI
[ 378.423530] CPU: 1 PID: 4338 Comm: pm_rpm Tainted: G U 4.19.0-rc1-CI-CI_DRM_4746+ #1
[ 378.423548] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./J4205-ITX, BIOS P1.10 09/29/2016
[ 378.423570] RIP: 0010:do_remove_conflicting_framebuffers+0x56/0x170
[ 378.423587] Code: 49 8b 45 00 48 85 c0 74 50 f6 40 0a 08 74 4a 4d 85 e4 48 8b a8 78 04 00 00 74 1f 48 85 ed 74 1a 41 8b 0c 24 31 db 85 c9 74 10 <8b> 55 00 85 d2 75 42 83 c3 01 41 39 1c 24 77 f0 48 85 ed 74 1a 45
[ 378.423620] RSP: 0018:ffffc900001dfa88 EFLAGS: 00010202
[ 378.423632] RAX: ffff880274470008 RBX: 0000000000000000 RCX: 0000000000000001
[ 378.423646] RDX: 0000000000000001 RSI: ffffffffa025c634 RDI: ffff88025cc3b428
[ 378.423660] RBP: 6b6b6b6b6b6b6b6b R08: 000000001edaddfa R09: ffffffffa025c634
[ 378.423673] R10: ffffc900001dfae8 R11: ffffffff820de938 R12: ffff88025cc3b428
[ 378.423687] R13: ffffffff8234ca20 R14: ffffffff8234cb20 R15: 0000000000000001
[ 378.423701] FS: 00007fcf03d0a980(0000) GS:ffff880277e80000(0000) knlGS:0000000000000000
[ 378.423717] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 378.423729] CR2: 00007fffece1fdb8 CR3: 00000001fe32e000 CR4: 00000000003406e0
[ 378.423742] Call Trace:
[ 378.423756] remove_conflicting_framebuffers+0x28/0x40
[ 378.423856] i915_driver_load+0x7f5/0x10c0 [i915]
[ 378.423873] ? _raw_spin_unlock_irqrestore+0x4c/0x60
[ 378.423887] ? lockdep_hardirqs_on+0xe0/0x1b0
[ 378.423962] i915_pci_probe+0x29/0xa0 [i915]
[ 378.423977] pci_device_probe+0xa1/0x130
[ 378.423990] really_probe+0x25d/0x3c0
[ 378.424002] driver_probe_device+0x10a/0x120
[ 378.424013] __driver_attach+0xdb/0x100
[ 378.424025] ? driver_probe_device+0x120/0x120
[ 378.424037] bus_for_each_dev+0x74/0xc0
[ 378.424048] bus_add_driver+0x15f/0x250
[ 378.424060] ? 0xffffffffa069d000
[ 378.424070] driver_register+0x56/0xe0
[ 378.424080] ? 0xffffffffa069d000
[ 378.424090] do_one_initcall+0x58/0x2e0
[ 378.424101] ? rcu_lockdep_current_cpu_online+0x8f/0xd0
[ 378.424116] ? do_init_module+0x1d/0x1ea
[ 378.424127] ? rcu_read_lock_sched_held+0x6f/0x80
[ 378.424141] ? kmem_cache_alloc_trace+0x264/0x290
[ 378.424154] do_init_module+0x56/0x1ea
[ 378.424167] load_module+0x26ba/0x29a0
[ 378.424182] ? vfs_read+0x122/0x140
[ 378.424199] ? __se_sys_finit_module+0xd3/0xf0
[ 378.424210] __se_sys_finit_module+0xd3/0xf0
[ 378.424226] do_syscall_64+0x55/0x190
[ 378.424237] entry_SYSCALL_64_after_hwframe+0x49/0xbe
[ 378.424249] RIP: 0033:0x7fcf02f9b839
[ 378.424258] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1f f6 2c 00 f7 d8 64 89 01 48
[ 378.424290] RSP: 002b:00007fffece21f58 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[ 378.424307] RAX: ffffffffffffffda RBX: 000056344e1a4d80 RCX: 00007fcf02f9b839
[ 378.424321] RDX: 0000000000000000 RSI: 00007fcf026470e5 RDI: 0000000000000003
[ 378.424336] RBP: 00007fcf026470e5 R08: 0000000000000000 R09: 0000000000000000
[ 378.424349] R10: 0000000000000003 R11: 0000000000000246 R12: 0000000000000000
[ 378.424363] R13: 000056344e1a0000 R14: 0000000000000000 R15: 000056344e1a4d80
https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4613/fi-bxt-j4205/dmesg0.log
-Chris
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v2 00/12] remove_conflicting_framebuffers() cleanup
From: Daniel Vetter @ 2018-08-31 9:04 UTC (permalink / raw)
To: Michał Mirosław
Cc: linux-fbdev, Bartlomiej Zolnierkiewicz, David Airlie, amd-gfx,
virtualization, Alex Deucher, Thierry Reding, dri-devel,
linux-tegra, Maxime Ripard, linux-arm-kernel
In-Reply-To: <cover.1535656077.git.mirq-linux@rere.qmqm.pl>
On Thu, Aug 30, 2018 at 11:00:01PM +0200, Michał Mirosław wrote:
> This series cleans up duplicated code for replacing firmware FB
> driver with proper DRI driver and adds handover support to
> Tegra driver.
>
> This is a sligtly updated version of a series sent on 24 Nov 2017.
>
> v2:
> - rebased on current drm-next
> - dropped staging/sm750fb changes
> - added kernel docs for DRM helpers
>
> Michał Mirosław (12):
> fbdev: show fbdev number for debugging
> fbdev: allow apertures == NULL in remove_conflicting_framebuffers()
> fbdev: add remove_conflicting_pci_framebuffers()
> drm/amdgpu: use simpler remove_conflicting_pci_framebuffers()
> drm/bochs: use simpler remove_conflicting_pci_framebuffers()
> drm/cirrus: use simpler remove_conflicting_pci_framebuffers()
> drm/mgag200: use simpler remove_conflicting_pci_framebuffers()
> drm/radeon: use simpler remove_conflicting_pci_framebuffers()
> drm/virtio: use simpler remove_conflicting_pci_framebuffers()
> drm/vc4: use simpler remove_conflicting_framebuffers(NULL)
> drm/sun4i: use simpler remove_conflicting_framebuffers(NULL)
> drm/tegra: kick out simplefb
Looks very neat. A bit confused about the drm changes in the fbdev-titled
patches 1&3, but I guess we can merge as-is. Up to you whether you want to
split or not I'd say.
Bartlomiej, ack for pullin in this entire pile through drm-misc?
Thanks, Daniel
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 24 +-------------
> drivers/gpu/drm/bochs/bochs_drv.c | 18 +----------
> drivers/gpu/drm/cirrus/cirrus_drv.c | 23 +-------------
> drivers/gpu/drm/mgag200/mgag200_drv.c | 21 +------------
> drivers/gpu/drm/mgag200/mgag200_main.c | 9 ------
> drivers/gpu/drm/radeon/radeon_drv.c | 23 +-------------
> drivers/gpu/drm/sun4i/sun4i_drv.c | 18 +----------
> drivers/gpu/drm/tegra/drm.c | 4 +++
> drivers/gpu/drm/vc4/vc4_drv.c | 20 +-----------
> drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 24 ++------------
> drivers/video/fbdev/core/fbmem.c | 40 ++++++++++++++++++++++--
> include/drm/drm_fb_helper.h | 34 ++++++++++++++++++++
> include/linux/fb.h | 2 ++
> 13 files changed, 88 insertions(+), 172 deletions(-)
>
> --
> 2.18.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
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