"%d: %s pages %pK-%pK\n", proc->pid,
allocate ? "allocate" : "free", start, end);
- if (end <= start)
- return 0;
+ has_cap_nice = has_capability_noaudit(task, CAP_SYS_NICE);
- trace_binder_update_page_range(proc, allocate, start, end);
+ priority = to_userspace_prio(policy, desired.prio);
- if (vma)
- mm = NULL;
- else
- mm = get_task_mm(proc->tsk);
+ if (verify && is_rt_policy(policy) && !has_cap_nice) {
+ long max_rtprio = task_rlimit(task, RLIMIT_RTPRIO);
- if (max_rtprio == 0) {
- policy = SCHED_NORMAL;
- priority = MIN_NICE;
- } else if (priority > max_rtprio) {
- priority = max_rtprio;
+ if (mm) {
+ down_write(&mm->mmap_sem);
+ if (!mmget_still_valid(mm)) {
+ if (allocate == 0)
+ goto free_range;
+ goto err_no_vma;
+ }
+
+ vma = proc->vma;
+ if (vma && mm != proc->vma_vm_mm) {
+ pr_err("%d: vma mm and task mm mismatch\n",
+ proc->pid);
+ vma = NULL;
}
}