Re: [PATCH 1/3] msi vector targeting abstractions

Andreas Schwab
2006-03-21T16:38:08Z

"Jun'ichi Nomura" <j-nomura@ce.jp.nec.com> writes:

> Hi Mark,
>
> Mark Maule wrote:
>> Index: linux-2.6.16/include/asm-ia64/msi.h
>> =================================>> --- linux-2.6.16.orig/include/asm-ia64/msi.h 2006-03-19 23:53:29.000000000 -0600
>> +++ linux-2.6.16/include/asm-ia64/msi.h 2006-03-20 14:50:53.331368084 -0600
>> @@ -14,4 +14,16 @@
>> #define ack_APIC_irq ia64_eoi
>> #define MSI_TARGET_CPU_SHIFT 4
>>
>> +extern struct msi_ops msi_apic_ops;
>> +
>> +static inline int msi_arch_init(void)
>> +{
>> + if (platform_msi_init)
>> + return platform_msi_init();
>> +
>> + /* default ops for most ia64 platforms */
>> + msi_register(&msi_apic_ops);
>> + return 0;
>> +}
>> +
>> #endif /* ASM_MSI_H */
>
> It turned out that the above code breaks configs other
> than CONFIG_IA64_SN and CONFIG_IA64_GENERIC.
> e.g. CONFIG_IA64_DIG.
>
> In file included from /build/16.msi/drivers/pci/msi.h:71,
> from /build/16.msi/drivers/pci/msi.c:24:
> include2/asm/msi.h: In function `msi_arch_init':
> include2/asm/msi.h:22: error: called object is not a function
> make[3]: *** [drivers/pci/msi.o] Error 1
>
> Something like below might fix this problem:
> if (platform_msi_init) {
> ia64_mv_msi_init_t *fn = platform_msi_init;
> return (*fn)();
> }

platform_msi_init should have the right type in the first place,
ie. defined to ((ia64_mv_msi_init_t*)NULL) instead of just NULL.

Andreas.

--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."