summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-06-18 07:22:44 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:17 -0400
commitd46c8e40035f65194baceeb4210a395c8087940a (patch)
tree123ff729b9747514d367f5b9604fc44a127380a7 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
parentee66559a0b3b82b3dc9be684261ddd0954731ff5 (diff)
gpu: nvgpu: Remove extra g field in pmu_gk20a
pmu_gk20a has a pointer to struct gk20a *. As pmu_gk20a is part of gk20a, there's no need to have the circular dependency. Bug 200006956 Change-Id: I6d5d10a93b2fba4a26a1e28b3c5206506dc6cc04 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/424767
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c70
1 files changed, 34 insertions, 36 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 9b1ecea1..e8acf503 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -486,7 +486,7 @@ static void *get_pmu_sequence_out_alloc_ptr_v0(struct pmu_sequence *seq)
486 486
487int gk20a_init_pmu(struct pmu_gk20a *pmu) 487int gk20a_init_pmu(struct pmu_gk20a *pmu)
488{ 488{
489 struct gk20a *g = pmu->g; 489 struct gk20a *g = gk20a_from_pmu(pmu);
490 switch (pmu->desc->app_version) { 490 switch (pmu->desc->app_version) {
491 case APP_VERSION_GM20B_1: 491 case APP_VERSION_GM20B_1:
492 case APP_VERSION_GM20B: 492 case APP_VERSION_GM20B:
@@ -626,7 +626,7 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu)
626 get_pmu_sequence_out_alloc_ptr_v0; 626 get_pmu_sequence_out_alloc_ptr_v0;
627 break; 627 break;
628 default: 628 default:
629 gk20a_err(dev_from_gk20a(pmu->g), 629 gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
630 "PMU code version not supported version: %d\n", 630 "PMU code version not supported version: %d\n",
631 pmu->desc->app_version); 631 pmu->desc->app_version);
632 return -EINVAL; 632 return -EINVAL;
@@ -638,7 +638,7 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu)
638void pmu_copy_from_dmem(struct pmu_gk20a *pmu, 638void pmu_copy_from_dmem(struct pmu_gk20a *pmu,
639 u32 src, u8 *dst, u32 size, u8 port) 639 u32 src, u8 *dst, u32 size, u8 port)
640{ 640{
641 struct gk20a *g = pmu->g; 641 struct gk20a *g = gk20a_from_pmu(pmu);
642 u32 i, words, bytes; 642 u32 i, words, bytes;
643 u32 data, addr_mask; 643 u32 data, addr_mask;
644 u32 *dst_u32 = (u32*)dst; 644 u32 *dst_u32 = (u32*)dst;
@@ -684,7 +684,7 @@ void pmu_copy_from_dmem(struct pmu_gk20a *pmu,
684void pmu_copy_to_dmem(struct pmu_gk20a *pmu, 684void pmu_copy_to_dmem(struct pmu_gk20a *pmu,
685 u32 dst, u8 *src, u32 size, u8 port) 685 u32 dst, u8 *src, u32 size, u8 port)
686{ 686{
687 struct gk20a *g = pmu->g; 687 struct gk20a *g = gk20a_from_pmu(pmu);
688 u32 i, words, bytes; 688 u32 i, words, bytes;
689 u32 data, addr_mask; 689 u32 data, addr_mask;
690 u32 *src_u32 = (u32*)src; 690 u32 *src_u32 = (u32*)src;
@@ -737,7 +737,7 @@ void pmu_copy_to_dmem(struct pmu_gk20a *pmu,
737 737
738static int pmu_idle(struct pmu_gk20a *pmu) 738static int pmu_idle(struct pmu_gk20a *pmu)
739{ 739{
740 struct gk20a *g = pmu->g; 740 struct gk20a *g = gk20a_from_pmu(pmu);
741 unsigned long end_jiffies = jiffies + 741 unsigned long end_jiffies = jiffies +
742 msecs_to_jiffies(2000); 742 msecs_to_jiffies(2000);
743 u32 idle_stat; 743 u32 idle_stat;
@@ -766,7 +766,7 @@ static int pmu_idle(struct pmu_gk20a *pmu)
766 766
767static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable) 767static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable)
768{ 768{
769 struct gk20a *g = pmu->g; 769 struct gk20a *g = gk20a_from_pmu(pmu);
770 770
771 gk20a_dbg_fn(""); 771 gk20a_dbg_fn("");
772 772
@@ -831,7 +831,7 @@ static void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable)
831 831
832static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable) 832static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable)
833{ 833{
834 struct gk20a *g = pmu->g; 834 struct gk20a *g = gk20a_from_pmu(pmu);
835 835
836 gk20a_dbg_fn(""); 836 gk20a_dbg_fn("");
837 837
@@ -863,7 +863,7 @@ static int pmu_enable_hw(struct pmu_gk20a *pmu, bool enable)
863 863
864static int pmu_enable(struct pmu_gk20a *pmu, bool enable) 864static int pmu_enable(struct pmu_gk20a *pmu, bool enable)
865{ 865{
866 struct gk20a *g = pmu->g; 866 struct gk20a *g = gk20a_from_pmu(pmu);
867 u32 pmc_enable; 867 u32 pmc_enable;
868 int err; 868 int err;
869 869
@@ -922,7 +922,7 @@ int pmu_reset(struct pmu_gk20a *pmu)
922 922
923static int pmu_bootstrap(struct pmu_gk20a *pmu) 923static int pmu_bootstrap(struct pmu_gk20a *pmu)
924{ 924{
925 struct gk20a *g = pmu->g; 925 struct gk20a *g = gk20a_from_pmu(pmu);
926 struct gk20a_platform *platform = platform_get_drvdata(g->dev); 926 struct gk20a_platform *platform = platform_get_drvdata(g->dev);
927 struct mm_gk20a *mm = &g->mm; 927 struct mm_gk20a *mm = &g->mm;
928 struct pmu_ucode_desc *desc = pmu->desc; 928 struct pmu_ucode_desc *desc = pmu->desc;
@@ -1023,7 +1023,7 @@ void pmu_seq_init(struct pmu_gk20a *pmu)
1023static int pmu_seq_acquire(struct pmu_gk20a *pmu, 1023static int pmu_seq_acquire(struct pmu_gk20a *pmu,
1024 struct pmu_sequence **pseq) 1024 struct pmu_sequence **pseq)
1025{ 1025{
1026 struct gk20a *g = pmu->g; 1026 struct gk20a *g = gk20a_from_pmu(pmu);
1027 struct pmu_sequence *seq; 1027 struct pmu_sequence *seq;
1028 u32 index; 1028 u32 index;
1029 1029
@@ -1049,7 +1049,7 @@ static int pmu_seq_acquire(struct pmu_gk20a *pmu,
1049static void pmu_seq_release(struct pmu_gk20a *pmu, 1049static void pmu_seq_release(struct pmu_gk20a *pmu,
1050 struct pmu_sequence *seq) 1050 struct pmu_sequence *seq)
1051{ 1051{
1052 struct gk20a *g = pmu->g; 1052 struct gk20a *g = gk20a_from_pmu(pmu);
1053 seq->state = PMU_SEQ_STATE_FREE; 1053 seq->state = PMU_SEQ_STATE_FREE;
1054 seq->desc = PMU_INVALID_SEQ_DESC; 1054 seq->desc = PMU_INVALID_SEQ_DESC;
1055 seq->callback = NULL; 1055 seq->callback = NULL;
@@ -1067,7 +1067,7 @@ static void pmu_seq_release(struct pmu_gk20a *pmu,
1067static int pmu_queue_init(struct pmu_gk20a *pmu, 1067static int pmu_queue_init(struct pmu_gk20a *pmu,
1068 u32 id, union pmu_init_msg_pmu *init) 1068 u32 id, union pmu_init_msg_pmu *init)
1069{ 1069{
1070 struct gk20a *g = pmu->g; 1070 struct gk20a *g = gk20a_from_pmu(pmu);
1071 struct pmu_queue *queue = &pmu->queue[id]; 1071 struct pmu_queue *queue = &pmu->queue[id];
1072 queue->id = id; 1072 queue->id = id;
1073 g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params(queue, id, init); 1073 g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params(queue, id, init);
@@ -1084,7 +1084,7 @@ static int pmu_queue_init(struct pmu_gk20a *pmu,
1084static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue, 1084static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue,
1085 u32 *head, bool set) 1085 u32 *head, bool set)
1086{ 1086{
1087 struct gk20a *g = pmu->g; 1087 struct gk20a *g = gk20a_from_pmu(pmu);
1088 1088
1089 BUG_ON(!head); 1089 BUG_ON(!head);
1090 1090
@@ -1117,7 +1117,7 @@ static int pmu_queue_head(struct pmu_gk20a *pmu, struct pmu_queue *queue,
1117static int pmu_queue_tail(struct pmu_gk20a *pmu, struct pmu_queue *queue, 1117static int pmu_queue_tail(struct pmu_gk20a *pmu, struct pmu_queue *queue,
1118 u32 *tail, bool set) 1118 u32 *tail, bool set)
1119{ 1119{
1120 struct gk20a *g = pmu->g; 1120 struct gk20a *g = gk20a_from_pmu(pmu);
1121 1121
1122 BUG_ON(!tail); 1122 BUG_ON(!tail);
1123 1123
@@ -1161,7 +1161,7 @@ static inline void pmu_queue_write(struct pmu_gk20a *pmu,
1161 1161
1162int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token) 1162int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token)
1163{ 1163{
1164 struct gk20a *g = pmu->g; 1164 struct gk20a *g = gk20a_from_pmu(pmu);
1165 struct pmu_mutex *mutex; 1165 struct pmu_mutex *mutex;
1166 u32 data, owner, max_retry; 1166 u32 data, owner, max_retry;
1167 1167
@@ -1230,7 +1230,7 @@ int pmu_mutex_acquire(struct pmu_gk20a *pmu, u32 id, u32 *token)
1230 1230
1231int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token) 1231int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token)
1232{ 1232{
1233 struct gk20a *g = pmu->g; 1233 struct gk20a *g = gk20a_from_pmu(pmu);
1234 struct pmu_mutex *mutex; 1234 struct pmu_mutex *mutex;
1235 u32 owner, data; 1235 u32 owner, data;
1236 1236
@@ -1355,7 +1355,7 @@ static int pmu_queue_push(struct pmu_gk20a *pmu,
1355 gk20a_dbg_fn(""); 1355 gk20a_dbg_fn("");
1356 1356
1357 if (!queue->opened && queue->oflag == OFLAG_WRITE){ 1357 if (!queue->opened && queue->oflag == OFLAG_WRITE){
1358 gk20a_err(dev_from_gk20a(pmu->g), 1358 gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
1359 "queue not opened for write"); 1359 "queue not opened for write");
1360 return -EINVAL; 1360 return -EINVAL;
1361 } 1361 }
@@ -1374,7 +1374,7 @@ static int pmu_queue_pop(struct pmu_gk20a *pmu,
1374 *bytes_read = 0; 1374 *bytes_read = 0;
1375 1375
1376 if (!queue->opened && queue->oflag == OFLAG_READ){ 1376 if (!queue->opened && queue->oflag == OFLAG_READ){
1377 gk20a_err(dev_from_gk20a(pmu->g), 1377 gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
1378 "queue not opened for read"); 1378 "queue not opened for read");
1379 return -EINVAL; 1379 return -EINVAL;
1380 } 1380 }
@@ -1391,7 +1391,7 @@ static int pmu_queue_pop(struct pmu_gk20a *pmu,
1391 used = queue->offset + queue->size - tail; 1391 used = queue->offset + queue->size - tail;
1392 1392
1393 if (size > used) { 1393 if (size > used) {
1394 gk20a_warn(dev_from_gk20a(pmu->g), 1394 gk20a_warn(dev_from_gk20a(gk20a_from_pmu(pmu)),
1395 "queue size smaller than request read"); 1395 "queue size smaller than request read");
1396 size = used; 1396 size = used;
1397 } 1397 }
@@ -1410,7 +1410,7 @@ static void pmu_queue_rewind(struct pmu_gk20a *pmu,
1410 gk20a_dbg_fn(""); 1410 gk20a_dbg_fn("");
1411 1411
1412 if (!queue->opened) { 1412 if (!queue->opened) {
1413 gk20a_err(dev_from_gk20a(pmu->g), 1413 gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)),
1414 "queue not opened"); 1414 "queue not opened");
1415 return; 1415 return;
1416 } 1416 }
@@ -1462,7 +1462,7 @@ static int pmu_queue_open_write(struct pmu_gk20a *pmu,
1462 BUG(); 1462 BUG();
1463 1463
1464 if (!pmu_queue_has_room(pmu, queue, size, &rewind)) { 1464 if (!pmu_queue_has_room(pmu, queue, size, &rewind)) {
1465 gk20a_err(dev_from_gk20a(pmu->g), "queue full"); 1465 gk20a_err(dev_from_gk20a(gk20a_from_pmu(pmu)), "queue full");
1466 return -EAGAIN; 1466 return -EAGAIN;
1467 } 1467 }
1468 1468
@@ -1795,7 +1795,7 @@ static void pmu_setup_hw_enable_elpg(struct gk20a *g);
1795void pmu_setup_hw(struct work_struct *work) 1795void pmu_setup_hw(struct work_struct *work)
1796{ 1796{
1797 struct pmu_gk20a *pmu = container_of(work, struct pmu_gk20a, pg_init); 1797 struct pmu_gk20a *pmu = container_of(work, struct pmu_gk20a, pg_init);
1798 struct gk20a *g = pmu->g; 1798 struct gk20a *g = gk20a_from_pmu(pmu);
1799 1799
1800 switch (pmu->pmu_state) { 1800 switch (pmu->pmu_state) {
1801 case PMU_STATE_ELPG_BOOTED: 1801 case PMU_STATE_ELPG_BOOTED:
@@ -1991,8 +1991,6 @@ int gk20a_init_pmu_support(struct gk20a *g)
1991 if (pmu->initialized) 1991 if (pmu->initialized)
1992 return 0; 1992 return 0;
1993 1993
1994 pmu->g = g;
1995
1996 err = gk20a_init_pmu_reset_enable_hw(g); 1994 err = gk20a_init_pmu_reset_enable_hw(g);
1997 if (err) 1995 if (err)
1998 return err; 1996 return err;
@@ -2071,7 +2069,7 @@ static void pmu_handle_pg_stat_msg(struct gk20a *g, struct pmu_msg *msg,
2071 2069
2072static int pmu_init_powergating(struct pmu_gk20a *pmu) 2070static int pmu_init_powergating(struct pmu_gk20a *pmu)
2073{ 2071{
2074 struct gk20a *g = pmu->g; 2072 struct gk20a *g = gk20a_from_pmu(pmu);
2075 struct pmu_cmd cmd; 2073 struct pmu_cmd cmd;
2076 u32 seq; 2074 u32 seq;
2077 2075
@@ -2141,7 +2139,7 @@ static int pmu_init_powergating(struct pmu_gk20a *pmu)
2141 2139
2142static int pmu_init_perfmon(struct pmu_gk20a *pmu) 2140static int pmu_init_perfmon(struct pmu_gk20a *pmu)
2143{ 2141{
2144 struct gk20a *g = pmu->g; 2142 struct gk20a *g = gk20a_from_pmu(pmu);
2145 struct pmu_v *pv = &g->ops.pmu_ver; 2143 struct pmu_v *pv = &g->ops.pmu_ver;
2146 struct pmu_cmd cmd; 2144 struct pmu_cmd cmd;
2147 struct pmu_payload payload; 2145 struct pmu_payload payload;
@@ -2244,7 +2242,7 @@ static int pmu_init_perfmon(struct pmu_gk20a *pmu)
2244static int pmu_process_init_msg(struct pmu_gk20a *pmu, 2242static int pmu_process_init_msg(struct pmu_gk20a *pmu,
2245 struct pmu_msg *msg) 2243 struct pmu_msg *msg)
2246{ 2244{
2247 struct gk20a *g = pmu->g; 2245 struct gk20a *g = gk20a_from_pmu(pmu);
2248 struct pmu_v *pv = &g->ops.pmu_ver; 2246 struct pmu_v *pv = &g->ops.pmu_ver;
2249 union pmu_init_msg_pmu *init; 2247 union pmu_init_msg_pmu *init;
2250 struct pmu_sha1_gid_data gid_data; 2248 struct pmu_sha1_gid_data gid_data;
@@ -2313,7 +2311,7 @@ static int pmu_process_init_msg(struct pmu_gk20a *pmu,
2313static bool pmu_read_message(struct pmu_gk20a *pmu, struct pmu_queue *queue, 2311static bool pmu_read_message(struct pmu_gk20a *pmu, struct pmu_queue *queue,
2314 struct pmu_msg *msg, int *status) 2312 struct pmu_msg *msg, int *status)
2315{ 2313{
2316 struct gk20a *g = pmu->g; 2314 struct gk20a *g = gk20a_from_pmu(pmu);
2317 u32 read_size, bytes_read; 2315 u32 read_size, bytes_read;
2318 int err; 2316 int err;
2319 2317
@@ -2393,7 +2391,7 @@ clean_up:
2393static int pmu_response_handle(struct pmu_gk20a *pmu, 2391static int pmu_response_handle(struct pmu_gk20a *pmu,
2394 struct pmu_msg *msg) 2392 struct pmu_msg *msg)
2395{ 2393{
2396 struct gk20a *g = pmu->g; 2394 struct gk20a *g = gk20a_from_pmu(pmu);
2397 struct pmu_sequence *seq; 2395 struct pmu_sequence *seq;
2398 struct pmu_v *pv = &g->ops.pmu_ver; 2396 struct pmu_v *pv = &g->ops.pmu_ver;
2399 int ret = 0; 2397 int ret = 0;
@@ -2500,7 +2498,7 @@ void gk20a_pmu_save_zbc(struct gk20a *g, u32 entries)
2500 2498
2501static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu) 2499static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu)
2502{ 2500{
2503 struct gk20a *g = pmu->g; 2501 struct gk20a *g = gk20a_from_pmu(pmu);
2504 struct pmu_v *pv = &g->ops.pmu_ver; 2502 struct pmu_v *pv = &g->ops.pmu_ver;
2505 struct pmu_cmd cmd; 2503 struct pmu_cmd cmd;
2506 struct pmu_payload payload; 2504 struct pmu_payload payload;
@@ -2544,7 +2542,7 @@ static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu)
2544 2542
2545static int pmu_perfmon_stop_sampling(struct pmu_gk20a *pmu) 2543static int pmu_perfmon_stop_sampling(struct pmu_gk20a *pmu)
2546{ 2544{
2547 struct gk20a *g = pmu->g; 2545 struct gk20a *g = gk20a_from_pmu(pmu);
2548 struct pmu_cmd cmd; 2546 struct pmu_cmd cmd;
2549 u32 seq; 2547 u32 seq;
2550 2548
@@ -2646,7 +2644,7 @@ static int pmu_process_message(struct pmu_gk20a *pmu)
2646static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout, 2644static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout,
2647 u32 *var, u32 val) 2645 u32 *var, u32 val)
2648{ 2646{
2649 struct gk20a *g = pmu->g; 2647 struct gk20a *g = gk20a_from_pmu(pmu);
2650 unsigned long end_jiffies = jiffies + msecs_to_jiffies(timeout); 2648 unsigned long end_jiffies = jiffies + msecs_to_jiffies(timeout);
2651 unsigned long delay = GR_IDLE_CHECK_DEFAULT; 2649 unsigned long delay = GR_IDLE_CHECK_DEFAULT;
2652 2650
@@ -2667,7 +2665,7 @@ static int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout,
2667 2665
2668static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu) 2666static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu)
2669{ 2667{
2670 struct gk20a *g = pmu->g; 2668 struct gk20a *g = gk20a_from_pmu(pmu);
2671 struct pmu_pg_stats stats; 2669 struct pmu_pg_stats stats;
2672 2670
2673 pmu_copy_from_dmem(pmu, pmu->stat_dmem_offset, 2671 pmu_copy_from_dmem(pmu, pmu->stat_dmem_offset,
@@ -2739,7 +2737,7 @@ static void pmu_dump_elpg_stats(struct pmu_gk20a *pmu)
2739 2737
2740void pmu_dump_falcon_stats(struct pmu_gk20a *pmu) 2738void pmu_dump_falcon_stats(struct pmu_gk20a *pmu)
2741{ 2739{
2742 struct gk20a *g = pmu->g; 2740 struct gk20a *g = gk20a_from_pmu(pmu);
2743 int i; 2741 int i;
2744 2742
2745 gk20a_err(dev_from_gk20a(g), "pwr_falcon_os_r : %d", 2743 gk20a_err(dev_from_gk20a(g), "pwr_falcon_os_r : %d",
@@ -2918,7 +2916,7 @@ static bool pmu_validate_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd,
2918 struct pmu_msg *msg, struct pmu_payload *payload, 2916 struct pmu_msg *msg, struct pmu_payload *payload,
2919 u32 queue_id) 2917 u32 queue_id)
2920{ 2918{
2921 struct gk20a *g = pmu->g; 2919 struct gk20a *g = gk20a_from_pmu(pmu);
2922 struct pmu_queue *queue; 2920 struct pmu_queue *queue;
2923 u32 in_size, out_size; 2921 u32 in_size, out_size;
2924 2922
@@ -2987,7 +2985,7 @@ invalid_cmd:
2987static int pmu_write_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd, 2985static int pmu_write_cmd(struct pmu_gk20a *pmu, struct pmu_cmd *cmd,
2988 u32 queue_id, unsigned long timeout) 2986 u32 queue_id, unsigned long timeout)
2989{ 2987{
2990 struct gk20a *g = pmu->g; 2988 struct gk20a *g = gk20a_from_pmu(pmu);
2991 struct pmu_queue *queue; 2989 struct pmu_queue *queue;
2992 unsigned long end_jiffies = jiffies + 2990 unsigned long end_jiffies = jiffies +
2993 msecs_to_jiffies(timeout); 2991 msecs_to_jiffies(timeout);