On 03/23/2012 08:29 AM, Jan Beulich wrote:
Is there a reasonably low enforced boundary on the number
of devices? Otherwise, a linear lookup would seem overly
simple to me.
The maximum of bdf is 2^16 => 65536.
Which kind of structure do you advice ? Array ? Hash Table ?
Further, with how PCI_CMP_BDF() is defined, you're doing the
wrong thing here anyway - bit 31 is required to be set for the
port CFC access to be a config space one. Plus there's an AMD
extension to this interface, so I think other than shifting out
the low 8 bits and checking that the high bit is set, you shouldn't
do any other masking here.
Actually in config address register the 24-30 bits are reserved.
So, do I need to mask it ?
Moreover what is the AMD extension ?
Jan
+
+ /* We just fill the ioreq, hvm_send_assist_req will send the request */
+ if (unlikely(pci == NULL))
+ {
+ *val = ~0;
+ rc = X86EMUL_OKAY;
+ goto end_handle;
+ }
+
+ p->type = IOREQ_TYPE_PCI_CONFIG;
+ p->addr = (pci_cf8& ~3) + (p->addr& 3);
+
+ set_ioreq(v,&pci->server->ioreq, p);
+
+end_handle:
+ spin_unlock(&v->domain->arch.hvm_domain.pci_root.pci_lock);
+ return rc;
+}