From: Jan Beulich <jbeulich@suse.com>
To: "Marek Marczykowski-Górecki" <marmarek@invisiblethingslab.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
George Dunlap <george.dunlap@citrix.com>,
Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH 2/2] drivers/char: Use sub-page ro API to make just xhci dbc cap RO
Date: Wed, 29 Mar 2023 11:14:52 +0200 [thread overview]
Message-ID: <5cc58e5b-ba23-e7ae-c575-fe8cd713f515@suse.com> (raw)
In-Reply-To: <befefa60ea42a41543bc6dad70a559816cda8b7c.1679911575.git-series.marmarek@invisiblethingslab.com>
On 27.03.2023 12:09, Marek Marczykowski-Górecki wrote:
> ... not the whole page, which may contain other registers too. In fact
> on Tiger Lake and newer (at least), this page do contain other registers
> that Linux tries to use. And with share=yes, a domU would use them too.
> Without this patch, PV dom0 would fail to initialize the controller,
> while HVM would be killed on EPT violation.
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
> ---
> xen/drivers/char/xhci-dbc.c | 38 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/xen/drivers/char/xhci-dbc.c b/xen/drivers/char/xhci-dbc.c
> index 60b781f87202..df2524b0ca18 100644
> --- a/xen/drivers/char/xhci-dbc.c
> +++ b/xen/drivers/char/xhci-dbc.c
> @@ -1226,9 +1226,43 @@ static void __init cf_check dbc_uart_init_postirq(struct serial_port *port)
> uart->dbc.xhc_dbc_offset),
> PFN_UP((uart->dbc.bar_val & PCI_BASE_ADDRESS_MEM_MASK) +
> uart->dbc.xhc_dbc_offset +
> - sizeof(*uart->dbc.dbc_reg)) - 1) )
> - printk(XENLOG_INFO
> + sizeof(*uart->dbc.dbc_reg)) - 1) ) {
Nit: No need for a brace here (and certainly not a misplaced one).
> + printk(XENLOG_WARNING
This log level change looks kind of unrelated.
> "Error while adding MMIO range of device to mmio_ro_ranges\n");
> + }
> + else
> + {
> + unsigned long dbc_regs_start = (uart->dbc.bar_val &
> + PCI_BASE_ADDRESS_MEM_MASK) + uart->dbc.xhc_dbc_offset;
> + unsigned long dbc_regs_end = dbc_regs_start + sizeof(*uart->dbc.dbc_reg);
> +
> + /* This being smaller than a page simplifies conditions below */
> + BUILD_BUG_ON(sizeof(*uart->dbc.dbc_reg) >= PAGE_SIZE - 1);
Why PAGE_SIZE - 1 (or why >= instead of > )? If there is a reason, then
the comment wants to be in sync.
> + if ( dbc_regs_start & (PAGE_SIZE - 1) ||
Nit: Please parenthesize the & against the || (similarly again below).
Like asked by Roger for patch 1 (iirc), here and below please use
PAGE_OFFSET() in favor of (kind of) open-coding it.
> + PFN_DOWN(dbc_regs_start) == PFN_DOWN(dbc_regs_end) )
Nit: Style (indentation).
> + {
> + if ( subpage_mmio_ro_add(
> + _mfn(PFN_DOWN(dbc_regs_start)),
> + dbc_regs_start & (PAGE_SIZE - 1),
> + PFN_DOWN(dbc_regs_start) == PFN_DOWN(dbc_regs_end)
> + ? dbc_regs_end & (PAGE_SIZE - 1)
> + : PAGE_SIZE - 1,
> + FIX_XHCI_END) )
Nit: I think this is too deep a level of indentation; it should be a
single level (4 blanks) from the start of the function name (also
again another time below).
> + printk(XENLOG_WARNING
> + "Error while adding MMIO range of device to subpage_mmio_ro\n");
Nit: Style (indentation).
> + }
> + if ( dbc_regs_end & (PAGE_SIZE - 1) &&
> + PFN_DOWN(dbc_regs_start) != PFN_DOWN(dbc_regs_end) )
> + {
> + if ( subpage_mmio_ro_add(
> + _mfn(PFN_DOWN(dbc_regs_end)),
> + 0,
> + dbc_regs_end & (PAGE_SIZE - 1),
> + FIX_XHCI_END + PFN_DOWN(sizeof(*uart->dbc.dbc_reg))) )
> + printk(XENLOG_WARNING
> + "Error while adding MMIO range of device to subpage_mmio_ro\n");
> + }
> + }
Seeing the uses it occurs to me that the interface is somewhat odd: It
adds a r/o range to a page that is already recorded to be r/o. It would
imo be more logical the other way around: To add an exception (writable)
range. The only alternative would be to include the call to
rangeset_add_range(mmio_ro_ranges, ...) as part of the new function, and
reduce accordingly the range passed earlier in the function. But I think
this would needlessly complicate the code there.
Jan
next prev parent reply other threads:[~2023-03-29 9:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-27 10:09 [PATCH 0/2] Add API for making parts of a MMIO page R/O and use it in XHCI console Marek Marczykowski-Górecki
2023-03-27 10:09 ` [PATCH 1/2] x86/mm: add API for marking only part of a MMIO page read only Marek Marczykowski-Górecki
2023-03-28 14:04 ` Roger Pau Monné
2023-03-28 14:49 ` Marek Marczykowski-Górecki
2023-03-28 15:31 ` Roger Pau Monné
2023-03-29 8:50 ` Jan Beulich
2023-03-29 10:51 ` Marek Marczykowski-Górecki
2023-03-29 12:39 ` Jan Beulich
2023-03-29 13:27 ` Marek Marczykowski-Górecki
2023-03-29 14:12 ` Jan Beulich
2023-03-27 10:09 ` [PATCH 2/2] drivers/char: Use sub-page ro API to make just xhci dbc cap RO Marek Marczykowski-Górecki
2023-03-29 9:14 ` Jan Beulich [this message]
2023-03-29 10:21 ` Marek Marczykowski-Górecki
2023-03-29 10:28 ` Jan Beulich
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=5cc58e5b-ba23-e7ae-c575-fe8cd713f515@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=julien@xen.org \
--cc=marmarek@invisiblethingslab.com \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.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.