mirror of https://github.com/xemu-project/xemu.git
nvme queue
-----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEUigzqnXi3OaiR2bATeGvMW1PDekFAmdOpR0ACgkQTeGvMW1P DenTOgf/S4+yjo1pkOIyWoDEQZ434eOwXeUqcM8taGwwRB/IyulFBbGexkY8Feu3 iCYA78FTtGcTCIKWc0ze5TsA2abbrX1mB1IxR3keeYPdQyZPacfxXG5qjjeygU0N 2Ws6UZBFZDNBkLxasT6yHBl9oHriz91IjksA62FYr1pXGHfLbluWTyKYghPfoY4t ifc0tTSinhsFjKixRvuyUo7AWd+jm29QJbcfhckcPTVZ52VE5FUGg0bWvdLk/zWY K4qlPVa2MngV3fSY04Qt1lHuLUCegiHMCjyJHvN3S2nxhJLSWLyE/RU9zUJCXFsd HvJ7nKxq8GODjLNghsjOzdL1rxQPdA== =yOQB -----END PGP SIGNATURE----- Merge tag 'pull-nvme-20241203' of https://gitlab.com/birkelund/qemu into staging nvme queue # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEUigzqnXi3OaiR2bATeGvMW1PDekFAmdOpR0ACgkQTeGvMW1P # DenTOgf/S4+yjo1pkOIyWoDEQZ434eOwXeUqcM8taGwwRB/IyulFBbGexkY8Feu3 # iCYA78FTtGcTCIKWc0ze5TsA2abbrX1mB1IxR3keeYPdQyZPacfxXG5qjjeygU0N # 2Ws6UZBFZDNBkLxasT6yHBl9oHriz91IjksA62FYr1pXGHfLbluWTyKYghPfoY4t # ifc0tTSinhsFjKixRvuyUo7AWd+jm29QJbcfhckcPTVZ52VE5FUGg0bWvdLk/zWY # K4qlPVa2MngV3fSY04Qt1lHuLUCegiHMCjyJHvN3S2nxhJLSWLyE/RU9zUJCXFsd # HvJ7nKxq8GODjLNghsjOzdL1rxQPdA== # =yOQB # -----END PGP SIGNATURE----- # gpg: Signature made Tue 03 Dec 2024 06:28:45 GMT # gpg: using RSA key 522833AA75E2DCE6A24766C04DE1AF316D4F0DE9 # gpg: Good signature from "Klaus Jensen <its@irrelevant.dk>" [full] # gpg: aka "Klaus Jensen <k.jensen@samsung.com>" [full] # Primary key fingerprint: DDCA 4D9C 9EF9 31CC 3468 4272 63D5 6FC5 E55D A838 # Subkey fingerprint: 5228 33AA 75E2 DCE6 A247 66C0 4DE1 AF31 6D4F 0DE9 * tag 'pull-nvme-20241203' of https://gitlab.com/birkelund/qemu: hw/nvme: take a reference on the subsystem on vf realization hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero hw/nvme: fix use/unuse of msix vectors hw/nvme: fix msix_uninit with exclusive bar Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
248f9209ed
|
@ -656,6 +656,12 @@ static void nvme_irq_check(NvmeCtrl *n)
|
|||
if (msix_enabled(pci)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* vfs does not implement intx */
|
||||
if (pci_is_vf(pci)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (~intms & n->irq_status) {
|
||||
pci_irq_assert(pci);
|
||||
} else {
|
||||
|
@ -5423,7 +5429,7 @@ static void nvme_free_cq(NvmeCQueue *cq, NvmeCtrl *n)
|
|||
event_notifier_set_handler(&cq->notifier, NULL);
|
||||
event_notifier_cleanup(&cq->notifier);
|
||||
}
|
||||
if (msix_enabled(pci)) {
|
||||
if (msix_enabled(pci) && cq->irq_enabled) {
|
||||
msix_vector_unuse(pci, cq->vector);
|
||||
}
|
||||
if (cq->cqid) {
|
||||
|
@ -5464,9 +5470,10 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n, uint64_t dma_addr,
|
|||
{
|
||||
PCIDevice *pci = PCI_DEVICE(n);
|
||||
|
||||
if (msix_enabled(pci)) {
|
||||
if (msix_enabled(pci) && irq_enabled) {
|
||||
msix_vector_use(pci, vector);
|
||||
}
|
||||
|
||||
cq->ctrl = n;
|
||||
cq->cqid = cqid;
|
||||
cq->size = size;
|
||||
|
@ -8543,7 +8550,7 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp)
|
|||
unsigned nr_vectors;
|
||||
int ret;
|
||||
|
||||
pci_conf[PCI_INTERRUPT_PIN] = 1;
|
||||
pci_conf[PCI_INTERRUPT_PIN] = pci_is_vf(pci_dev) ? 0 : 1;
|
||||
pci_config_set_prog_interface(pci_conf, 0x2);
|
||||
|
||||
if (n->params.use_intel_id) {
|
||||
|
@ -8834,6 +8841,13 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp)
|
|||
*/
|
||||
n->params.serial = g_strdup(pn->params.serial);
|
||||
n->subsys = pn->subsys;
|
||||
|
||||
/*
|
||||
* Assigning this link (strong link) causes an `object_unref` later in
|
||||
* `object_release_link_property`. Increment the refcount to balance
|
||||
* this out.
|
||||
*/
|
||||
object_ref(OBJECT(pn->subsys));
|
||||
}
|
||||
|
||||
if (!nvme_check_params(n, errp)) {
|
||||
|
@ -8904,7 +8918,12 @@ static void nvme_exit(PCIDevice *pci_dev)
|
|||
pcie_sriov_pf_exit(pci_dev);
|
||||
}
|
||||
|
||||
msix_uninit(pci_dev, &n->bar0, &n->bar0);
|
||||
if (n->params.msix_exclusive_bar && !pci_is_vf(pci_dev)) {
|
||||
msix_uninit_exclusive_bar(pci_dev);
|
||||
} else {
|
||||
msix_uninit(pci_dev, &n->bar0, &n->bar0);
|
||||
}
|
||||
|
||||
memory_region_del_subregion(&n->bar0, &n->iomem);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue