qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: "Claudio Fontana" <cfontana@suse.de>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>
Cc: Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Roman Bolshakov <r.bolshakov@yadro.com>,
	qemu-devel@nongnu.org
Subject: Re: [PATCH v22 11/17] i386: split misc helper into user and sysemu parts
Date: Wed, 24 Feb 2021 19:14:03 -0800	[thread overview]
Message-ID: <be5fd14b-ac00-4c76-7f2f-bc1d323e02de@linaro.org> (raw)
In-Reply-To: <20210224133428.14071-12-cfontana@suse.de>

On 2/24/21 5:34 AM, Claudio Fontana wrote:
> +void helper_outb(CPUX86State *env, uint32_t port, uint32_t data)
> +{
> +    fprintf(stderr, "outb: port=0x%04x, data=%02x\n", port, data);
> +}
> +
> +target_ulong helper_inb(CPUX86State *env, uint32_t port)
> +{
> +    fprintf(stderr, "inb: port=0x%04x\n", port);
> +    return 0;
> +}
> +
> +void helper_outw(CPUX86State *env, uint32_t port, uint32_t data)
> +{
> +    fprintf(stderr, "outw: port=0x%04x, data=%04x\n", port, data);
> +}
> +
> +target_ulong helper_inw(CPUX86State *env, uint32_t port)
> +{
> +    fprintf(stderr, "inw: port=0x%04x\n", port);
> +    return 0;
> +}
> +
> +void helper_outl(CPUX86State *env, uint32_t port, uint32_t data)
> +{
> +    fprintf(stderr, "outl: port=0x%04x, data=%08x\n", port, data);
> +}
> +
> +target_ulong helper_inl(CPUX86State *env, uint32_t port)
> +{
> +    fprintf(stderr, "inl: port=0x%04x\n", port);
> +    return 0;
> +}
> +
> +target_ulong helper_read_crN(CPUX86State *env, int reg)
> +{
> +    return 0;
> +}
> +
> +void helper_write_crN(CPUX86State *env, int reg, target_ulong t0)
> +{
> +}
> +
> +void helper_wrmsr(CPUX86State *env)
> +{
> +}
> +
> +void helper_rdmsr(CPUX86State *env)
> +{
> +}

It is not obvious, but all of these are not reachable.

For in/out, there's the IOPL check.  When running on hardware, there's an
ioperm(2) syscall that can change adjust the TSS to allow userland access to
specific ports.  This is used by setuid applications like the xserver.  But we
don't (and can't) implement this syscall in qemu linux-user, so the check
within check_io in seg_helper.c always fails and raises EXCP0D_GPF.

For crN and msr, the cpl check is there in the switch:

    case 0x120: /* mov reg, crN */
    case 0x122: /* mov crN, reg */
        if (s->cpl != 0) {
            gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base);
...
    case 0x130: /* wrmsr */
    case 0x132: /* rdmsr */
        if (s->cpl != 0) {
            gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base);

I think we can improve the compiler eliminating some of this code with

#ifdef CONFIG_USER_ONLY
#define CPL(S)  3
#else
#define CPL(S)  ((S)->cpl)
#endif

then change all of the tests to

    if (CPL(s) != 0) {

and then something akin to

#ifdef CONFIG_USER_ONLY
static inline void gen_helper_rdmsr(TCGv_env unused)
{
    qemu_build_not_reached()
}
#endif

For in/out, lots more cleanup would be required, since that needs to propagate
up through ins/outs, and gen_check_io would want changing as well.  I don't see
an obvious way to avoid the stubs, really.  But we can g_assert_not_reached()
within them, rather than fprintf to stderr.


r~


  reply	other threads:[~2021-02-25  3:15 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-24 13:34 [PATCH v22 00/17] i386 cleanup PART 2 Claudio Fontana
2021-02-24 13:34 ` [PATCH v22 01/17] i386: split cpu accelerators from cpu.c, using AccelCPUClass Claudio Fontana
2021-02-25  1:23   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 02/17] cpu: call AccelCPUClass::cpu_realizefn in cpu_exec_realizefn Claudio Fontana
2021-02-25  1:25   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 03/17] accel: introduce new accessor functions Claudio Fontana
2021-02-25  1:26   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 04/17] target/i386: fix host_cpu_adjust_phys_bits error handling Claudio Fontana
2021-02-24 13:34 ` [PATCH v22 05/17] accel-cpu: make cpu_realizefn return a bool Claudio Fontana
2021-02-24 13:34 ` [PATCH v22 06/17] meson: add target_user_arch Claudio Fontana
2021-02-24 21:21   ` Philippe Mathieu-Daudé
2021-02-24 22:35     ` Eric Blake
2021-02-24 22:53       ` Philippe Mathieu-Daudé
2021-02-25  7:16       ` Claudio Fontana
2021-02-24 13:34 ` [PATCH v22 07/17] i386: split off sysemu-only functionality in tcg-cpu Claudio Fontana
2021-02-25  1:30   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 08/17] i386: split smm helper (sysemu) Claudio Fontana
2021-02-25  1:32   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 09/17] i386: split tcg excp_helper into sysemu and user parts Claudio Fontana
2021-02-25  1:33   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 10/17] i386: move TCG btp_helper into sysemu/ Claudio Fontana
2021-02-25  1:40   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 11/17] i386: split misc helper into user and sysemu parts Claudio Fontana
2021-02-25  3:14   ` Richard Henderson [this message]
2021-02-24 13:34 ` [PATCH v22 12/17] i386: separate fpu_helper " Claudio Fontana
2021-02-25  3:28   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 13/17] i386: split svm_helper into sysemu and stub-only user Claudio Fontana
2021-02-25  3:37   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 14/17] i386: split seg_helper into user-only and sysemu parts Claudio Fontana
2021-02-25  3:57   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 15/17] i386: split off sysemu part of cpu.c Claudio Fontana
2021-02-25  4:02   ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 16/17] i386: gdbstub: only write CR0/CR2/CR3/EFER for SOFTMMU Claudio Fontana
2021-02-25  4:19   ` Richard Henderson
2021-02-25  8:55     ` Claudio Fontana
2021-02-26  4:05       ` Richard Henderson
2021-02-26  9:22         ` Claudio Fontana
2021-02-26 15:07           ` Richard Henderson
2021-02-24 13:34 ` [PATCH v22 17/17] i386: move cpu_load_efer into sysemu-only section of cpu.h Claudio Fontana
2021-02-25  4:28   ` Richard Henderson
2021-02-25  9:02     ` Claudio Fontana
2021-02-24 14:12 ` [PATCH v22 00/17] i386 cleanup PART 2 no-reply
2021-02-24 22:54 ` Philippe Mathieu-Daudé

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=be5fd14b-ac00-4c76-7f2f-bc1d323e02de@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=cfontana@suse.de \
    --cc=ehabkost@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=r.bolshakov@yadro.com \
    --cc=thuth@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).