drm/i915/gvt: clean up intel_gvt.h as interface for i915 core
i915 core should only call functions and structures exposed through intel_gvt.h. Remove internal gvt.h and i915_pvinfo.h. Change for internal intel_gvt structure as private handler which not requires to expose gvt internal structure for i915 core. v2: Fix per Chris's comment - carefully handle dev_priv->gvt assignment - add necessary bracket for macro helper - forward declartion struct intel_gvt - keep free operation within same file handling alloc v3: fix use after free and remove intel_gvt.initialized v4: change to_gvt() to an inline Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
1140f9ed05
commit
feddf6e866
@ -35,6 +35,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
#define MB_TO_BYTES(mb) ((mb) << 20ULL)
|
#define MB_TO_BYTES(mb) ((mb) << 20ULL)
|
||||||
#define BYTES_TO_MB(b) ((b) >> 20ULL)
|
#define BYTES_TO_MB(b) ((b) >> 20ULL)
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
INTEL_GVT_PCI_BAR_GTTMMIO = 0,
|
INTEL_GVT_PCI_BAR_GTTMMIO = 0,
|
||||||
|
|||||||
@ -36,6 +36,8 @@
|
|||||||
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
#include "i915_pvinfo.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
#define INVALID_OP (~0U)
|
#define INVALID_OP (~0U)
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
static int get_edp_pipe(struct intel_vgpu *vgpu)
|
static int get_edp_pipe(struct intel_vgpu *vgpu)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
#define GMBUS1_TOTAL_BYTES_SHIFT 16
|
#define GMBUS1_TOTAL_BYTES_SHIFT 16
|
||||||
#define GMBUS1_TOTAL_BYTES_MASK 0x1ff
|
#define GMBUS1_TOTAL_BYTES_MASK 0x1ff
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
#define _EL_OFFSET_STATUS 0x234
|
#define _EL_OFFSET_STATUS 0x234
|
||||||
#define _EL_OFFSET_STATUS_BUF 0x370
|
#define _EL_OFFSET_STATUS_BUF 0x370
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
#include <linux/crc32.h>
|
#include <linux/crc32.h>
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
#include "i915_pvinfo.h"
|
||||||
|
|
||||||
#define FIRMWARE_VERSION (0x0)
|
#define FIRMWARE_VERSION (0x0)
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
#include "i915_pvinfo.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
static bool enable_out_of_sync = false;
|
static bool enable_out_of_sync = false;
|
||||||
|
|||||||
@ -35,6 +35,7 @@
|
|||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
struct intel_gvt_host intel_gvt_host;
|
struct intel_gvt_host intel_gvt_host;
|
||||||
|
|
||||||
@ -173,9 +174,9 @@ static int init_service_thread(struct intel_gvt *gvt)
|
|||||||
*/
|
*/
|
||||||
void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
|
void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
struct intel_gvt *gvt = &dev_priv->gvt;
|
struct intel_gvt *gvt = to_gvt(dev_priv);
|
||||||
|
|
||||||
if (WARN_ON(!gvt->initialized))
|
if (WARN_ON(!gvt))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
clean_service_thread(gvt);
|
clean_service_thread(gvt);
|
||||||
@ -188,7 +189,8 @@ void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
|
|||||||
intel_gvt_clean_mmio_info(gvt);
|
intel_gvt_clean_mmio_info(gvt);
|
||||||
intel_gvt_free_firmware(gvt);
|
intel_gvt_free_firmware(gvt);
|
||||||
|
|
||||||
gvt->initialized = false;
|
kfree(dev_priv->gvt);
|
||||||
|
dev_priv->gvt = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -204,7 +206,7 @@ void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
|
|||||||
*/
|
*/
|
||||||
int intel_gvt_init_device(struct drm_i915_private *dev_priv)
|
int intel_gvt_init_device(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
struct intel_gvt *gvt = &dev_priv->gvt;
|
struct intel_gvt *gvt;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -214,9 +216,13 @@ int intel_gvt_init_device(struct drm_i915_private *dev_priv)
|
|||||||
if (WARN_ON(!intel_gvt_host.initialized))
|
if (WARN_ON(!intel_gvt_host.initialized))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (WARN_ON(gvt->initialized))
|
if (WARN_ON(dev_priv->gvt))
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
|
|
||||||
|
gvt = kzalloc(sizeof(struct intel_gvt), GFP_KERNEL);
|
||||||
|
if (!gvt)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
gvt_dbg_core("init gvt device\n");
|
gvt_dbg_core("init gvt device\n");
|
||||||
|
|
||||||
mutex_init(&gvt->lock);
|
mutex_init(&gvt->lock);
|
||||||
@ -261,7 +267,7 @@ int intel_gvt_init_device(struct drm_i915_private *dev_priv)
|
|||||||
goto out_clean_cmd_parser;
|
goto out_clean_cmd_parser;
|
||||||
|
|
||||||
gvt_dbg_core("gvt device creation is done\n");
|
gvt_dbg_core("gvt device creation is done\n");
|
||||||
gvt->initialized = true;
|
dev_priv->gvt = gvt;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_clean_cmd_parser:
|
out_clean_cmd_parser:
|
||||||
@ -280,5 +286,6 @@ out_free_firmware:
|
|||||||
intel_gvt_free_firmware(gvt);
|
intel_gvt_free_firmware(gvt);
|
||||||
out_clean_mmio_info:
|
out_clean_mmio_info:
|
||||||
intel_gvt_clean_mmio_info(gvt);
|
intel_gvt_clean_mmio_info(gvt);
|
||||||
|
kfree(gvt);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -192,8 +192,6 @@ struct intel_gvt_opregion {
|
|||||||
|
|
||||||
struct intel_gvt {
|
struct intel_gvt {
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
bool initialized;
|
|
||||||
|
|
||||||
struct drm_i915_private *dev_priv;
|
struct drm_i915_private *dev_priv;
|
||||||
struct idr vgpu_idr; /* vGPU IDR pool */
|
struct idr vgpu_idr; /* vGPU IDR pool */
|
||||||
|
|
||||||
@ -213,6 +211,11 @@ struct intel_gvt {
|
|||||||
unsigned long service_request;
|
unsigned long service_request;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline struct intel_gvt *to_gvt(struct drm_i915_private *i915)
|
||||||
|
{
|
||||||
|
return i915->gvt;
|
||||||
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
INTEL_GVT_REQUEST_EMULATE_VBLANK = 0,
|
INTEL_GVT_REQUEST_EMULATE_VBLANK = 0,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -37,6 +37,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
#include "i915_pvinfo.h"
|
||||||
|
|
||||||
/* XXX FIXME i915 has changed PP_XXX definition */
|
/* XXX FIXME i915 has changed PP_XXX definition */
|
||||||
#define PCH_PP_STATUS _MMIO(0xc7200)
|
#define PCH_PP_STATUS _MMIO(0xc7200)
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
/* common offset among interrupt control registers */
|
/* common offset among interrupt control registers */
|
||||||
#define regbase_to_isr(base) (base)
|
#define regbase_to_isr(base) (base)
|
||||||
|
|||||||
@ -34,6 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* intel_vgpu_gpa_to_mmio_offset - translate a GPA to MMIO offset
|
* intel_vgpu_gpa_to_mmio_offset - translate a GPA to MMIO offset
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
static int init_vgpu_opregion(struct intel_vgpu *vgpu, u32 gpa)
|
static int init_vgpu_opregion(struct intel_vgpu *vgpu, u32 gpa)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -34,6 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
struct render_mmio {
|
struct render_mmio {
|
||||||
int ring_id;
|
int ring_id;
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
static bool vgpu_has_pending_workload(struct intel_vgpu *vgpu)
|
static bool vgpu_has_pending_workload(struct intel_vgpu *vgpu)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,10 +33,11 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
|
||||||
|
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
|
|
||||||
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
|
||||||
#define RING_CTX_OFF(x) \
|
#define RING_CTX_OFF(x) \
|
||||||
offsetof(struct execlist_ring_context, x)
|
offsetof(struct execlist_ring_context, x)
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
|
#include "gvt.h"
|
||||||
|
#include "i915_pvinfo.h"
|
||||||
|
|
||||||
static void clean_vgpu_mmio(struct intel_vgpu *vgpu)
|
static void clean_vgpu_mmio(struct intel_vgpu *vgpu)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1778,7 +1778,7 @@ struct drm_i915_private {
|
|||||||
|
|
||||||
struct i915_virtual_gpu vgpu;
|
struct i915_virtual_gpu vgpu;
|
||||||
|
|
||||||
struct intel_gvt gvt;
|
struct intel_gvt *gvt;
|
||||||
|
|
||||||
struct intel_guc guc;
|
struct intel_guc guc;
|
||||||
|
|
||||||
@ -2992,7 +2992,7 @@ int intel_wait_for_register_fw(struct drm_i915_private *dev_priv,
|
|||||||
|
|
||||||
static inline bool intel_gvt_active(struct drm_i915_private *dev_priv)
|
static inline bool intel_gvt_active(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
return dev_priv->gvt.initialized;
|
return dev_priv->gvt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool intel_vgpu_active(struct drm_i915_private *dev_priv)
|
static inline bool intel_vgpu_active(struct drm_i915_private *dev_priv)
|
||||||
|
|||||||
@ -24,8 +24,7 @@
|
|||||||
#ifndef _INTEL_GVT_H_
|
#ifndef _INTEL_GVT_H_
|
||||||
#define _INTEL_GVT_H_
|
#define _INTEL_GVT_H_
|
||||||
|
|
||||||
#include "i915_pvinfo.h"
|
struct intel_gvt;
|
||||||
#include "gvt/gvt.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_I915_GVT
|
#ifdef CONFIG_DRM_I915_GVT
|
||||||
int intel_gvt_init(struct drm_i915_private *dev_priv);
|
int intel_gvt_init(struct drm_i915_private *dev_priv);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user