From: Peter Xu <peterx@redhat.com>
To: Andrew Jones <drjones@redhat.com>
Cc: kvm@vger.kernel.org, rkrcmar@redhat.com, agordeev@redhat.com,
jan.kiszka@web.de, pbonzini@redhat.com
Subject: Re: [PATCH kvm-unit-tests 06/17] pci: introduce struct pci_dev
Date: Tue, 8 Nov 2016 01:05:11 +0800 [thread overview]
Message-ID: <20161107170510.GF3719@pxdev.xzpeter.org> (raw)
In-Reply-To: <20161104164101.ymyxzkjbbpsr4mbr@kamzik.brq.redhat.com>
On Fri, Nov 04, 2016 at 05:41:01PM +0100, Andrew Jones wrote:
[...]
> > +void pci_dev_init(struct pci_dev *dev, pcidevaddr_t bdf)
> > +{
> > + memset(dev, 0, sizeof(*dev));
> > + dev->pci_bdf = bdf;
>
> Hmm, bdf means bus-device-function, correct? We're not passing a "bdf"
> in as the second argument to this function though. We're only passing
> devid, assuming bus=0, fn=0. If you'd prefer we stop the bus,fn zero
> assumption, then I think a precursor patch to this should be to change
> our current handle type, pcidevaddr_t, to a "bdf_t".
I thought pcidevaddr_t means bdf? That's a wild guess of me from its
size, as it's defined as:
typedef uint16_t pcidevaddr_t;
uint16_t makes it looks more like bdf rather than devfn. For devfn,
uint8_t suites better.
And what I mean here is to pass in the bdf of the device, not devfn
only (in our case, devfn is always bdf though, since we are only
supporting bus number zero).
>
> > +}
> > +
> > /* Scan bus look for a specific device. Only bus 0 scanned for now. */
> > -pcidevaddr_t pci_find_dev(uint16_t vendor_id, uint16_t device_id)
> > +int pci_find_dev(struct pci_dev *pci_dev, uint16_t vendor_id, uint16_t device_id)
> > {
> > pcidevaddr_t dev;
> >
> > - for (dev = 0; dev < 256; ++dev) {
> > + for (dev = 0; dev < PCI_DEVFN_MAX; ++dev) {
>
> Why introduce this PCI_DEVFN_MAX define?
Because I think this value might be re-used in the future in other
parts of the codes, so I defined a macro instead of using the raw
number here.
>
> > if (pci_config_readw(dev, PCI_VENDOR_ID) == vendor_id &&
> > - pci_config_readw(dev, PCI_DEVICE_ID) == device_id)
> > - return dev;
> > + pci_config_readw(dev, PCI_DEVICE_ID) == device_id) {
> > + pci_dev_init(pci_dev, dev);
> > + return 0;
> > + }
> > }
> >
> > - return PCIDEVADDR_INVALID;
> > + return -1;
>
> Why not use bool for the ret type; true=good, false=bad?
True/false looks more direct, but zero/non-zero wins when in the
future we want to add more error codes than -1. Both work for me. :)
[...]
> > +struct pci_dev {
> > + uint16_t pci_bdf;
>
> No need for 'pci_' in the bdf name. It's whole name already has it,
> pci_dev.bdf
Yes, actually this is something of my own "bad" habit. I used to add
xxx_ prefix for better tag generations. When I read some big C repos
like Linux, I see lots of duplicated field names for different
structs/unions. For example, when I want to see codes related to
StructA.FieldX, cscope will always tell me something more than this
(rather than giving me StructA.FieldX, it gives me
Struct[ABCDE..].FieldX). Then I need to pick out where StructA is.
That's sometimes annoying, which depends on the length of the tag
list. So I prefer to add this kind of prefix in the codes.
Actually when I read some other codes (IIUC FreeBSD kernel), I see
that this "bad" technique is used as well with very short prefix,
e.g., for a struct called "net_filter" and field called "users", it
may be defined as:
net_filter.nf_users
So the "nf_" prefix is the short form of "net_filter", and it can be
used to distinguish the net_filter "users" fields with other "users"
ones.
Here "pci" is short enough IMHO, so I prefixed it.
Not sure whether it's a good idea though.
[...]
> I'm OK with introducing the pci_dev struct, but let's not switch over to
> it from our other handle for everything all at once. I'd rather only
> switch functions that will need more state than just devid/bdf. Anywhere
> we never do then I think expecting the caller to call like
> pci_foo(pcidev->bdf, ...) is reasonable.
Agree. That's some point I want to achieve. E.g., for
pci_dev_exists(), I kept the old interface since it suites better
IMHO. Also for the pci_config_*() APIs as mentioned in the commit
message.
Thanks,
-- peterx
next prev parent reply other threads:[~2016-11-07 17:05 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-26 7:47 [PATCH kvm-unit-tests 00/17] VT-d unit test Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 01/17] x86: intel-iommu: add vt-d init test Peter Xu
2016-11-04 16:12 ` Andrew Jones
2016-11-07 16:32 ` Peter Xu
2016-11-08 10:52 ` Alexander Gordeev
2016-11-08 15:24 ` Peter Xu
2016-11-08 17:40 ` Alexander Gordeev
2016-11-08 17:42 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 02/17] libcflat: add IS_ALIGNED() macro, and page sizes Peter Xu
2016-11-04 16:14 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 03/17] libcflat: moving MIN/MAX here Peter Xu
2016-11-04 16:15 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 04/17] vm/page: provide PGDIR_OFFSET() macro Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 05/17] x86/asm: add cpu_relax() Peter Xu
2016-11-04 16:18 ` Andrew Jones
2016-11-07 16:40 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 06/17] pci: introduce struct pci_dev Peter Xu
2016-11-04 16:41 ` Andrew Jones
2016-11-07 17:05 ` Peter Xu [this message]
2016-11-07 18:02 ` Andrew Jones
2016-11-07 19:42 ` Peter Xu
2016-11-08 10:16 ` Andrew Jones
2016-11-08 15:33 ` Peter Xu
2016-11-08 17:27 ` Andrew Jones
2016-11-08 12:27 ` Alexander Gordeev
2016-11-08 15:48 ` Peter Xu
2016-11-08 17:35 ` Andrew Jones
2016-11-08 17:54 ` Alexander Gordeev
2016-11-08 19:59 ` Peter Xu
2016-11-08 17:46 ` Alexander Gordeev
2016-10-26 7:47 ` [PATCH kvm-unit-tests 07/17] pci: provide pci_scan_bars() Peter Xu
2016-11-04 16:47 ` Andrew Jones
2016-11-07 17:16 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 08/17] x86/vmexit: leverage pci_scan_bars() Peter Xu
2016-11-04 16:54 ` Andrew Jones
2016-11-08 13:43 ` Alexander Gordeev
2016-11-08 15:55 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 09/17] pci: add pci_config_write[wb]() Peter Xu
2016-11-04 16:59 ` Andrew Jones
2016-11-05 17:06 ` Alexander Gordeev
2016-11-07 17:25 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 10/17] pci: provide pci_set_master() Peter Xu
2016-11-04 17:04 ` Andrew Jones
2016-11-07 17:35 ` Peter Xu
2016-11-07 17:59 ` Andrew Jones
2016-11-07 19:45 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 11/17] pci: provide pci_enable_defaults() Peter Xu
2016-11-04 17:08 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 12/17] pci: add bdf helpers Peter Xu
2016-11-04 17:51 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 13/17] pci: edu: introduce pci-edu helpers Peter Xu
2016-11-04 17:18 ` Andrew Jones
2016-11-07 17:41 ` Peter Xu
2016-11-04 17:24 ` Andrew Jones
2016-11-07 17:44 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 14/17] x86: intel-iommu: add dmar test Peter Xu
2016-11-04 17:53 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 15/17] pci: add msi support for 32/64bit address Peter Xu
2016-11-04 17:33 ` Andrew Jones
2016-11-07 17:58 ` Peter Xu
2016-10-26 7:47 ` [PATCH kvm-unit-tests 16/17] x86: intel-iommu: add IR MSI test Peter Xu
2016-11-04 17:40 ` Andrew Jones
2016-10-26 7:47 ` [PATCH kvm-unit-tests 17/17] x86/unittests: add intel-iommu test Peter Xu
2016-11-04 17:46 ` Andrew Jones
2016-11-07 18:06 ` Peter Xu
2016-11-08 10:39 ` Andrew Jones
2016-11-08 15:57 ` Peter Xu
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=20161107170510.GF3719@pxdev.xzpeter.org \
--to=peterx@redhat.com \
--cc=agordeev@redhat.com \
--cc=drjones@redhat.com \
--cc=jan.kiszka@web.de \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@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 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.