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