Message ID | 20200201122746.1478003-3-laurent@vivier.eu |
---|---|
State | New |
Headers | show |
Series | linux-user: fix use of SIGRTMIN | expand |
> -----Original Message----- > From: Laurent Vivier <laurent@vivier.eu> > Sent: Saturday, February 1, 2020 6:28 AM > To: qemu-devel@nongnu.org > Cc: Josh Kunz <jkz@google.com>; milos.stojanovic@rt-rk.com; Matus Kysel > <mkysel@tachyum.com>; Aleksandar Markovic <aleksandar.markovic@rt- > rk.com>; Marlies Ruck <marlies.ruck@gmail.com>; Laurent Vivier > <laurent@vivier.eu>; Peter Maydell <peter.maydell@linaro.org>; Taylor > Simpson <tsimpson@quicinc.com>; Riku Voipio <riku.voipio@iki.fi> > Subject: [PATCH 2/4] linux-user: cleanup signal.c > > ------------------------------------------------------------------------- > CAUTION: This email originated from outside of the organization. > ------------------------------------------------------------------------- > > No functionnal changes. Prepare the field for future fixes. Spelling error > > Remove memset(.., 0, ...) that is useless on a static array > > Signed-off-by: Laurent Vivier <laurent@vivier.eu> > --- > linux-user/signal.c | 37 ++++++++++++++++++++++--------------- > 1 file changed, 22 insertions(+), 15 deletions(-) > > diff --git a/linux-user/signal.c b/linux-user/signal.c index > 5ca6d62b15d3..f42a2e1a82a5 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -66,12 +66,6 @@ static uint8_t host_to_target_signal_table[_NSIG] = { > [SIGPWR] = TARGET_SIGPWR, > [SIGSYS] = TARGET_SIGSYS, > /* next signals stay the same */ > - /* Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with > - host libpthread signals. This assumes no one actually uses SIGRTMAX :-/ > - To fix this properly we need to do manual signal delivery multiplexed > - over a single host signal. */ > - [__SIGRTMIN] = __SIGRTMAX, > - [__SIGRTMAX] = __SIGRTMIN, > }; > static uint8_t target_to_host_signal_table[_NSIG]; > > @@ -480,13 +474,18 @@ static int core_dump_signal(int sig) > } > } > > -void signal_init(void) > +static void signal_table_init(void) > { > - TaskState *ts = (TaskState *)thread_cpu->opaque; > - struct sigaction act; > - struct sigaction oact; > int i, j; > - int host_sig; > + > + /* > + * Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with > + * host libpthread signals. This assumes no one actually uses SIGRTMAX :- > / > + * To fix this properly we need to do manual signal delivery multiplexed > + * over a single host signal. > + */ > + host_to_target_signal_table[__SIGRTMIN] = __SIGRTMAX; > + host_to_target_signal_table[__SIGRTMAX] = __SIGRTMIN; > > /* generate signal conversion tables */ > for(i = 1; i < _NSIG; i++) { > @@ -497,14 +496,22 @@ void signal_init(void) > j = host_to_target_signal_table[i]; Since you are cleaning up this code, let's give this a more descriptive name - target_sig would be consistent with host_sig used elsewhere. > target_to_host_signal_table[j] = i; > } > +} > + > +void signal_init(void) > +{ > + TaskState *ts = (TaskState *)thread_cpu->opaque; > + struct sigaction act; > + struct sigaction oact; > + int i; > + int host_sig; > + > + /* initialize signal conversion tables */ > + signal_table_init(); > > /* Set the signal mask from the host mask. */ > sigprocmask(0, 0, &ts->signal_mask); > > - /* set all host signal handlers. ALL signals are blocked during > - the handlers to serialize them. */ > - memset(sigact_table, 0, sizeof(sigact_table)); > - > sigfillset(&act.sa_mask); > act.sa_flags = SA_SIGINFO; > act.sa_sigaction = host_signal_handler; > -- > 2.24.1 >
Le 03/02/2020 à 23:58, Taylor Simpson a écrit : > > >> -----Original Message----- >> From: Laurent Vivier <laurent@vivier.eu> >> Sent: Saturday, February 1, 2020 6:28 AM >> To: qemu-devel@nongnu.org >> Cc: Josh Kunz <jkz@google.com>; milos.stojanovic@rt-rk.com; Matus Kysel >> <mkysel@tachyum.com>; Aleksandar Markovic <aleksandar.markovic@rt- >> rk.com>; Marlies Ruck <marlies.ruck@gmail.com>; Laurent Vivier >> <laurent@vivier.eu>; Peter Maydell <peter.maydell@linaro.org>; Taylor >> Simpson <tsimpson@quicinc.com>; Riku Voipio <riku.voipio@iki.fi> >> Subject: [PATCH 2/4] linux-user: cleanup signal.c >> >> ------------------------------------------------------------------------- >> CAUTION: This email originated from outside of the organization. >> ------------------------------------------------------------------------- >> >> No functionnal changes. Prepare the field for future fixes. > > > Spelling error Sorry, french word. Will be changed by "functional" > >> >> Remove memset(.., 0, ...) that is useless on a static array >> >> Signed-off-by: Laurent Vivier <laurent@vivier.eu> >> --- >> linux-user/signal.c | 37 ++++++++++++++++++++++--------------- >> 1 file changed, 22 insertions(+), 15 deletions(-) >> >> diff --git a/linux-user/signal.c b/linux-user/signal.c index >> 5ca6d62b15d3..f42a2e1a82a5 100644 >> --- a/linux-user/signal.c >> +++ b/linux-user/signal.c >> @@ -66,12 +66,6 @@ static uint8_t host_to_target_signal_table[_NSIG] = { >> [SIGPWR] = TARGET_SIGPWR, >> [SIGSYS] = TARGET_SIGSYS, >> /* next signals stay the same */ >> - /* Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with >> - host libpthread signals. This assumes no one actually uses SIGRTMAX :-/ >> - To fix this properly we need to do manual signal delivery multiplexed >> - over a single host signal. */ >> - [__SIGRTMIN] = __SIGRTMAX, >> - [__SIGRTMAX] = __SIGRTMIN, >> }; >> static uint8_t target_to_host_signal_table[_NSIG]; >> >> @@ -480,13 +474,18 @@ static int core_dump_signal(int sig) >> } >> } >> >> -void signal_init(void) >> +static void signal_table_init(void) >> { >> - TaskState *ts = (TaskState *)thread_cpu->opaque; >> - struct sigaction act; >> - struct sigaction oact; >> int i, j; >> - int host_sig; >> + >> + /* >> + * Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with >> + * host libpthread signals. This assumes no one actually uses SIGRTMAX :- >> / >> + * To fix this properly we need to do manual signal delivery multiplexed >> + * over a single host signal. >> + */ >> + host_to_target_signal_table[__SIGRTMIN] = __SIGRTMAX; >> + host_to_target_signal_table[__SIGRTMAX] = __SIGRTMIN; >> >> /* generate signal conversion tables */ >> for(i = 1; i < _NSIG; i++) { >> @@ -497,14 +496,22 @@ void signal_init(void) >> j = host_to_target_signal_table[i]; > > Since you are cleaning up this code, let's give this a more descriptive name - target_sig would be consistent with host_sig used elsewhere. I agree. Thanks, Laurent
diff --git a/linux-user/signal.c b/linux-user/signal.c index 5ca6d62b15d3..f42a2e1a82a5 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -66,12 +66,6 @@ static uint8_t host_to_target_signal_table[_NSIG] = { [SIGPWR] = TARGET_SIGPWR, [SIGSYS] = TARGET_SIGSYS, /* next signals stay the same */ - /* Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with - host libpthread signals. This assumes no one actually uses SIGRTMAX :-/ - To fix this properly we need to do manual signal delivery multiplexed - over a single host signal. */ - [__SIGRTMIN] = __SIGRTMAX, - [__SIGRTMAX] = __SIGRTMIN, }; static uint8_t target_to_host_signal_table[_NSIG]; @@ -480,13 +474,18 @@ static int core_dump_signal(int sig) } } -void signal_init(void) +static void signal_table_init(void) { - TaskState *ts = (TaskState *)thread_cpu->opaque; - struct sigaction act; - struct sigaction oact; int i, j; - int host_sig; + + /* + * Nasty hack: Reverse SIGRTMIN and SIGRTMAX to avoid overlap with + * host libpthread signals. This assumes no one actually uses SIGRTMAX :-/ + * To fix this properly we need to do manual signal delivery multiplexed + * over a single host signal. + */ + host_to_target_signal_table[__SIGRTMIN] = __SIGRTMAX; + host_to_target_signal_table[__SIGRTMAX] = __SIGRTMIN; /* generate signal conversion tables */ for(i = 1; i < _NSIG; i++) { @@ -497,14 +496,22 @@ void signal_init(void) j = host_to_target_signal_table[i]; target_to_host_signal_table[j] = i; } +} + +void signal_init(void) +{ + TaskState *ts = (TaskState *)thread_cpu->opaque; + struct sigaction act; + struct sigaction oact; + int i; + int host_sig; + + /* initialize signal conversion tables */ + signal_table_init(); /* Set the signal mask from the host mask. */ sigprocmask(0, 0, &ts->signal_mask); - /* set all host signal handlers. ALL signals are blocked during - the handlers to serialize them. */ - memset(sigact_table, 0, sizeof(sigact_table)); - sigfillset(&act.sa_mask); act.sa_flags = SA_SIGINFO; act.sa_sigaction = host_signal_handler;
No functionnal changes. Prepare the field for future fixes. Remove memset(.., 0, ...) that is useless on a static array Signed-off-by: Laurent Vivier <laurent@vivier.eu> --- linux-user/signal.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-)