hfi1/ioctl: only forward ioctl if hfi1_file_ioctl didn't handle it
Conflicts: kernel/syscall.c
This commit is contained in:
committed by
Balazs Gerofi
parent
1847a3ac11
commit
159c18b98b
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user