mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
gpu: nvgpu: track dev nodes using dynamic linked list
Remove static dev node meta data from struct nvgpu_os_linux and replace it by a dynamic list. Struct nvgpu_os_linux will only keep track of list head and number of entries. Add new structure nvgpu_cdev to store meta data of each dev node and create/setup it dynamically in gk20a_user_init(). Once done, add the new node under list head maintained in nvgpu_os_linux. Add a static list dev_node_list[] that contains list of dev node names and file operations. This static list is used to create nvgpu_cdev data structures and to register new device nodes. Update all dev node open file operations (e.g. gk20a_as_dev_open()) to extract struct gk20a pointer from device pointer of dev node. gk20a device is the parent of dev node device. Jira NVGPU-5648 Change-Id: If070c3428afd6215e45b4919335d9f43e04c36f9 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2428500 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Alex Waterman
parent
9082bcf3bd
commit
a3e39c685d
@@ -73,6 +73,19 @@ struct dgpu_thermal_alert {
|
||||
u32 event_delay;
|
||||
};
|
||||
|
||||
struct nvgpu_cdev {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
struct nvgpu_list_node list_entry;
|
||||
};
|
||||
|
||||
static inline struct nvgpu_cdev *
|
||||
nvgpu_cdev_from_list_entry(struct nvgpu_list_node *node)
|
||||
{
|
||||
return (struct nvgpu_cdev *)
|
||||
((uintptr_t)node - offsetof(struct nvgpu_cdev, list_entry));
|
||||
};
|
||||
|
||||
struct nvgpu_os_linux {
|
||||
struct gk20a g;
|
||||
struct device *dev;
|
||||
@@ -80,55 +93,8 @@ struct nvgpu_os_linux {
|
||||
struct nvgpu_interrupts interrupts;
|
||||
struct class *devnode_class;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} channel;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} ctrl;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} as_dev;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} dbg;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} prof;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} prof_dev;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} prof_ctx;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} tsg;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} ctxsw;
|
||||
|
||||
struct {
|
||||
struct cdev cdev;
|
||||
struct device *node;
|
||||
} sched;
|
||||
struct nvgpu_list_node cdev_list_head;
|
||||
u32 num_cdevs;
|
||||
|
||||
dev_t cdev_region;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user