uti: Fix signal relay from mcexec to McKernel

Change-Id: I2ffd8049a0fb1637cfc6bab7fe24c6a85e5e53fc
This commit is contained in:
Masamichi Takagi
2018-09-04 09:42:16 +09:00
parent 5cb8a1f10f
commit 8c11daf726
2 changed files with 19 additions and 13 deletions

View File

@@ -1154,9 +1154,9 @@ sendsig(int sig, siginfo_t *siginfo, void *context)
int cpu;
struct signal_desc sigdesc;
struct thread_data_s *tp;
int localthread;
int not_uti;
localthread = ioctl(fd, MCEXEC_UP_SIG_THREAD, 1);
not_uti = ioctl(fd, MCEXEC_UP_SIG_THREAD, 1);
pid = getpid();
tid = gettid();
if (siginfo->si_pid == pid &&
@@ -1189,7 +1189,7 @@ sendsig(int sig, siginfo_t *siginfo, void *context)
remote_tid = -1;
}
if (localthread) {
if (not_uti) { /* target isn't uti thread, ask McKernel to call the handler */
memset(&sigdesc, '\0', sizeof sigdesc);
sigdesc.cpu = cpu;
sigdesc.pid = (int)pid;
@@ -1201,7 +1201,7 @@ sendsig(int sig, siginfo_t *siginfo, void *context)
exit(1);
}
}
else {
else { /* target is uti thread, mcexec calls the handler */
struct syscall_struct param;
int rc;
@@ -1226,7 +1226,7 @@ sendsig(int sig, siginfo_t *siginfo, void *context)
}
}
out:
if (!localthread)
if (!not_uti)
ioctl(fd, MCEXEC_UP_SIG_THREAD, 0);
}