A fix for vc4 to address a memory leak when allocating a buffer, a
Kconfig fix for panfrost and two fixes for i915 and fb-helper to address some bugs with vga-switcheroo. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRcEzekXsqa64kGDp7j7w1vZxhRxQUCY8j9NQAKCRDj7w1vZxhR xYDhAP4mPeqkQWEcKD0KOxd+vG3khWTcB8BrHS8gJfxZgDVUxQEA5hsRluQ9MsNV o1Q/qYvpAJzNYKJiPkff/SCOuy8JpQE= =1LL3 -----END PGP SIGNATURE----- Merge tag 'drm-misc-fixes-2023-01-19' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes A fix for vc4 to address a memory leak when allocating a buffer, a Kconfig fix for panfrost and two fixes for i915 and fb-helper to address some bugs with vga-switcheroo. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20230119082059.h32bs7zqoxmjbcvn@houat
This commit is contained in:
commit
6bb517df54
|
@ -30,7 +30,9 @@
|
|||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/console.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/sysrq.h>
|
||||
#include <linux/vga_switcheroo.h>
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_drv.h>
|
||||
|
@ -1909,6 +1911,11 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
|
|||
return ret;
|
||||
|
||||
strcpy(fb_helper->fb->comm, "[fbcon]");
|
||||
|
||||
/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
|
||||
if (dev_is_pci(dev->dev))
|
||||
vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1069,12 +1069,9 @@ static int i915_driver_open(struct drm_device *dev, struct drm_file *file)
|
|||
*/
|
||||
static void i915_driver_lastclose(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(dev);
|
||||
|
||||
intel_fbdev_restore_mode(dev);
|
||||
|
||||
if (HAS_DISPLAY(i915))
|
||||
vga_switcheroo_process_delayed_switch();
|
||||
vga_switcheroo_process_delayed_switch();
|
||||
}
|
||||
|
||||
static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
|
||||
|
|
|
@ -19,6 +19,10 @@ static void i915_switcheroo_set_state(struct pci_dev *pdev,
|
|||
dev_err(&pdev->dev, "DRM not initialized, aborting switch.\n");
|
||||
return;
|
||||
}
|
||||
if (!HAS_DISPLAY(i915)) {
|
||||
dev_err(&pdev->dev, "Device state not initialized, aborting switch.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (state == VGA_SWITCHEROO_ON) {
|
||||
drm_info(&i915->drm, "switched on\n");
|
||||
|
@ -44,7 +48,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
|
|||
* locking inversion with the driver load path. And the access here is
|
||||
* completely racy anyway. So don't bother with locking for now.
|
||||
*/
|
||||
return i915 && atomic_read(&i915->drm.open_count) == 0;
|
||||
return i915 && HAS_DISPLAY(i915) && atomic_read(&i915->drm.open_count) == 0;
|
||||
}
|
||||
|
||||
static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
config DRM_PANFROST
|
||||
tristate "Panfrost (DRM support for ARM Mali Midgard/Bifrost GPUs)"
|
||||
depends on DRM
|
||||
depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
|
||||
depends on ARM || ARM64 || COMPILE_TEST
|
||||
depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
|
||||
depends on MMU
|
||||
select DRM_SCHED
|
||||
select IOMMU_SUPPORT
|
||||
|
|
|
@ -179,6 +179,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo)
|
|||
bo->validated_shader = NULL;
|
||||
}
|
||||
|
||||
mutex_destroy(&bo->madv_lock);
|
||||
drm_gem_dma_free(&bo->base);
|
||||
}
|
||||
|
||||
|
@ -394,7 +395,6 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
|
|||
{
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
struct vc4_bo *bo;
|
||||
int ret;
|
||||
|
||||
if (WARN_ON_ONCE(vc4->is_vc5))
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
@ -406,9 +406,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
|
|||
bo->madv = VC4_MADV_WILLNEED;
|
||||
refcount_set(&bo->usecnt, 0);
|
||||
|
||||
ret = drmm_mutex_init(dev, &bo->madv_lock);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
mutex_init(&bo->madv_lock);
|
||||
|
||||
mutex_lock(&vc4->bo_lock);
|
||||
bo->label = VC4_BO_TYPE_KERNEL;
|
||||
|
|
Loading…
Reference in New Issue