pci_alloc_msi is always called, is this bad?
Scott Long
scott4long at yahoo.com
Fri Oct 4 16:05:28 UTC 2013
It used to be that gcc would generate code that would conditionally execute the second clause only if the first clause were true. If that's not longer the case (with gcc and/or clang), then I bet that UDF will break due to this:
/*
* Check to see if the fid is fragmented. The first test
* ensures that we don't wander off the end of the buffer
* looking for the l_iu and l_fi fields.
*/
if (ds->off + UDF_FID_SIZE > ds->size ||
ds->off + le16toh(fid->l_iu) + fid->l_fi + UDF_FID_SIZE > ds->size){
Scott
On Oct 4, 2013, at 9:56 AM, Sean Bruno <sean_bruno at yahoo.com> wrote:
> I was looking at the recent thread on -stable about mfi(4) and I noted
> that it appears, if I'm not mistaken, mfi_pci.c::pci_alloc_msi() is
> *always* invoked regardless of the mfi_msi tuneable. We just ignore the
> allocated MSI by not setting sc->mfi_irq_rid. Is that harmful?
>
> ------------------------------------------------------------------------
> 240 /* Allocate IRQ resource. */
> 241 sc->mfi_irq_rid = 0;
> 242 count = 1;
> 243 if (mfi_msi && pci_alloc_msi(sc->mfi_dev, &count) == 0) {
> 244 device_printf(sc->mfi_dev, "Using MSI\n");
> 245 sc->mfi_irq_rid = 1;
> 246 }
>
>
> ------------------------------------------------------------------------
> I would have thought that this would be more correct, avoid calling
> pci_alloc_msi() if mfi_msi isn't set in the first place.
> ------------------------------------------------------------------------
> sc->mfi_irq_ird = 0;
> count = 1;
> ret = 0
> if(mfi_msi)
> ret = pci_alloc_msi(sc->mfi_dev, &count);
>
> if (!ret) {
> device_printf(sc->mfi_dev, "Using MSI\n");
> sc->mfi_irq_rid = 1;
> }
> ------------------------------------------------------------------------
>
> Sean
More information about the freebsd-scsi
mailing list