Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9aecbada authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/device: have engine object initialised before creation



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent dded35de
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -58,8 +58,9 @@ nouveau_client_create_(const char *name, u64 devname, const char *cfg,
		return -ENODEV;

	ret = nouveau_namedb_create_(NULL, NULL, &nouveau_client_oclass,
				     NV_CLIENT_CLASS, nouveau_device_sclass,
				     0, length, pobject);
				     NV_CLIENT_CLASS, NULL,
				     (1ULL << NVDEV_ENGINE_DEVICE),
				     length, pobject);
	client = *pobject;
	if (ret)
		return ret;
+7 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include <core/object.h>
#include <core/parent.h>
#include <core/client.h>

int
nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
@@ -50,7 +51,12 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
	while (mask) {
		int i = ffsll(mask) - 1;

		if ((engine = nouveau_engine(parent, i))) {
		if (nv_iclass(parent, NV_CLIENT_CLASS))
			engine = nv_engine(nv_client(parent)->device);
		else
			engine = nouveau_engine(parent, i);

		if (engine) {
			oclass = engine->sclass;
			while (oclass->ofuncs) {
				if ((oclass->handle & 0xffff) == handle) {
+2 −1
Original line number Diff line number Diff line
@@ -413,7 +413,7 @@ nouveau_devobj_ofuncs = {
/******************************************************************************
 * nouveau_device: engine functions
 *****************************************************************************/
struct nouveau_oclass
static struct nouveau_oclass
nouveau_device_sclass[] = {
	{ 0x0080, &nouveau_devobj_ofuncs },
	{}
@@ -470,6 +470,7 @@ nouveau_device_create_(struct pci_dev *pdev, u64 name, const char *sname,
	device->name = sname;

	nv_subdev(device)->debug = nouveau_dbgopt(device->dbgopt, "DEVICE");
	nv_engine(device)->sclass = nouveau_device_sclass;
	list_add(&device->head, &nv_devices);
done:
	mutex_unlock(&nv_devices_mutex);
+0 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ int nv50_identify(struct nouveau_device *);
int nvc0_identify(struct nouveau_device *);
int nve0_identify(struct nouveau_device *);

extern struct nouveau_oclass nouveau_device_sclass[];
struct nouveau_device *nouveau_device_find(u64 name);

#endif