mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
accel/qaic: Use devm_drm_dev_alloc() instead of drm_dev_alloc()
Since drm_dev_alloc() is deprecated it is recommended to use devm_drm_dev_alloc() instead. Update the driver to start using devm_drm_dev_alloc(). Signed-off-by: Pranjal Ramajor Asha Kanojiya <quic_pkanojiy@quicinc.com> Reviewed-by: Carl Vanderlip <quic_carlv@quicinc.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230901161236.8371-1-quic_jhugo@quicinc.com
This commit is contained in:
parent
1006d67413
commit
ea097ffa42
@ -27,6 +27,9 @@
|
||||
#define QAIC_DBC_OFF(i) ((i) * QAIC_DBC_SIZE + QAIC_DBC_BASE)
|
||||
|
||||
#define to_qaic_bo(obj) container_of(obj, struct qaic_bo, base)
|
||||
#define to_qaic_drm_device(dev) container_of(dev, struct qaic_drm_device, drm)
|
||||
#define to_drm(qddev) (&(qddev)->drm)
|
||||
#define to_accel_kdev(qddev) (to_drm(qddev)->accel->kdev) /* Return Linux device of accel node */
|
||||
|
||||
extern bool datapath_polling;
|
||||
|
||||
@ -137,6 +140,8 @@ struct qaic_device {
|
||||
};
|
||||
|
||||
struct qaic_drm_device {
|
||||
/* The drm device struct of this drm device */
|
||||
struct drm_device drm;
|
||||
/* Pointer to the root device struct driven by this driver */
|
||||
struct qaic_device *qdev;
|
||||
/*
|
||||
@ -146,8 +151,6 @@ struct qaic_drm_device {
|
||||
* device is the actual physical device
|
||||
*/
|
||||
s32 partition_id;
|
||||
/* Pointer to the drm device struct of this drm device */
|
||||
struct drm_device *ddev;
|
||||
/* Head in list of users who have opened this drm device */
|
||||
struct list_head users;
|
||||
/* Synchronizes access to users list */
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <drm/drm_file.h>
|
||||
#include <drm/drm_gem.h>
|
||||
#include <drm/drm_ioctl.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <uapi/drm/qaic_accel.h>
|
||||
|
||||
#include "mhi_controller.h"
|
||||
@ -55,7 +56,7 @@ static void free_usr(struct kref *kref)
|
||||
|
||||
static int qaic_open(struct drm_device *dev, struct drm_file *file)
|
||||
{
|
||||
struct qaic_drm_device *qddev = dev->dev_private;
|
||||
struct qaic_drm_device *qddev = to_qaic_drm_device(dev);
|
||||
struct qaic_device *qdev = qddev->qdev;
|
||||
struct qaic_user *usr;
|
||||
int rcu_id;
|
||||
@ -170,64 +171,39 @@ static const struct drm_driver qaic_accel_driver = {
|
||||
|
||||
static int qaic_create_drm_device(struct qaic_device *qdev, s32 partition_id)
|
||||
{
|
||||
struct qaic_drm_device *qddev;
|
||||
struct drm_device *ddev;
|
||||
struct device *pdev;
|
||||
struct qaic_drm_device *qddev = qdev->qddev;
|
||||
struct drm_device *drm = to_drm(qddev);
|
||||
int ret;
|
||||
|
||||
/* Hold off implementing partitions until the uapi is determined */
|
||||
if (partition_id != QAIC_NO_PARTITION)
|
||||
return -EINVAL;
|
||||
|
||||
pdev = &qdev->pdev->dev;
|
||||
|
||||
qddev = kzalloc(sizeof(*qddev), GFP_KERNEL);
|
||||
if (!qddev)
|
||||
return -ENOMEM;
|
||||
|
||||
ddev = drm_dev_alloc(&qaic_accel_driver, pdev);
|
||||
if (IS_ERR(ddev)) {
|
||||
ret = PTR_ERR(ddev);
|
||||
goto ddev_fail;
|
||||
}
|
||||
|
||||
ddev->dev_private = qddev;
|
||||
qddev->ddev = ddev;
|
||||
|
||||
qddev->qdev = qdev;
|
||||
qddev->partition_id = partition_id;
|
||||
INIT_LIST_HEAD(&qddev->users);
|
||||
mutex_init(&qddev->users_mutex);
|
||||
|
||||
qdev->qddev = qddev;
|
||||
/*
|
||||
* drm_dev_unregister() sets the driver data to NULL and
|
||||
* drm_dev_register() does not update the driver data. During a SOC
|
||||
* reset drm dev is unregistered and registered again leaving the
|
||||
* driver data to NULL.
|
||||
*/
|
||||
dev_set_drvdata(to_accel_kdev(qddev), drm->accel);
|
||||
ret = drm_dev_register(drm, 0);
|
||||
if (ret)
|
||||
pci_dbg(qdev->pdev, "drm_dev_register failed %d\n", ret);
|
||||
|
||||
ret = drm_dev_register(ddev, 0);
|
||||
if (ret) {
|
||||
pci_dbg(qdev->pdev, "%s: drm_dev_register failed %d\n", __func__, ret);
|
||||
goto drm_reg_fail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
drm_reg_fail:
|
||||
mutex_destroy(&qddev->users_mutex);
|
||||
qdev->qddev = NULL;
|
||||
drm_dev_put(ddev);
|
||||
ddev_fail:
|
||||
kfree(qddev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void qaic_destroy_drm_device(struct qaic_device *qdev, s32 partition_id)
|
||||
{
|
||||
struct qaic_drm_device *qddev;
|
||||
struct qaic_drm_device *qddev = qdev->qddev;
|
||||
struct drm_device *drm = to_drm(qddev);
|
||||
struct qaic_user *usr;
|
||||
|
||||
qddev = qdev->qddev;
|
||||
qdev->qddev = NULL;
|
||||
if (!qddev)
|
||||
return;
|
||||
|
||||
drm_dev_get(drm);
|
||||
drm_dev_unregister(drm);
|
||||
qddev->partition_id = 0;
|
||||
/*
|
||||
* Existing users get unresolvable errors till they close FDs.
|
||||
* Need to sync carefully with users calling close(). The
|
||||
@ -254,13 +230,7 @@ static void qaic_destroy_drm_device(struct qaic_device *qdev, s32 partition_id)
|
||||
mutex_lock(&qddev->users_mutex);
|
||||
}
|
||||
mutex_unlock(&qddev->users_mutex);
|
||||
|
||||
if (qddev->ddev) {
|
||||
drm_dev_unregister(qddev->ddev);
|
||||
drm_dev_put(qddev->ddev);
|
||||
}
|
||||
|
||||
kfree(qddev);
|
||||
drm_dev_put(drm);
|
||||
}
|
||||
|
||||
static int qaic_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_device_id *id)
|
||||
@ -344,8 +314,20 @@ void qaic_dev_reset_clean_local_state(struct qaic_device *qdev, bool exit_reset)
|
||||
qdev->in_reset = false;
|
||||
}
|
||||
|
||||
static void cleanup_qdev(struct qaic_device *qdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < qdev->num_dbc; ++i)
|
||||
cleanup_srcu_struct(&qdev->dbc[i].ch_lock);
|
||||
cleanup_srcu_struct(&qdev->dev_lock);
|
||||
pci_set_drvdata(qdev->pdev, NULL);
|
||||
destroy_workqueue(qdev->cntl_wq);
|
||||
}
|
||||
|
||||
static struct qaic_device *create_qdev(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
{
|
||||
struct qaic_drm_device *qddev;
|
||||
struct qaic_device *qdev;
|
||||
int i;
|
||||
|
||||
@ -381,20 +363,20 @@ static struct qaic_device *create_qdev(struct pci_dev *pdev, const struct pci_de
|
||||
INIT_LIST_HEAD(&qdev->dbc[i].bo_lists);
|
||||
}
|
||||
|
||||
qddev = devm_drm_dev_alloc(&pdev->dev, &qaic_accel_driver, struct qaic_drm_device, drm);
|
||||
if (IS_ERR(qddev)) {
|
||||
cleanup_qdev(qdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
drmm_mutex_init(to_drm(qddev), &qddev->users_mutex);
|
||||
INIT_LIST_HEAD(&qddev->users);
|
||||
qddev->qdev = qdev;
|
||||
qdev->qddev = qddev;
|
||||
|
||||
return qdev;
|
||||
}
|
||||
|
||||
static void cleanup_qdev(struct qaic_device *qdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < qdev->num_dbc; ++i)
|
||||
cleanup_srcu_struct(&qdev->dbc[i].ch_lock);
|
||||
cleanup_srcu_struct(&qdev->dev_lock);
|
||||
pci_set_drvdata(qdev->pdev, NULL);
|
||||
destroy_workqueue(qdev->cntl_wq);
|
||||
}
|
||||
|
||||
static int init_pci(struct qaic_device *qdev, struct pci_dev *pdev)
|
||||
{
|
||||
int bars;
|
||||
|
Loading…
Reference in New Issue
Block a user