All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Hoyes <Peter.Hoyes@arm.com>
To: Jon Mason <jdmason@kudzu.us>
Cc: "meta-arm@lists.yoctoproject.org"
	<meta-arm@lists.yoctoproject.org>,
	Diego Sueiro <Diego.Sueiro@arm.com>
Subject: Re: [PATCH] arm/lib: Improve FVPRunner shutdown logic
Date: Mon, 18 Jul 2022 17:04:58 +0000	[thread overview]
Message-ID: <AM6PR08MB4280FFAAFCB128C05A3059F7FB8C9@AM6PR08MB4280.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <YtWRtfxSngy27BpE@kudzu.us>

[-- Attachment #1: Type: text/plain, Size: 4656 bytes --]

Thanks as ever.

And noted - I'll send a second email in future.

Peter
________________________________
From: Jon Mason <jdmason@kudzu.us>
Sent: 18 July 2022 18:00
To: Peter Hoyes <Peter.Hoyes@arm.com>
Cc: meta-arm@lists.yoctoproject.org <meta-arm@lists.yoctoproject.org>; Diego Sueiro <Diego.Sueiro@arm.com>
Subject: Re: [PATCH] arm/lib: Improve FVPRunner shutdown logic

On Mon, Jul 18, 2022 at 01:15:33PM +0100, Peter Hoyes wrote:
> From: Peter Hoyes <Peter.Hoyes@arm.com>
>
> Please can this be applied to master + kirkstone.

Applying to both master and kirkstone.

In the future, please add requests like this in the patch after the ---
Otherwise, it will get pulled into the commit message, and I have to
edit it out by hand.  Alternatively, you can send a second email with
"kirkstone" in the subject line after "PATCH" (and my scripts will
automatically pull it in).  Finally, you can just respond to the
initial email with a "and kirkstone too" and I'll do it manually then.

Thanks,
Jon

>
> We have encountered intermittent hanging during FVP shutdown, so improve
> the termination logic by first issuing a terminate(), waiting a bit
> then, if necessary, issuing a kill().
>
> Move returncode logic to after the telnet/pexpect cleanup so it
> actually runs.
>
> Move pexpect.EOF logic into FVPRunner.stop so that it executes before
> closing the pexpect handle.
>
> Issue-Id: SCM-4957
> Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
> Change-Id: Iebb3c3c89367256b1e116e66ffdb6b742358bce4
> ---
>  meta-arm/lib/fvp/runner.py           | 34 +++++++++++++++++++---------
>  meta-arm/lib/oeqa/controllers/fvp.py |  6 -----
>  2 files changed, 23 insertions(+), 17 deletions(-)
>
> diff --git a/meta-arm/lib/fvp/runner.py b/meta-arm/lib/fvp/runner.py
> index 3b3fd00..7641cd6 100644
> --- a/meta-arm/lib/fvp/runner.py
> +++ b/meta-arm/lib/fvp/runner.py
> @@ -72,24 +72,36 @@ class FVPRunner:
>
>      async def stop(self):
>          if self._fvp_process:
> -            self._logger.debug(f"Killing FVP PID {self._fvp_process.pid}")
> +            self._logger.debug(f"Terminating FVP PID {self._fvp_process.pid}")
>              try:
>                  self._fvp_process.terminate()
> +                await asyncio.wait_for(self._fvp_process.wait(), 10.0)
> +            except asyncio.TimeoutError:
> +                self._logger.debug(f"Killing FVP PID {self._fvp_process.pid}")
> +                self._fvp_process.kill()
>              except ProcessLookupError:
>                  pass
>
> -            if await self._fvp_process.wait() != 0:
> -                self._logger.info(f"FVP quit with code {self._fvp_process.returncode}")
> -                return self._fvp_process.returncode
> -            else:
> -                return 0
> -
>          for telnet in self._telnets:
> -            await telnet.terminate()
> -            await telnet.wait()
> +            try:
> +                telnet.terminate()
> +                await asyncio.wait_for(telnet.wait(), 10.0)
> +            except asyncio.TimeoutError:
> +                telnet.kill()
> +            except ProcessLookupError:
> +                pass
> +
> +        for console in self._pexpects:
> +            import pexpect
> +            # Ensure pexpect logs all remaining output to the logfile
> +            console.expect(pexpect.EOF, timeout=5.0)
> +            console.close()
>
> -        for pexpect in self._pexpects:
> -            pexpect.close()
> +        if self._fvp_process and self._fvp_process.returncode:
> +            self._logger.info(f"FVP quit with code {self._fvp_process.returncode}")
> +            return self._fvp_process.returncode
> +        else:
> +            return 0
>
>      async def run(self, until=None):
>          if until and until():
> diff --git a/meta-arm/lib/oeqa/controllers/fvp.py b/meta-arm/lib/oeqa/controllers/fvp.py
> index 30b6296..c8dcf29 100644
> --- a/meta-arm/lib/oeqa/controllers/fvp.py
> +++ b/meta-arm/lib/oeqa/controllers/fvp.py
> @@ -127,12 +127,6 @@ class OEFVPSerialTarget(OEFVPSSHTarget):
>                  default_test_file = f"{name}_log{self.test_log_suffix}"
>                  os.symlink(default_test_file, self.bootlog)
>
> -    async def _after_stop(self):
> -        # Ensure pexpect logs all remaining output to the logfile
> -        for terminal in self.terminals.values():
> -            terminal.expect(pexpect.EOF, timeout=5)
> -            terminal.close()
> -
>      def _get_terminal(self, name):
>          return self.terminals[name]
>
> --
> 2.25.1
>
>

[-- Attachment #2: Type: text/html, Size: 9710 bytes --]

  reply	other threads:[~2022-07-18 17:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-18 12:15 [PATCH] arm/lib: Improve FVPRunner shutdown logic Peter Hoyes
2022-07-18 17:00 ` Jon Mason
2022-07-18 17:04   ` Peter Hoyes [this message]
2022-07-18 19:05 ` Jon Mason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AM6PR08MB4280FFAAFCB128C05A3059F7FB8C9@AM6PR08MB4280.eurprd08.prod.outlook.com \
    --to=peter.hoyes@arm.com \
    --cc=Diego.Sueiro@arm.com \
    --cc=jdmason@kudzu.us \
    --cc=meta-arm@lists.yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.