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

Commit 786a57ef authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/abi16: introduce locked variant of nouveau_abi16_get()



USIF already takes the client mutex, but will need access to ABI16 data
in order to provide some limited interoperability.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 09433f24
Loading
Loading
Loading
Loading
+13 −5
Original line number Original line Diff line number Diff line
@@ -32,11 +32,10 @@
#include "nouveau_chan.h"
#include "nouveau_chan.h"
#include "nouveau_abi16.h"
#include "nouveau_abi16.h"


struct nouveau_abi16 *
static struct nouveau_abi16 *
nouveau_abi16_get(struct drm_file *file_priv)
nouveau_abi16(struct drm_file *file_priv)
{
{
	struct nouveau_cli *cli = nouveau_cli(file_priv);
	struct nouveau_cli *cli = nouveau_cli(file_priv);
	mutex_lock(&cli->mutex);
	if (!cli->abi16) {
	if (!cli->abi16) {
		struct nouveau_abi16 *abi16;
		struct nouveau_abi16 *abi16;
		cli->abi16 = abi16 = kzalloc(sizeof(*abi16), GFP_KERNEL);
		cli->abi16 = abi16 = kzalloc(sizeof(*abi16), GFP_KERNEL);
@@ -59,12 +58,21 @@ nouveau_abi16_get(struct drm_file *file_priv)
			kfree(cli->abi16);
			kfree(cli->abi16);
			cli->abi16 = NULL;
			cli->abi16 = NULL;
		}
		}

		mutex_unlock(&cli->mutex);
	}
	}
	return cli->abi16;
	return cli->abi16;
}
}


struct nouveau_abi16 *
nouveau_abi16_get(struct drm_file *file_priv)
{
	struct nouveau_cli *cli = nouveau_cli(file_priv);
	mutex_lock(&cli->mutex);
	if (nouveau_abi16(file_priv))
		return cli->abi16;
	mutex_unlock(&cli->mutex);
	return NULL;
}

int
int
nouveau_abi16_put(struct nouveau_abi16 *abi16, int ret)
nouveau_abi16_put(struct nouveau_abi16 *abi16, int ret)
{
{