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_tid_info tinfo;
unsigned long addr;
int ret = 0;
int ret = -ENOTSUPP;
hfi1_cdbg(IOCTL, "IOCTL recv: 0x%x", cmd);
if (cmd != HFI1_IOCTL_ASSIGN_CTXT &&
@@ -649,7 +649,7 @@ long hfi1_file_ioctl(void *private_data, unsigned int cmd,
break;
default:
return -EINVAL;
return -ENOTSUPP;
}
return ret;
}

View File

@@ -3157,24 +3157,28 @@ SYSCALL_DECLARE(ioctl)
break;
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) {
extern long hfi1_file_ioctl(void *private_data,
unsigned int cmd,
unsigned long arg,
unsigned long t_s);
hfi1_file_ioctl(private_data,
rc = hfi1_file_ioctl(private_data,
ihk_mc_syscall_arg1(ctx),
ihk_mc_syscall_arg2(ctx),
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;