asmlinkage long sys_vperfctr_read(unsigned int domain, void __user *argp, unsigned int argbytes) { struct vperfctr *perfctr; struct task_struct *tsk; int ret; tsk = current; if (IS_ERR(tsk)) { printk(KERN_INFO __FILE__ "vperfctr read: tsk is empty\n"); return PTR_ERR(tsk); } perfctr = tsk->arch.thread.perfctr; if (IS_ERR(perfctr)) { printk(KERN_INFO __FILE__ "vperfctr read: perfct is empty\n"); return PTR_ERR(perfctr); } ret = do_vperfctr_read(perfctr, domain, argp, argbytes, tsk); return ret; }
asmlinkage long sys_vperfctr_read(int fd, unsigned int cmd, void __user *argp, unsigned int argbytes) { struct vperfctr *perfctr; struct task_struct *tsk; int ret; perfctr = fd_get_vperfctr(fd); if (IS_ERR(perfctr)) { return PTR_ERR(perfctr); } tsk = vperfctr_get_tsk(perfctr); if (IS_ERR(tsk)) { ret = PTR_ERR(tsk); goto out; } ret = do_vperfctr_read(perfctr, cmd, argp, argbytes, tsk); vperfctr_put_tsk(tsk); out: put_vperfctr(perfctr); return ret; }