Commit a2896ced authored by Marcin Slusarz's avatar Marcin Slusarz Committed by Ben Skeggs

drm/nouveau: prepare for reporting channel owner

- record channel owner process name
- add some helpers for accessing this information
- let nouveau_enum hold additional value (will be needed in the next patch)
Signed-off-by: default avatarMarcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent f533da10
...@@ -99,3 +99,13 @@ nouveau_client_fini(struct nouveau_client *client, bool suspend) ...@@ -99,3 +99,13 @@ nouveau_client_fini(struct nouveau_client *client, bool suspend)
nv_debug(client, "%s completed with %d\n", name[suspend], ret); nv_debug(client, "%s completed with %d\n", name[suspend], ret);
return ret; return ret;
} }
const char *
nouveau_client_name(void *obj)
{
const char *client_name = "unknown";
struct nouveau_client *client = nouveau_client(obj);
if (client)
client_name = client->name;
return client_name;
}
...@@ -40,7 +40,7 @@ nouveau_enum_find(const struct nouveau_enum *en, u32 value) ...@@ -40,7 +40,7 @@ nouveau_enum_find(const struct nouveau_enum *en, u32 value)
return NULL; return NULL;
} }
void const struct nouveau_enum *
nouveau_enum_print(const struct nouveau_enum *en, u32 value) nouveau_enum_print(const struct nouveau_enum *en, u32 value)
{ {
en = nouveau_enum_find(en, value); en = nouveau_enum_find(en, value);
...@@ -48,6 +48,7 @@ nouveau_enum_print(const struct nouveau_enum *en, u32 value) ...@@ -48,6 +48,7 @@ nouveau_enum_print(const struct nouveau_enum *en, u32 value)
pr_cont("%s", en->name); pr_cont("%s", en->name);
else else
pr_cont("(unknown enum 0x%08x)", value); pr_cont("(unknown enum 0x%08x)", value);
return en;
} }
void void
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
* Authors: Ben Skeggs * Authors: Ben Skeggs
*/ */
#include <core/client.h>
#include <core/object.h> #include <core/object.h>
#include <core/handle.h> #include <core/handle.h>
#include <core/class.h> #include <core/class.h>
...@@ -146,6 +147,20 @@ nouveau_fifo_chid(struct nouveau_fifo *priv, struct nouveau_object *object) ...@@ -146,6 +147,20 @@ nouveau_fifo_chid(struct nouveau_fifo *priv, struct nouveau_object *object)
return -1; return -1;
} }
const char *
nouveau_client_name_for_fifo_chid(struct nouveau_fifo *fifo, u32 chid)
{
struct nouveau_fifo_chan *chan = NULL;
unsigned long flags;
spin_lock_irqsave(&fifo->lock, flags);
if (chid >= fifo->min && chid <= fifo->max)
chan = (void *)fifo->channel[chid];
spin_unlock_irqrestore(&fifo->lock, flags);
return nouveau_client_name(chan);
}
void void
nouveau_fifo_destroy(struct nouveau_fifo *priv) nouveau_fifo_destroy(struct nouveau_fifo *priv)
{ {
......
...@@ -7,7 +7,7 @@ struct nouveau_client { ...@@ -7,7 +7,7 @@ struct nouveau_client {
struct nouveau_namedb base; struct nouveau_namedb base;
struct nouveau_handle *root; struct nouveau_handle *root;
struct nouveau_object *device; struct nouveau_object *device;
char name[16]; char name[32];
u32 debug; u32 debug;
struct nouveau_vm *vm; struct nouveau_vm *vm;
}; };
...@@ -41,5 +41,6 @@ int nouveau_client_create_(const char *name, u64 device, const char *cfg, ...@@ -41,5 +41,6 @@ int nouveau_client_create_(const char *name, u64 device, const char *cfg,
int nouveau_client_init(struct nouveau_client *); int nouveau_client_init(struct nouveau_client *);
int nouveau_client_fini(struct nouveau_client *, bool suspend); int nouveau_client_fini(struct nouveau_client *, bool suspend);
const char *nouveau_client_name(void *obj);
#endif #endif
...@@ -5,12 +5,13 @@ struct nouveau_enum { ...@@ -5,12 +5,13 @@ struct nouveau_enum {
u32 value; u32 value;
const char *name; const char *name;
const void *data; const void *data;
u32 data2;
}; };
const struct nouveau_enum * const struct nouveau_enum *
nouveau_enum_find(const struct nouveau_enum *, u32 value); nouveau_enum_find(const struct nouveau_enum *, u32 value);
void const struct nouveau_enum *
nouveau_enum_print(const struct nouveau_enum *en, u32 value); nouveau_enum_print(const struct nouveau_enum *en, u32 value);
struct nouveau_bitfield { struct nouveau_bitfield {
......
...@@ -92,6 +92,8 @@ int nouveau_fifo_create_(struct nouveau_object *, struct nouveau_object *, ...@@ -92,6 +92,8 @@ int nouveau_fifo_create_(struct nouveau_object *, struct nouveau_object *,
struct nouveau_oclass *, int min, int max, struct nouveau_oclass *, int min, int max,
int size, void **); int size, void **);
void nouveau_fifo_destroy(struct nouveau_fifo *); void nouveau_fifo_destroy(struct nouveau_fifo *);
const char *
nouveau_client_name_for_fifo_chid(struct nouveau_fifo *fifo, u32 chid);
#define _nouveau_fifo_init _nouveau_engine_init #define _nouveau_fifo_init _nouveau_engine_init
#define _nouveau_fifo_fini _nouveau_engine_fini #define _nouveau_fifo_fini _nouveau_engine_fini
......
...@@ -543,10 +543,11 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv) ...@@ -543,10 +543,11 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
struct pci_dev *pdev = dev->pdev; struct pci_dev *pdev = dev->pdev;
struct nouveau_drm *drm = nouveau_drm(dev); struct nouveau_drm *drm = nouveau_drm(dev);
struct nouveau_cli *cli; struct nouveau_cli *cli;
char name[16]; char name[32], tmpname[TASK_COMM_LEN];
int ret; int ret;
snprintf(name, sizeof(name), "%d", pid_nr(fpriv->pid)); get_task_comm(tmpname, current);
snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
ret = nouveau_cli_create(pdev, name, sizeof(*cli), (void **)&cli); ret = nouveau_cli_create(pdev, name, sizeof(*cli), (void **)&cli);
if (ret) if (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