602 if (copy_from_user(&req, (void __user *)arg, sizeof(req)))
603 return -EFAULT;
604
605 gru_dbg(grudev, "gseg 0x%lx, vaddr 0x%lx, len 0x%lx\n", req.gseg,
606 req.vaddr, req.len);
607
608 gts = gru_find_lock_gts(req.gseg);
609 if (!gts)
610 return -EINVAL;
611
612 gru_flush_tlb_range(gts->ts_gms, req.vaddr, req.vaddr + req.len);
613 gru_unlock_gts(gts);
614
615 return 0;
616}
617
618
619
620
621
622int gru_set_task_slice(long address)
623{
624 struct gru_thread_state *gts;
625
626 STAT(set_task_slice);
627 gru_dbg(grudev, "address 0x%lx\n", address);
628 gts = gru_alloc_locked_gts(address);
629 if (!gts)
630 return -EINVAL;
631
632 gts->ts_tgid_owner = current->tgid;
633 gru_unlock_gts(gts);
634
635 return 0;
636}