hfi1/ioctl: only forward ioctl if hfi1_file_ioctl didn't handle it

Conflicts:
	kernel/syscall.c
This commit is contained in:
Dominique Martinet
2017-09-19 12:50:13 +09:00
committed by Balazs Gerofi
parent 1847a3ac11
commit 159c18b98b
2 changed files with 15 additions and 11 deletions

View File

@@ -424,7 +424,7 @@ long hfi1_file_ioctl(void *private_data, unsigned int cmd,
struct hfi1_ctxtdata *uctxt = fd->uctxt; struct hfi1_ctxtdata *uctxt = fd->uctxt;
struct hfi1_tid_info tinfo; struct hfi1_tid_info tinfo;
unsigned long addr; unsigned long addr;
int ret = 0; int ret = -ENOTSUPP;
hfi1_cdbg(IOCTL, "IOCTL recv: 0x%x", cmd); hfi1_cdbg(IOCTL, "IOCTL recv: 0x%x", cmd);
if (cmd != HFI1_IOCTL_ASSIGN_CTXT && if (cmd != HFI1_IOCTL_ASSIGN_CTXT &&
@@ -649,7 +649,7 @@ long hfi1_file_ioctl(void *private_data, unsigned int cmd,
break; break;
default: default:
return -EINVAL; return -ENOTSUPP;
} }
return ret; return ret;
} }

View File

@@ -3157,24 +3157,28 @@ SYSCALL_DECLARE(ioctl)
break; break;
ihk_mc_spinlock_unlock(&proc->mckfd_lock, irqstate); ihk_mc_spinlock_unlock(&proc->mckfd_lock, irqstate);
if(fdp && fdp->ioctl_cb){
//kprintf("ioctl: found system fd %d\n", fd);
rc = fdp->ioctl_cb(fdp, ctx);
}
else{
rc = syscall_generic_forwarding(__NR_ioctl, ctx);
}
if (private_data) { if (private_data) {
extern long hfi1_file_ioctl(void *private_data, extern long hfi1_file_ioctl(void *private_data,
unsigned int cmd, unsigned int cmd,
unsigned long arg, unsigned long arg,
unsigned long t_s); unsigned long t_s);
hfi1_file_ioctl(private_data, rc = hfi1_file_ioctl(private_data,
ihk_mc_syscall_arg1(ctx), ihk_mc_syscall_arg1(ctx),
ihk_mc_syscall_arg2(ctx), ihk_mc_syscall_arg2(ctx),
t_s); t_s);
/* continue forwarding iff hfi1 didn't handle it */
// TODO: improve heuristics?
if (rc != -ENOTSUPP)
return rc;
}
if (fdp && fdp->ioctl_cb) {
//kprintf("ioctl: found system fd %d\n", fd);
rc = fdp->ioctl_cb(fdp, ctx);
}
else {
rc = syscall_generic_forwarding(__NR_ioctl, ctx);
} }
return rc; return rc;