RE: [PATCH] SCSI driver for VMware's virtual HBA.

Alok Kataria
2009-08-28T22:30:55Z

Hi Chetan,

On Fri, 2009-08-28 at 14:18 -0700, Chetan.Loke@Emulex.Com wrote:
> Alok,
>
>
> > +static int __devinit pvscsi_allocate_rings(struct pvscsi_adapter
> > *adapter)
> > +{
> > + adapter->rings_state = pci_alloc_consistent(adapter->dev, PAGE_SIZE,
> > + &adapter->ringStatePA);
> > + if (!adapter->rings_state)
> > + return -ENOMEM;
> > +
> > + adapter->req_pages = min(PVSCSI_MAX_NUM_PAGES_REQ_RING,
> > + pvscsi_ring_pages);
> > + adapter->req_depth = adapter->req_pages
> > + * PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE;
> > + adapter->req_ring = pci_alloc_consistent(adapter->dev,
> > + adapter->req_pages * PAGE_SIZE,
> > + &adapter->reqRingPA);
> > + if (!adapter->req_ring)
> > + return -ENOMEM;
> > +
> > + adapter->cmp_pages = min(PVSCSI_MAX_NUM_PAGES_CMP_RING,
> > + pvscsi_ring_pages);
> > + adapter->cmp_ring = pci_alloc_consistent(adapter->dev,
> > + adapter->cmp_pages * PAGE_SIZE,
> > + &adapter->cmpRingPA);
> > + if (!adapter->cmp_ring)
> > + return -ENOMEM;
> > +
> > + BUG_ON(adapter->ringStatePA & ~PAGE_MASK);
> > + BUG_ON(adapter->reqRingPA & ~PAGE_MASK);
> > + BUG_ON(adapter->cmpRingPA & ~PAGE_MASK);
> > +
> > + if (!adapter->use_msg)
> > + return 0;
> > +
> > + adapter->msg_pages = min(PVSCSI_MAX_NUM_PAGES_MSG_RING,
> > + pvscsi_msg_ring_pages);
> > + adapter->msg_ring = pci_alloc_consistent(adapter->dev,
> > + adapter->msg_pages * PAGE_SIZE,
> > + &adapter->msgRingPA);
> > + if (!adapter->msg_ring)
> > + return -ENOMEM;
> > + BUG_ON(adapter->msgRingPA & ~PAGE_MASK);
> > +
> > + return 0;
> > +}
> > +
>
> I understand the emulation etc. But I see that this function isn't
> allocating multiple rings right? Didn't see any performance benefits?
>

The function is allocating multiple rings, actually 2 of them for the
IO path, request and completion rings (req_ring, cmp_ring).

Let me know if you were asking something else.

Thanks,
Alok

>
>
> Chetan
>
>
>
>