diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c | 15 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.h | 1 |
2 files changed, 14 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c index 028763a2..6744699f 100644 --- a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.c | |||
@@ -557,6 +557,9 @@ int gk20a_ctxsw_trace_write(struct gk20a *g, | |||
557 | const char *reason; | 557 | const char *reason; |
558 | u32 write_idx; | 558 | u32 write_idx; |
559 | 559 | ||
560 | if (!g->ctxsw_trace) | ||
561 | return 0; | ||
562 | |||
560 | if (unlikely(entry->vmid >= GK20A_CTXSW_TRACE_NUM_DEVS)) | 563 | if (unlikely(entry->vmid >= GK20A_CTXSW_TRACE_NUM_DEVS)) |
561 | return -ENODEV; | 564 | return -ENODEV; |
562 | 565 | ||
@@ -643,8 +646,12 @@ done: | |||
643 | 646 | ||
644 | void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid) | 647 | void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid) |
645 | { | 648 | { |
646 | struct gk20a_ctxsw_dev *dev = &g->ctxsw_trace->devs[vmid]; | 649 | struct gk20a_ctxsw_dev *dev; |
650 | |||
651 | if (!g->ctxsw_trace) | ||
652 | return; | ||
647 | 653 | ||
654 | dev = &g->ctxsw_trace->devs[vmid]; | ||
648 | wake_up_interruptible(&dev->readout_wq); | 655 | wake_up_interruptible(&dev->readout_wq); |
649 | } | 656 | } |
650 | 657 | ||
@@ -659,6 +666,9 @@ void gk20a_ctxsw_trace_channel_reset(struct gk20a *g, struct channel_gk20a *ch) | |||
659 | .pid = ch->pid, | 666 | .pid = ch->pid, |
660 | }; | 667 | }; |
661 | 668 | ||
669 | if (!g->ctxsw_trace) | ||
670 | return; | ||
671 | |||
662 | gk20a_ctxsw_trace_write(g, &entry); | 672 | gk20a_ctxsw_trace_write(g, &entry); |
663 | gk20a_ctxsw_trace_wake_up(g, 0); | 673 | gk20a_ctxsw_trace_wake_up(g, 0); |
664 | #endif | 674 | #endif |
@@ -677,6 +687,9 @@ void gk20a_ctxsw_trace_tsg_reset(struct gk20a *g, struct tsg_gk20a *tsg) | |||
677 | }; | 687 | }; |
678 | struct channel_gk20a *ch; | 688 | struct channel_gk20a *ch; |
679 | 689 | ||
690 | if (!g->ctxsw_trace) | ||
691 | return; | ||
692 | |||
680 | mutex_lock(&tsg->ch_list_lock); | 693 | mutex_lock(&tsg->ch_list_lock); |
681 | ch = list_entry(&tsg->ch_list, struct channel_gk20a, ch_entry); | 694 | ch = list_entry(&tsg->ch_list, struct channel_gk20a, ch_entry); |
682 | mutex_unlock(&tsg->ch_list_lock); | 695 | mutex_unlock(&tsg->ch_list_lock); |
diff --git a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.h b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.h index dacc0b50..bb79331c 100644 --- a/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/ctxsw_trace_gk20a.h | |||
@@ -35,7 +35,6 @@ unsigned int gk20a_ctxsw_dev_poll(struct file *, struct poll_table_struct *); | |||
35 | int gk20a_ctxsw_dev_mmap(struct file *, struct vm_area_struct *); | 35 | int gk20a_ctxsw_dev_mmap(struct file *, struct vm_area_struct *); |
36 | 36 | ||
37 | int gk20a_ctxsw_trace_init(struct gk20a *); | 37 | int gk20a_ctxsw_trace_init(struct gk20a *); |
38 | int gk20a_ctxsw_trace_setup(struct gk20a *, void *ctx_ptr); | ||
39 | void gk20a_ctxsw_trace_cleanup(struct gk20a *); | 38 | void gk20a_ctxsw_trace_cleanup(struct gk20a *); |
40 | int gk20a_ctxsw_trace_write(struct gk20a *, struct nvgpu_ctxsw_trace_entry *); | 39 | int gk20a_ctxsw_trace_write(struct gk20a *, struct nvgpu_ctxsw_trace_entry *); |
41 | void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid); | 40 | void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid); |