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

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
...@@ -32,11 +32,10 @@ ...@@ -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) ...@@ -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)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment