pci_alloc_msi is always called, is this bad?

Douglas Gilbert dgilbert at interlog.com
Fri Oct 4 21:59:48 UTC 2013


On 13-10-04 12:57 PM, John-Mark Gurney wrote:
> Sean Bruno wrote this message on Fri, Oct 04, 2013 at 08:56 -0700:
>> 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;
>> 	}
>> ------------------------------------------------------------------------
>
> Per C99 6.5.13 Logical AND operator, para 4:
> Unlike the bitwise binary & operator, the && operator guarantees
> left-to-right evaluation; there is a sequence point after the
> evaluation of the first operand. If the first operand compares equal
> to 0, the second operand is not evaluated.

The C Programming Language, Kernighan and Ritchie,
Copyright 1978. See the middle of page 38.

After explaining this feature they say: "These properties
are critical to writing programs that work."

BTW the book was phototypeset "by a PDP 11/70 running
under the Unix operating system".




More information about the freebsd-scsi mailing list