gts 160 drivers/infiniband/hw/cxgb4/cq.c cq->gts = rdev->lldi.gts_reg; gts 696 drivers/infiniband/hw/cxgb4/t4.h void __iomem *gts; gts 724 drivers/infiniband/hw/cxgb4/t4.h writel(val | INGRESSQID_V(cq->cqid), cq->gts); gts 70 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts = NULL; gts 75 drivers/misc/sgi-gru/grufault.c gts = gru_find_thread_state(vma, TSID(vaddr, vma)); gts 76 drivers/misc/sgi-gru/grufault.c if (gts) gts 77 drivers/misc/sgi-gru/grufault.c mutex_lock(>s->ts_ctxlock); gts 80 drivers/misc/sgi-gru/grufault.c return gts; gts 87 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts = ERR_PTR(-EINVAL); gts 94 drivers/misc/sgi-gru/grufault.c gts = gru_alloc_thread_state(vma, TSID(vaddr, vma)); gts 95 drivers/misc/sgi-gru/grufault.c if (IS_ERR(gts)) gts 97 drivers/misc/sgi-gru/grufault.c mutex_lock(>s->ts_ctxlock); gts 99 drivers/misc/sgi-gru/grufault.c return gts; gts 103 drivers/misc/sgi-gru/grufault.c return gts; gts 109 drivers/misc/sgi-gru/grufault.c static void gru_unlock_gts(struct gru_thread_state *gts) gts 111 drivers/misc/sgi-gru/grufault.c mutex_unlock(>s->ts_ctxlock); gts 252 drivers/misc/sgi-gru/grufault.c static int gru_vtop(struct gru_thread_state *gts, unsigned long vaddr, gts 255 drivers/misc/sgi-gru/grufault.c struct mm_struct *mm = gts->ts_mm; gts 310 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts, int atomic, gts 332 drivers/misc/sgi-gru/grufault.c ret = gru_vtop(gts, vaddr, write, atomic, &gpa, &pageshift); gts 338 drivers/misc/sgi-gru/grufault.c atomic ? "atomic" : "non-atomic", gru->gs_gid, gts, tfh, gts 356 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts, gts 361 drivers/misc/sgi-gru/grufault.c unsigned char tlb_preload_count = gts->ts_tlb_preload_count; gts 410 drivers/misc/sgi-gru/grufault.c if (atomic_read(>s->ts_gms->ms_range_active)) gts 413 drivers/misc/sgi-gru/grufault.c ret = gru_vtop(gts, vaddr, write, atomic, &gpa, &pageshift); gts 419 drivers/misc/sgi-gru/grufault.c if (!(gts->ts_sizeavail & GRU_SIZEAVAIL(pageshift))) { gts 420 drivers/misc/sgi-gru/grufault.c gts->ts_sizeavail |= GRU_SIZEAVAIL(pageshift); gts 421 drivers/misc/sgi-gru/grufault.c if (atomic || !gru_update_cch(gts)) { gts 422 drivers/misc/sgi-gru/grufault.c gts->ts_force_cch_reload = 1; gts 428 drivers/misc/sgi-gru/grufault.c gru_preload_tlb(gru, gts, atomic, vaddr, asid, write, tlb_preload_count, tfh, cbe); gts 433 drivers/misc/sgi-gru/grufault.c gts->ustats.tlbdropin++; gts 439 drivers/misc/sgi-gru/grufault.c atomic ? "atomic" : "non-atomic", gru->gs_gid, gts, tfh, vaddr, asid, gts 523 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 564 drivers/misc/sgi-gru/grufault.c gts = gru->gs_gts[ctxnum]; gts 567 drivers/misc/sgi-gru/grufault.c if (!gts) { gts 576 drivers/misc/sgi-gru/grufault.c gts->ustats.fmm_tlbmiss++; gts 577 drivers/misc/sgi-gru/grufault.c if (!gts->ts_force_cch_reload && gts 578 drivers/misc/sgi-gru/grufault.c down_read_trylock(>s->ts_mm->mmap_sem)) { gts 579 drivers/misc/sgi-gru/grufault.c gru_try_dropin(gru, gts, tfh, NULL); gts 580 drivers/misc/sgi-gru/grufault.c up_read(>s->ts_mm->mmap_sem); gts 613 drivers/misc/sgi-gru/grufault.c static int gru_user_dropin(struct gru_thread_state *gts, gts 617 drivers/misc/sgi-gru/grufault.c struct gru_mm_struct *gms = gts->ts_gms; gts 620 drivers/misc/sgi-gru/grufault.c gts->ustats.upm_tlbmiss++; gts 625 drivers/misc/sgi-gru/grufault.c ret = gru_try_dropin(gts->ts_gru, gts, tfh, cb); gts 640 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 651 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(cb); gts 652 drivers/misc/sgi-gru/grufault.c if (!gts) gts 654 drivers/misc/sgi-gru/grufault.c gru_dbg(grudev, "address 0x%lx, gid %d, gts 0x%p\n", cb, gts->ts_gru ? gts->ts_gru->gs_gid : -1, gts); gts 656 drivers/misc/sgi-gru/grufault.c if (ucbnum >= gts->ts_cbr_au_count * GRU_CBR_AU_SIZE) gts 659 drivers/misc/sgi-gru/grufault.c gru_check_context_placement(gts); gts 664 drivers/misc/sgi-gru/grufault.c if (gts->ts_gru && gts->ts_force_cch_reload) { gts 665 drivers/misc/sgi-gru/grufault.c gts->ts_force_cch_reload = 0; gts 666 drivers/misc/sgi-gru/grufault.c gru_update_cch(gts); gts 670 drivers/misc/sgi-gru/grufault.c cbrnum = thread_cbr_number(gts, ucbnum); gts 671 drivers/misc/sgi-gru/grufault.c if (gts->ts_gru) { gts 672 drivers/misc/sgi-gru/grufault.c tfh = get_tfh_by_index(gts->ts_gru, cbrnum); gts 673 drivers/misc/sgi-gru/grufault.c cbk = get_gseg_base_address_cb(gts->ts_gru->gs_gru_base_vaddr, gts 674 drivers/misc/sgi-gru/grufault.c gts->ts_ctxnum, ucbnum); gts 675 drivers/misc/sgi-gru/grufault.c ret = gru_user_dropin(gts, tfh, cbk); gts 678 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 690 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 697 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(excdet.cb); gts 698 drivers/misc/sgi-gru/grufault.c if (!gts) gts 701 drivers/misc/sgi-gru/grufault.c gru_dbg(grudev, "address 0x%lx, gid %d, gts 0x%p\n", excdet.cb, gts->ts_gru ? gts->ts_gru->gs_gid : -1, gts); gts 703 drivers/misc/sgi-gru/grufault.c if (ucbnum >= gts->ts_cbr_au_count * GRU_CBR_AU_SIZE) { gts 705 drivers/misc/sgi-gru/grufault.c } else if (gts->ts_gru) { gts 706 drivers/misc/sgi-gru/grufault.c cbrnum = thread_cbr_number(gts, ucbnum); gts 707 drivers/misc/sgi-gru/grufault.c cbe = get_cbe_by_index(gts->ts_gru, cbrnum); gts 722 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 739 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 749 drivers/misc/sgi-gru/grufault.c gts = gru->gs_gts[ctxnum]; gts 750 drivers/misc/sgi-gru/grufault.c if (gts && mutex_trylock(>s->ts_ctxlock)) { gts 752 drivers/misc/sgi-gru/grufault.c gru_unload_context(gts, 1); gts 753 drivers/misc/sgi-gru/grufault.c mutex_unlock(>s->ts_ctxlock); gts 764 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 776 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(req.gseg); gts 777 drivers/misc/sgi-gru/grufault.c if (!gts) gts 780 drivers/misc/sgi-gru/grufault.c if (gts->ts_gru) gts 781 drivers/misc/sgi-gru/grufault.c gru_unload_context(gts, 1); gts 782 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 793 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 804 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(req.gseg); gts 805 drivers/misc/sgi-gru/grufault.c if (!gts) gts 808 drivers/misc/sgi-gru/grufault.c gms = gts->ts_gms; gts 809 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 820 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 831 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(req.gseg); gts 832 drivers/misc/sgi-gru/grufault.c if (gts) { gts 833 drivers/misc/sgi-gru/grufault.c memcpy(&req.stats, >s->ustats, sizeof(gts->ustats)); gts 834 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 836 drivers/misc/sgi-gru/grufault.c memset(&req.stats, 0, sizeof(gts->ustats)); gts 851 drivers/misc/sgi-gru/grufault.c struct gru_thread_state *gts; gts 860 drivers/misc/sgi-gru/grufault.c gts = gru_find_lock_gts(req.gseg); gts 861 drivers/misc/sgi-gru/grufault.c if (!gts) { gts 862 drivers/misc/sgi-gru/grufault.c gts = gru_alloc_locked_gts(req.gseg); gts 863 drivers/misc/sgi-gru/grufault.c if (IS_ERR(gts)) gts 864 drivers/misc/sgi-gru/grufault.c return PTR_ERR(gts); gts 875 drivers/misc/sgi-gru/grufault.c gts->ts_user_blade_id = req.val1; gts 876 drivers/misc/sgi-gru/grufault.c gts->ts_user_chiplet_id = req.val0; gts 877 drivers/misc/sgi-gru/grufault.c gru_check_context_placement(gts); gts 882 drivers/misc/sgi-gru/grufault.c gts->ts_tgid_owner = current->tgid; gts 886 drivers/misc/sgi-gru/grufault.c gts->ts_cch_req_slice = req.val1 & 3; gts 891 drivers/misc/sgi-gru/grufault.c gru_unlock_gts(gts); gts 63 drivers/misc/sgi-gru/grufile.c struct gru_thread_state *gts; gts 74 drivers/misc/sgi-gru/grufile.c gts = gts 76 drivers/misc/sgi-gru/grufile.c list_del(>s->ts_next); gts 77 drivers/misc/sgi-gru/grufile.c mutex_lock(>s->ts_ctxlock); gts 78 drivers/misc/sgi-gru/grufile.c if (gts->ts_gru) gts 79 drivers/misc/sgi-gru/grufile.c gru_unload_context(gts, 0); gts 80 drivers/misc/sgi-gru/grufile.c mutex_unlock(>s->ts_ctxlock); gts 81 drivers/misc/sgi-gru/grufile.c gts_drop(gts); gts 114 drivers/misc/sgi-gru/grukdump.c struct gru_thread_state *gts; gts 140 drivers/misc/sgi-gru/grukdump.c gts = gru->gs_gts[ctxnum]; gts 141 drivers/misc/sgi-gru/grukdump.c if (gts && gts->ts_vma) { gts 142 drivers/misc/sgi-gru/grukdump.c hdr.pid = gts->ts_tgid_owner; gts 143 drivers/misc/sgi-gru/grukdump.c hdr.vaddr = gts->ts_vma->vm_start; gts 187 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts) gts 190 drivers/misc/sgi-gru/grumain.c gts->ts_cbr_map = gts 191 drivers/misc/sgi-gru/grumain.c gru_reserve_cb_resources(gru, gts->ts_cbr_au_count, gts 192 drivers/misc/sgi-gru/grumain.c gts->ts_cbr_idx); gts 193 drivers/misc/sgi-gru/grumain.c gts->ts_dsr_map = gts 194 drivers/misc/sgi-gru/grumain.c gru_reserve_ds_resources(gru, gts->ts_dsr_au_count, NULL); gts 198 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts) gts 201 drivers/misc/sgi-gru/grumain.c gru->gs_cbr_map |= gts->ts_cbr_map; gts 202 drivers/misc/sgi-gru/grumain.c gru->gs_dsr_map |= gts->ts_dsr_map; gts 225 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts) gts 227 drivers/misc/sgi-gru/grumain.c struct gru_mm_struct *gms = gts->ts_gms; gts 229 drivers/misc/sgi-gru/grumain.c unsigned short ctxbitmap = (1 << gts->ts_ctxnum); gts 255 drivers/misc/sgi-gru/grumain.c gru->gs_gid, gts, gms, gts->ts_ctxnum, asid, gts 261 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts) gts 263 drivers/misc/sgi-gru/grumain.c struct gru_mm_struct *gms = gts->ts_gms; gts 268 drivers/misc/sgi-gru/grumain.c ctxbitmap = (1 << gts->ts_ctxnum); gts 274 drivers/misc/sgi-gru/grumain.c gru->gs_gid, gts, gms, gts->ts_ctxnum, gms->ms_asidmap[0]); gts 283 drivers/misc/sgi-gru/grumain.c void gts_drop(struct gru_thread_state *gts) gts 285 drivers/misc/sgi-gru/grumain.c if (gts && atomic_dec_return(>s->ts_refcnt) == 0) { gts 286 drivers/misc/sgi-gru/grumain.c if (gts->ts_gms) gts 287 drivers/misc/sgi-gru/grumain.c gru_drop_mmu_notifier(gts->ts_gms); gts 288 drivers/misc/sgi-gru/grumain.c kfree(gts); gts 299 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts; gts 301 drivers/misc/sgi-gru/grumain.c list_for_each_entry(gts, &vdata->vd_head, ts_next) gts 302 drivers/misc/sgi-gru/grumain.c if (gts->ts_tsid == tsid) gts 303 drivers/misc/sgi-gru/grumain.c return gts; gts 314 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts; gts 320 drivers/misc/sgi-gru/grumain.c gts = kmalloc(bytes, GFP_KERNEL); gts 321 drivers/misc/sgi-gru/grumain.c if (!gts) gts 325 drivers/misc/sgi-gru/grumain.c memset(gts, 0, sizeof(struct gru_thread_state)); /* zero out header */ gts 326 drivers/misc/sgi-gru/grumain.c atomic_set(>s->ts_refcnt, 1); gts 327 drivers/misc/sgi-gru/grumain.c mutex_init(>s->ts_ctxlock); gts 328 drivers/misc/sgi-gru/grumain.c gts->ts_cbr_au_count = cbr_au_count; gts 329 drivers/misc/sgi-gru/grumain.c gts->ts_dsr_au_count = dsr_au_count; gts 330 drivers/misc/sgi-gru/grumain.c gts->ts_tlb_preload_count = tlb_preload_count; gts 331 drivers/misc/sgi-gru/grumain.c gts->ts_user_options = options; gts 332 drivers/misc/sgi-gru/grumain.c gts->ts_user_blade_id = -1; gts 333 drivers/misc/sgi-gru/grumain.c gts->ts_user_chiplet_id = -1; gts 334 drivers/misc/sgi-gru/grumain.c gts->ts_tsid = tsid; gts 335 drivers/misc/sgi-gru/grumain.c gts->ts_ctxnum = NULLCTX; gts 336 drivers/misc/sgi-gru/grumain.c gts->ts_tlb_int_select = -1; gts 337 drivers/misc/sgi-gru/grumain.c gts->ts_cch_req_slice = -1; gts 338 drivers/misc/sgi-gru/grumain.c gts->ts_sizeavail = GRU_SIZEAVAIL(PAGE_SHIFT); gts 340 drivers/misc/sgi-gru/grumain.c gts->ts_mm = current->mm; gts 341 drivers/misc/sgi-gru/grumain.c gts->ts_vma = vma; gts 345 drivers/misc/sgi-gru/grumain.c gts->ts_gms = gms; gts 348 drivers/misc/sgi-gru/grumain.c gru_dbg(grudev, "alloc gts %p\n", gts); gts 349 drivers/misc/sgi-gru/grumain.c return gts; gts 352 drivers/misc/sgi-gru/grumain.c gts_drop(gts); gts 381 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts; gts 384 drivers/misc/sgi-gru/grumain.c gts = gru_find_current_gts_nolock(vdata, tsid); gts 386 drivers/misc/sgi-gru/grumain.c gru_dbg(grudev, "vma %p, gts %p\n", vma, gts); gts 387 drivers/misc/sgi-gru/grumain.c return gts; gts 398 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts, *ngts; gts 400 drivers/misc/sgi-gru/grumain.c gts = gru_alloc_gts(vma, vdata->vd_cbr_au_count, gts 404 drivers/misc/sgi-gru/grumain.c if (IS_ERR(gts)) gts 405 drivers/misc/sgi-gru/grumain.c return gts; gts 410 drivers/misc/sgi-gru/grumain.c gts_drop(gts); gts 411 drivers/misc/sgi-gru/grumain.c gts = ngts; gts 414 drivers/misc/sgi-gru/grumain.c list_add(>s->ts_next, &vdata->vd_head); gts 417 drivers/misc/sgi-gru/grumain.c gru_dbg(grudev, "vma %p, gts %p\n", vma, gts); gts 418 drivers/misc/sgi-gru/grumain.c return gts; gts 424 drivers/misc/sgi-gru/grumain.c static void gru_free_gru_context(struct gru_thread_state *gts) gts 428 drivers/misc/sgi-gru/grumain.c gru = gts->ts_gru; gts 429 drivers/misc/sgi-gru/grumain.c gru_dbg(grudev, "gts %p, gid %d\n", gts, gru->gs_gid); gts 432 drivers/misc/sgi-gru/grumain.c gru->gs_gts[gts->ts_ctxnum] = NULL; gts 433 drivers/misc/sgi-gru/grumain.c free_gru_resources(gru, gts); gts 434 drivers/misc/sgi-gru/grumain.c BUG_ON(test_bit(gts->ts_ctxnum, &gru->gs_context_map) == 0); gts 435 drivers/misc/sgi-gru/grumain.c __clear_bit(gts->ts_ctxnum, &gru->gs_context_map); gts 436 drivers/misc/sgi-gru/grumain.c gts->ts_ctxnum = NULLCTX; gts 437 drivers/misc/sgi-gru/grumain.c gts->ts_gru = NULL; gts 438 drivers/misc/sgi-gru/grumain.c gts->ts_blade = -1; gts 441 drivers/misc/sgi-gru/grumain.c gts_drop(gts); gts 542 drivers/misc/sgi-gru/grumain.c void gru_unload_context(struct gru_thread_state *gts, int savestate) gts 544 drivers/misc/sgi-gru/grumain.c struct gru_state *gru = gts->ts_gru; gts 546 drivers/misc/sgi-gru/grumain.c int ctxnum = gts->ts_ctxnum; gts 548 drivers/misc/sgi-gru/grumain.c if (!is_kernel_context(gts)) gts 549 drivers/misc/sgi-gru/grumain.c zap_vma_ptes(gts->ts_vma, UGRUADDR(gts), GRU_GSEG_PAGESIZE); gts 553 drivers/misc/sgi-gru/grumain.c gts, gts->ts_cbr_map, gts->ts_dsr_map); gts 558 drivers/misc/sgi-gru/grumain.c if (!is_kernel_context(gts)) gts 559 drivers/misc/sgi-gru/grumain.c gru_unload_mm_tracker(gru, gts); gts 561 drivers/misc/sgi-gru/grumain.c gru_unload_context_data(gts->ts_gdata, gru->gs_gru_base_vaddr, gts 562 drivers/misc/sgi-gru/grumain.c ctxnum, gts->ts_cbr_map, gts 563 drivers/misc/sgi-gru/grumain.c gts->ts_dsr_map); gts 564 drivers/misc/sgi-gru/grumain.c gts->ts_data_valid = 1; gts 571 drivers/misc/sgi-gru/grumain.c gru_free_gru_context(gts); gts 578 drivers/misc/sgi-gru/grumain.c void gru_load_context(struct gru_thread_state *gts) gts 580 drivers/misc/sgi-gru/grumain.c struct gru_state *gru = gts->ts_gru; gts 582 drivers/misc/sgi-gru/grumain.c int i, err, asid, ctxnum = gts->ts_ctxnum; gts 587 drivers/misc/sgi-gru/grumain.c (gts->ts_user_options == GRU_OPT_MISS_FMM_POLL gts 588 drivers/misc/sgi-gru/grumain.c || gts->ts_user_options == GRU_OPT_MISS_FMM_INTR); gts 589 drivers/misc/sgi-gru/grumain.c cch->tlb_int_enable = (gts->ts_user_options == GRU_OPT_MISS_FMM_INTR); gts 591 drivers/misc/sgi-gru/grumain.c gts->ts_tlb_int_select = gru_cpu_fault_map_id(); gts 592 drivers/misc/sgi-gru/grumain.c cch->tlb_int_select = gts->ts_tlb_int_select; gts 594 drivers/misc/sgi-gru/grumain.c if (gts->ts_cch_req_slice >= 0) { gts 596 drivers/misc/sgi-gru/grumain.c cch->req_slice = gts->ts_cch_req_slice; gts 601 drivers/misc/sgi-gru/grumain.c cch->dsr_allocation_map = gts->ts_dsr_map; gts 602 drivers/misc/sgi-gru/grumain.c cch->cbr_allocation_map = gts->ts_cbr_map; gts 604 drivers/misc/sgi-gru/grumain.c if (is_kernel_context(gts)) { gts 613 drivers/misc/sgi-gru/grumain.c asid = gru_load_mm_tracker(gru, gts); gts 616 drivers/misc/sgi-gru/grumain.c cch->sizeavail[i] = gts->ts_sizeavail; gts 624 drivers/misc/sgi-gru/grumain.c err, cch, gts, gts->ts_cbr_map, gts->ts_dsr_map); gts 628 drivers/misc/sgi-gru/grumain.c gru_load_context_data(gts->ts_gdata, gru->gs_gru_base_vaddr, ctxnum, gts 629 drivers/misc/sgi-gru/grumain.c gts->ts_cbr_map, gts->ts_dsr_map, gts->ts_data_valid); gts 636 drivers/misc/sgi-gru/grumain.c gts->ts_gru->gs_gid, gts, gts->ts_cbr_map, gts->ts_dsr_map, gts 637 drivers/misc/sgi-gru/grumain.c (gts->ts_user_options == GRU_OPT_MISS_FMM_INTR), gts->ts_tlb_int_select); gts 645 drivers/misc/sgi-gru/grumain.c int gru_update_cch(struct gru_thread_state *gts) gts 648 drivers/misc/sgi-gru/grumain.c struct gru_state *gru = gts->ts_gru; gts 649 drivers/misc/sgi-gru/grumain.c int i, ctxnum = gts->ts_ctxnum, ret = 0; gts 655 drivers/misc/sgi-gru/grumain.c if (gru->gs_gts[gts->ts_ctxnum] != gts) gts 660 drivers/misc/sgi-gru/grumain.c cch->sizeavail[i] = gts->ts_sizeavail; gts 661 drivers/misc/sgi-gru/grumain.c gts->ts_tlb_int_select = gru_cpu_fault_map_id(); gts 664 drivers/misc/sgi-gru/grumain.c (gts->ts_user_options == GRU_OPT_MISS_FMM_POLL gts 665 drivers/misc/sgi-gru/grumain.c || gts->ts_user_options == GRU_OPT_MISS_FMM_INTR); gts 682 drivers/misc/sgi-gru/grumain.c static int gru_retarget_intr(struct gru_thread_state *gts) gts 684 drivers/misc/sgi-gru/grumain.c if (gts->ts_tlb_int_select < 0 gts 685 drivers/misc/sgi-gru/grumain.c || gts->ts_tlb_int_select == gru_cpu_fault_map_id()) gts 688 drivers/misc/sgi-gru/grumain.c gru_dbg(grudev, "retarget from %d to %d\n", gts->ts_tlb_int_select, gts 690 drivers/misc/sgi-gru/grumain.c return gru_update_cch(gts); gts 700 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts) gts 705 drivers/misc/sgi-gru/grumain.c blade_id = gts->ts_user_blade_id; gts 709 drivers/misc/sgi-gru/grumain.c chiplet_id = gts->ts_user_chiplet_id; gts 719 drivers/misc/sgi-gru/grumain.c void gru_check_context_placement(struct gru_thread_state *gts) gts 728 drivers/misc/sgi-gru/grumain.c gru = gts->ts_gru; gts 729 drivers/misc/sgi-gru/grumain.c if (!gru || gts->ts_tgid_owner != current->tgid) gts 732 drivers/misc/sgi-gru/grumain.c if (!gru_check_chiplet_assignment(gru, gts)) { gts 734 drivers/misc/sgi-gru/grumain.c gru_unload_context(gts, 1); gts 735 drivers/misc/sgi-gru/grumain.c } else if (gru_retarget_intr(gts)) { gts 749 drivers/misc/sgi-gru/grumain.c static int is_gts_stealable(struct gru_thread_state *gts, gts 752 drivers/misc/sgi-gru/grumain.c if (is_kernel_context(gts)) gts 755 drivers/misc/sgi-gru/grumain.c return mutex_trylock(>s->ts_ctxlock); gts 758 drivers/misc/sgi-gru/grumain.c static void gts_stolen(struct gru_thread_state *gts, gts 761 drivers/misc/sgi-gru/grumain.c if (is_kernel_context(gts)) { gts 765 drivers/misc/sgi-gru/grumain.c mutex_unlock(>s->ts_ctxlock); gts 770 drivers/misc/sgi-gru/grumain.c void gru_steal_context(struct gru_thread_state *gts) gts 778 drivers/misc/sgi-gru/grumain.c blade_id = gts->ts_user_blade_id; gts 781 drivers/misc/sgi-gru/grumain.c cbr = gts->ts_cbr_au_count; gts 782 drivers/misc/sgi-gru/grumain.c dsr = gts->ts_dsr_au_count; gts 796 drivers/misc/sgi-gru/grumain.c if (gru_check_chiplet_assignment(gru, gts)) { gts 827 drivers/misc/sgi-gru/grumain.c gts->ustats.context_stolen++; gts 856 drivers/misc/sgi-gru/grumain.c struct gru_state *gru_assign_gru_context(struct gru_thread_state *gts) gts 860 drivers/misc/sgi-gru/grumain.c int blade_id = gts->ts_user_blade_id; gts 868 drivers/misc/sgi-gru/grumain.c if (!gru_check_chiplet_assignment(grux, gts)) gts 870 drivers/misc/sgi-gru/grumain.c if (check_gru_resources(grux, gts->ts_cbr_au_count, gts 871 drivers/misc/sgi-gru/grumain.c gts->ts_dsr_au_count, gts 882 drivers/misc/sgi-gru/grumain.c if (!check_gru_resources(gru, gts->ts_cbr_au_count, gts 883 drivers/misc/sgi-gru/grumain.c gts->ts_dsr_au_count, GRU_NUM_CCH)) { gts 887 drivers/misc/sgi-gru/grumain.c reserve_gru_resources(gru, gts); gts 888 drivers/misc/sgi-gru/grumain.c gts->ts_gru = gru; gts 889 drivers/misc/sgi-gru/grumain.c gts->ts_blade = gru->gs_blade_id; gts 890 drivers/misc/sgi-gru/grumain.c gts->ts_ctxnum = gru_assign_context_number(gru); gts 891 drivers/misc/sgi-gru/grumain.c atomic_inc(>s->ts_refcnt); gts 892 drivers/misc/sgi-gru/grumain.c gru->gs_gts[gts->ts_ctxnum] = gts; gts 898 drivers/misc/sgi-gru/grumain.c gseg_virtual_address(gts->ts_gru, gts->ts_ctxnum), gts, gts 899 drivers/misc/sgi-gru/grumain.c gts->ts_gru->gs_gid, gts->ts_ctxnum, gts 900 drivers/misc/sgi-gru/grumain.c gts->ts_cbr_au_count, gts->ts_dsr_au_count); gts 919 drivers/misc/sgi-gru/grumain.c struct gru_thread_state *gts; gts 929 drivers/misc/sgi-gru/grumain.c gts = gru_find_thread_state(vma, TSID(vaddr, vma)); gts 930 drivers/misc/sgi-gru/grumain.c if (!gts) gts 934 drivers/misc/sgi-gru/grumain.c mutex_lock(>s->ts_ctxlock); gts 937 drivers/misc/sgi-gru/grumain.c gru_check_context_placement(gts); gts 939 drivers/misc/sgi-gru/grumain.c if (!gts->ts_gru) { gts 941 drivers/misc/sgi-gru/grumain.c if (!gru_assign_gru_context(gts)) { gts 943 drivers/misc/sgi-gru/grumain.c mutex_unlock(>s->ts_ctxlock); gts 946 drivers/misc/sgi-gru/grumain.c expires = gts->ts_steal_jiffies + GRU_STEAL_DELAY; gts 948 drivers/misc/sgi-gru/grumain.c gru_steal_context(gts); gts 951 drivers/misc/sgi-gru/grumain.c gru_load_context(gts); gts 952 drivers/misc/sgi-gru/grumain.c paddr = gseg_physical_address(gts->ts_gru, gts->ts_ctxnum); gts 959 drivers/misc/sgi-gru/grumain.c mutex_unlock(>s->ts_ctxlock); gts 385 drivers/misc/sgi-gru/grutables.h #define UGRUADDR(gts) ((gts)->ts_vma->vm_start + \ gts 386 drivers/misc/sgi-gru/grutables.h (gts)->ts_tsid * GRU_GSEG_PAGESIZE) gts 493 drivers/misc/sgi-gru/grutables.h #define thread_cbr_number(gts, n) ((gts)->ts_cbr_idx[(n) / GRU_CBR_AU_SIZE] \ gts 518 drivers/misc/sgi-gru/grutables.h #define for_each_gts_on_gru(gts, gru, ctxnum) \ gts 520 drivers/misc/sgi-gru/grutables.h if (((gts) = (gru)->gs_gts[ctxnum])) gts 593 drivers/misc/sgi-gru/grutables.h static inline int is_kernel_context(struct gru_thread_state *gts) gts 595 drivers/misc/sgi-gru/grutables.h return !gts->ts_mm; gts 621 drivers/misc/sgi-gru/grutables.h extern struct gru_state *gru_assign_gru_context(struct gru_thread_state *gts); gts 622 drivers/misc/sgi-gru/grutables.h extern void gru_load_context(struct gru_thread_state *gts); gts 623 drivers/misc/sgi-gru/grutables.h extern void gru_steal_context(struct gru_thread_state *gts); gts 624 drivers/misc/sgi-gru/grutables.h extern void gru_unload_context(struct gru_thread_state *gts, int savestate); gts 625 drivers/misc/sgi-gru/grutables.h extern int gru_update_cch(struct gru_thread_state *gts); gts 626 drivers/misc/sgi-gru/grutables.h extern void gts_drop(struct gru_thread_state *gts); gts 640 drivers/misc/sgi-gru/grutables.h extern void gru_check_context_placement(struct gru_thread_state *gts);