Commit f00059b4 authored by Philipp Stanner's avatar Philipp Stanner Committed by Bjorn Helgaas

drm/vboxvideo: fix mapping leaks

When the PCI devres API was introduced to this driver, it was wrongly
assumed that initializing the device with pcim_enable_device() instead of
pci_enable_device() will make all PCI functions managed.

This is wrong and was caused by the quite confusing PCI devres API in which
some, but not all, functions become managed that way.

The function pci_iomap_range() is never managed.

Replace pci_iomap_range() with the managed function pcim_iomap_range().

Fixes: 8558de40 ("drm/vboxvideo: use managed pci functions")
Link: https://lore.kernel.org/r/20240613115032.29098-14-pstanner@redhat.comSigned-off-by: default avatarPhilipp Stanner <pstanner@redhat.com>
Signed-off-by: default avatarKrzysztof Wilczyński <kwilczynski@kernel.org>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
parent ad78e05d
...@@ -42,12 +42,11 @@ static int vbox_accel_init(struct vbox_private *vbox) ...@@ -42,12 +42,11 @@ static int vbox_accel_init(struct vbox_private *vbox)
/* Take a command buffer for each screen from the end of usable VRAM. */ /* Take a command buffer for each screen from the end of usable VRAM. */
vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE; vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
vbox->vbva_buffers = pci_iomap_range(pdev, 0, vbox->vbva_buffers = pcim_iomap_range(
vbox->available_vram_size, pdev, 0, vbox->available_vram_size,
vbox->num_crtcs * vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE);
VBVA_MIN_BUFFER_SIZE); if (IS_ERR(vbox->vbva_buffers))
if (!vbox->vbva_buffers) return PTR_ERR(vbox->vbva_buffers);
return -ENOMEM;
for (i = 0; i < vbox->num_crtcs; ++i) { for (i = 0; i < vbox->num_crtcs; ++i) {
vbva_setup_buffer_context(&vbox->vbva_info[i], vbva_setup_buffer_context(&vbox->vbva_info[i],
...@@ -116,11 +115,10 @@ int vbox_hw_init(struct vbox_private *vbox) ...@@ -116,11 +115,10 @@ int vbox_hw_init(struct vbox_private *vbox)
DRM_INFO("VRAM %08x\n", vbox->full_vram_size); DRM_INFO("VRAM %08x\n", vbox->full_vram_size);
/* Map guest-heap at end of vram */ /* Map guest-heap at end of vram */
vbox->guest_heap = vbox->guest_heap = pcim_iomap_range(pdev, 0,
pci_iomap_range(pdev, 0, GUEST_HEAP_OFFSET(vbox), GUEST_HEAP_OFFSET(vbox), GUEST_HEAP_SIZE);
GUEST_HEAP_SIZE); if (IS_ERR(vbox->guest_heap))
if (!vbox->guest_heap) return PTR_ERR(vbox->guest_heap);
return -ENOMEM;
/* Create guest-heap mem-pool use 2^4 = 16 byte chunks */ /* Create guest-heap mem-pool use 2^4 = 16 byte chunks */
vbox->guest_pool = devm_gen_pool_create(vbox->ddev.dev, 4, -1, vbox->guest_pool = devm_gen_pool_create(vbox->ddev.dev, 4, -1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment