From: "Roger Pau Monné" <roger.pau@citrix.com>
To: "Chen, Jiqian" <Jiqian.Chen@amd.com>
Cc: Jan Beulich <jbeulich@suse.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>,
"Huang, Ray" <Ray.Huang@amd.com>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 1/1] vpci: Add resizable bar support
Date: Wed, 11 Dec 2024 10:45:07 +0100 [thread overview]
Message-ID: <Z1lfIx1lvUuFFBlB@macbook.local> (raw)
In-Reply-To: <BL1PR12MB5849450C8BF9CDE27777AC03E73E2@BL1PR12MB5849.namprd12.prod.outlook.com>
On Wed, Dec 11, 2024 at 09:36:00AM +0000, Chen, Jiqian wrote:
> On 2024/12/11 16:16, Roger Pau Monné wrote:
> > On Wed, Dec 11, 2024 at 06:37:30AM +0000, Chen, Jiqian wrote:
> >> On 2024/12/10 19:25, Roger Pau Monné wrote:
> >>> On Tue, Dec 10, 2024 at 10:54:43AM +0100, Jan Beulich wrote:
> >>>> On 10.12.2024 08:57, Chen, Jiqian wrote:
> >>>>> On 2024/12/10 15:17, Jan Beulich wrote:
> >>>>>> On 10.12.2024 08:07, Chen, Jiqian wrote:
> >>>>>>> On 2024/12/9 21:59, Jan Beulich wrote:
> >>>>>>>> On 02.12.2024 07:09, Jiqian Chen wrote:
> >>>>>>>>> +static void cf_check rebar_ctrl_write(const struct pci_dev *pdev,
> >>>>>>>>> + unsigned int reg,
> >>>>>>>>> + uint32_t val,
> >>>>>>>>> + void *data)
> >>>>>>>>> +{
> >>>>>>>>> + uint64_t size;
> >>>>>>>>> + unsigned int index;
> >>>>>>>>> + struct vpci_bar *bars = data;
> >>>>>>>>> +
> >>>>>>>>> + if ( pci_conf_read16(pdev->sbdf, PCI_COMMAND) & PCI_COMMAND_MEMORY )
> >>>>>>>>> + return;
> >>>>>>>>
> >>>>>>>> I don't think something like this can go uncommented. I don't think the
> >>>>>>>> spec mandates to drop writes in this situation?
> >>>>>>> Spec says: Software must clear the Memory Space Enable bit in the Command register before writing the BAR Size field.
> >>>>>>> This check is suggested by Roger and it really helps to prevent erroneous writes in this case,
> >>>>>>> such as the result of debugging with Roger in the previous version.
> >>>>>>> I will add the spec's sentences as comments here in next version.
> >>>>>>
> >>>>>> What you quote from the spec may not be enough as a comment here. There's
> >>>>>> no direct implication that the write would simply be dropped on the floor
> >>>>>> if the bit is still set. So I think you want to go a little beyond just
> >>>>>> quoting from the spec.
> >>>>> How about quoting Roger's previous words: " The memory decoding must be disabled before writing the BAR size field.
> >>>>> Otherwise changing the BAR size will lead to the active p2m mappings getting out of sync w.r.t. the new BAR size." ?
> >>>>
> >>>> That'll be better, but imo still not enough to explain the outright ignoring
> >>>> of the write.
> >>>
> >>> I think we might want to do something along the lines of:
> >>>
> >>> uint64_t size = PCI_REBAR_CTRL_SIZE(val);
> >>> struct vpci_bar *bar = data;
> >>>
> >>> if ( bar->enabled )
> >>> {
> >>> if ( size == bar->size )
> >>> return;
> >>>
> >>> /*
> >>> * Refuse to resize a BAR while memory decoding is enabled, as
> >>> * otherwise the size of the mapped region in the p2m would become
> >>> * stale with the newly set BAR size, and the position of the BAR
> >>> * would be reset to undefined. Note the PCIe specification also
> >>> * forbids resizing a BAR with memory decoding enabled.
> >>> */
> >>> gprintk(XENLOG_ERR,
> >>> "%pp: refuse to resize BAR with memory decoding enabled\n",
> >>> &pci->sbdf);
> >>> return;
> >>> }
> >> Thank you very much!
> >>
> >>>
> >>> Note this requires that the data parameter points to the BAR that
> >>> matches the ReBAR control register, this needs adjusting in
> >>> init_rebar().
> >> I think I can keep current implementation of init_rebar() and use bars[index] to get the corresponding BAR.
> >
> > IMO it would be best if you can pass the corresponding bar struct into
> > the handler directly, as that will avoid having to do a PCI read just
> > to get the BAR index from PCI_REBAR_CTRL. It should also avoid the
> > need for the index and BAR type checks in rebar_ctrl_write().
> OK, if so, then I need to move the logic of getting index from PCI_REBAR_CTRL register and checking the BAR type into init_rebar(), right?
Yes, I think that would be better, as then the check is done only once
at init rather than on every access.
Thanks, Roger.
next prev parent reply other threads:[~2024-12-11 9:45 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-02 6:09 [PATCH v2 1/1] vpci: Add resizable bar support Jiqian Chen
2024-12-09 13:59 ` Jan Beulich
2024-12-10 7:07 ` Chen, Jiqian
2024-12-10 7:17 ` Jan Beulich
2024-12-10 7:57 ` Chen, Jiqian
2024-12-10 9:54 ` Jan Beulich
2024-12-10 11:25 ` Roger Pau Monné
2024-12-10 12:15 ` Jan Beulich
2024-12-10 12:54 ` Roger Pau Monné
2024-12-11 6:37 ` Chen, Jiqian
2024-12-11 8:16 ` Roger Pau Monné
2024-12-11 9:36 ` Chen, Jiqian
2024-12-11 9:45 ` Roger Pau Monné [this message]
2024-12-11 7:57 ` Chen, Jiqian
2024-12-11 8:25 ` Jan Beulich
2024-12-11 8:43 ` Roger Pau Monné
2024-12-11 8:53 ` Jan Beulich
2024-12-11 10:19 ` Chen, Jiqian
2024-12-11 10:25 ` Jan Beulich
2024-12-11 8:40 ` Roger Pau Monné
2024-12-11 9:44 ` Chen, Jiqian
2024-12-11 6:18 ` Chen, Jiqian
2024-12-10 11:00 ` Roger Pau Monné
2024-12-10 11:05 ` Jan Beulich
2024-12-11 6:20 ` Chen, Jiqian
2024-12-10 11:30 ` Roger Pau Monné
2024-12-11 6:42 ` Chen, Jiqian
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=Z1lfIx1lvUuFFBlB@macbook.local \
--to=roger.pau@citrix.com \
--cc=Jiqian.Chen@amd.com \
--cc=Ray.Huang@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.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.