2006-03-14 20:59:32

by Junichi Nomura

[permalink] [raw]
Subject: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Hello,

In 2.6.16-rc6-mm1, I've seen tons of compiler warnings on ia64:

include2/asm/msi.h: In function `ia64_msi_init':
include2/asm/msi.h:23: warning: implicit declaration of function `msi_register'
In file included from include2/asm/machvec.h:408,
from include2/asm/io.h:70,
from include2/asm/smp.h:20,
from /build/rc6/source/include/linux/smp.h:22,

The problem is that msi_register() is used in ia64_msi_init()
without declaration.
Since ia64_msi_init() is a part of machine vector, most of files
hit this warning and may hide other important messages.

Other than ia64, i386 and x86_64 have similar msi.h.
But they are not affected since include/asm/msi.h isn't
included without drivers/pci/pci.h where msi_register() is
declared.

The attached patch fixes this specific problem.
Proper fix might be moving the declaration in common header
but including something from machvec.h causes a lot of other
problems, so it would be nice if someone have better idea on this.

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.


Attachments:
explicit-declaration-of-msi-register.patch (956.00 B)

2006-03-14 21:43:33

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

"Jun'ichi Nomura" <[email protected]> wrote:
>
> Declare msi_register() in msi.h.
>
> The patch is especially necessary for ia64 on which most of files
> emit compiler warnings like below:
> include2/asm/msi.h: In function `ia64_msi_init':
> include2/asm/msi.h:23: warning: implicit declaration of function `msi_register'
> In file included from include2/asm/machvec.h:408,
> from include2/asm/io.h:70,
> from include2/asm/smp.h:20,
> from /build/rc6/source/include/linux/smp.h:22,

I wonder why I didn't get that. Need a better ia64 config I guess.

> Signed-off-by: Jun'ichi Nomura <[email protected]>
>
> --- linux-2.6.16-rc6-mm1.orig/include/asm-ia64/msi.h 2006-03-14 13:54:11.000000000 -0500
> +++ linux-2.6.16-rc6-mm1/include/asm-ia64/msi.h 2006-03-14 14:05:26.000000000 -0500
> @@ -15,6 +15,7 @@ static inline void set_intr_gate (int nr
> #define MSI_TARGET_CPU_SHIFT 4
>
> extern struct msi_ops msi_apic_ops;
> +extern int msi_register(struct msi_ops *);
>
> /* default ia64 msi init routine */
> static inline int ia64_msi_init(void)

The offending patch is gregkh-pci-msi-vector-targeting-abstractions.patch.

That patch already adds a declaration for msi_register(), in
drivers/pci/pci.h. We don't want to add a duplicated declaration like
this.

One option might be to create inclued/linux/msi.h, put this declaration in
there then include <asm/msi.h>. Possibly some other declarations should be
moved into linux/msi.h as well.

2006-03-14 21:57:38

by Adrian Bunk

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Tue, Mar 14, 2006 at 04:01:02PM -0500, Jun'ichi Nomura wrote:
> Hello,
>
> In 2.6.16-rc6-mm1, I've seen tons of compiler warnings on ia64:
>
> include2/asm/msi.h: In function `ia64_msi_init':
> include2/asm/msi.h:23: warning: implicit declaration of function `msi_register'
> In file included from include2/asm/machvec.h:408,
> from include2/asm/io.h:70,
> from include2/asm/smp.h:20,
> from /build/rc6/source/include/linux/smp.h:22,
>
> The problem is that msi_register() is used in ia64_msi_init()
> without declaration.
> Since ia64_msi_init() is a part of machine vector, most of files
> hit this warning and may hide other important messages.
>...

To avoid any wrong impression:

This kind of warnings isn't harmless.

gcc tries to guess the prototype of the function, and if gcc guessed
wrong this can cause nasty and hard to debug runtime errors.

> Thanks,
>...

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

2006-03-14 21:59:34

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Tue, Mar 14, 2006 at 01:45:35PM -0800, Andrew Morton wrote:
> "Jun'ichi Nomura" <[email protected]> wrote:
> >
> > Declare msi_register() in msi.h.
> >
> > The patch is especially necessary for ia64 on which most of files
> > emit compiler warnings like below:
> > include2/asm/msi.h: In function `ia64_msi_init':
> > include2/asm/msi.h:23: warning: implicit declaration of function `msi_register'
> > In file included from include2/asm/machvec.h:408,
> > from include2/asm/io.h:70,
> > from include2/asm/smp.h:20,
> > from /build/rc6/source/include/linux/smp.h:22,
>
> I wonder why I didn't get that. Need a better ia64 config I guess.
>
> > Signed-off-by: Jun'ichi Nomura <[email protected]>
> >
> > --- linux-2.6.16-rc6-mm1.orig/include/asm-ia64/msi.h 2006-03-14 13:54:11.000000000 -0500
> > +++ linux-2.6.16-rc6-mm1/include/asm-ia64/msi.h 2006-03-14 14:05:26.000000000 -0500
> > @@ -15,6 +15,7 @@ static inline void set_intr_gate (int nr
> > #define MSI_TARGET_CPU_SHIFT 4
> >
> > extern struct msi_ops msi_apic_ops;
> > +extern int msi_register(struct msi_ops *);
> >
> > /* default ia64 msi init routine */
> > static inline int ia64_msi_init(void)
>
> The offending patch is gregkh-pci-msi-vector-targeting-abstractions.patch.
>
> That patch already adds a declaration for msi_register(), in
> drivers/pci/pci.h. We don't want to add a duplicated declaration like
> this.
>
> One option might be to create inclued/linux/msi.h, put this declaration in
> there then include <asm/msi.h>. Possibly some other declarations should be
> moved into linux/msi.h as well.

Ugh. What is the file that is causing the problem? What is "include2"
in your directory path above?

Whatever .c file has it, should just include the internal pci.h file
that already has this prototype, like Andrew says...

thanks,

greg k-h

2006-03-14 22:25:55

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Tue, Mar 14, 2006 at 01:59:22PM -0800, Greg KH wrote:
> Ugh. What is the file that is causing the problem? What is "include2"
> in your directory path above?

you get include2 when you specify a different object directory:

$ ls obj
Makefile arch drivers include2 kernel net sound
Module.symvers block fs init lib scripts usr
System.map crypto include ipc mm security vmlinux

2006-03-14 23:55:33

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Adrian Bunk wrote:
>>include2/asm/msi.h: In function `ia64_msi_init':
>>include2/asm/msi.h:23: warning: implicit declaration of function `msi_register'
>>In file included from include2/asm/machvec.h:408,
>> from include2/asm/io.h:70,
>> from include2/asm/smp.h:20,
>> from /build/rc6/source/include/linux/smp.h:22,
>>...
>
> To avoid any wrong impression:
>
> This kind of warnings isn't harmless.
>
> gcc tries to guess the prototype of the function, and if gcc guessed
> wrong this can cause nasty and hard to debug runtime errors.

Sure.
But for this case, gcc emits the above warning for any files
which includes, for example, include/linux/smp.h on ia64.
So while the warning is harmless, it may cause other harmful
warnings being overlooked.

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.

2006-03-15 00:09:53

by Mark Maule

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Tue, Mar 14, 2006 at 06:55:55PM -0500, Jun'ichi Nomura wrote:
> Adrian Bunk wrote:
> >>include2/asm/msi.h: In function `ia64_msi_init':
> >>include2/asm/msi.h:23: warning: implicit declaration of function
> >>`msi_register'
> >>In file included from include2/asm/machvec.h:408,
> >> from include2/asm/io.h:70,
> >> from include2/asm/smp.h:20,
> >> from /build/rc6/source/include/linux/smp.h:22,
> >>...
> >
> >To avoid any wrong impression:
> >
> >This kind of warnings isn't harmless.
> >
> >gcc tries to guess the prototype of the function, and if gcc guessed
> >wrong this can cause nasty and hard to debug runtime errors.
>
> Sure.
> But for this case, gcc emits the above warning for any files
> which includes, for example, include/linux/smp.h on ia64.
> So while the warning is harmless, it may cause other harmful
> warnings being overlooked.
>

Yes, this should be cleaned up. I'll take a look.

I thought though that we had all of this compiling cleanly ... guess not.

Mark

2006-03-15 00:49:49

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Hi Andrew,

Andrew Morton wrote:
> One option might be to create inclued/linux/msi.h, put this declaration in
> there then include <asm/msi.h>. Possibly some other declarations should be
> moved into linux/msi.h as well.

How about the attached one?
Build tested on ia64 with both CONFIG_PCI_MSI y and n.

This is a minimum set to fix compile warnings and errors.
Maybe better fleshed up by msi developers if necessary.


The patch also fixes other build error below on CONFIG_IA64_GENERIC.

CC arch/ia64/sn/pci/msi.o
/build/rc6/source/arch/ia64/sn/pci/msi.c: At top level:
/build/rc6/source/arch/ia64/sn/pci/msi.c:192: error: variable `sn_msi_ops' has initializer but incomplete type
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: error: unknown field `setup' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: error: unknown field `teardown' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: error: unknown field `target' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:192: error: storage size of `sn_msi_ops' isn't known

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.


Attachments:
drivers-pci-msi-add-linux-msi-h.patch (7.70 kB)

2006-03-15 01:04:03

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.16-rc6-mm1
# Tue Mar 14 17:30:17 2006
#

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32

#
# General setup
#
CONFIG_LOCALVERSION="-buildtest"
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SWAP_PREFETCH=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_SYSCTL=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set
# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
CONFIG_KALLSYMS_EXTRA_PASS=y
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set

#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y

#
# Block layer
#
# CONFIG_BLK_DEV_IO_TRACE is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"

#
# Processor type and features
#
CONFIG_IA64=y
CONFIG_64BIT=y
CONFIG_MMU=y
CONFIG_SWIOTLB=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_INTERPOLATION=y
CONFIG_DMI=y
CONFIG_EFI=y
CONFIG_GENERIC_IOMAP=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
CONFIG_DMA_IS_DMA32=y
CONFIG_IA64_GENERIC=y
# CONFIG_IA64_DIG is not set
# CONFIG_IA64_HP_ZX1 is not set
# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
# CONFIG_IA64_SGI_SN2 is not set
# CONFIG_IA64_HP_SIM is not set
# CONFIG_ITANIUM is not set
CONFIG_MCKINLEY=y
# CONFIG_IA64_PAGE_SIZE_4KB is not set
# CONFIG_IA64_PAGE_SIZE_8KB is not set
CONFIG_IA64_PAGE_SIZE_16KB=y
# CONFIG_IA64_PAGE_SIZE_64KB is not set
CONFIG_PGTABLE_3=y
# CONFIG_PGTABLE_4 is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_IA64_L1_CACHE_SHIFT=7
# CONFIG_IA64_CYCLONE is not set
CONFIG_IOSAPIC=y
# CONFIG_IA64_SGI_SN_XP is not set
CONFIG_FORCE_MAX_ZONEORDER=17
CONFIG_SMP=y
CONFIG_NR_CPUS=64
# CONFIG_HOTPLUG_CPU is not set
# CONFIG_SCHED_SMT is not set
# CONFIG_PREEMPT is not set
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
CONFIG_DISCONTIGMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_DISCONTIGMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MIGRATION=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
CONFIG_NUMA=y
CONFIG_VIRTUAL_MEM_MAP=y
CONFIG_HOLES_IN_ZONE=y
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
# CONFIG_IA32_SUPPORT is not set
CONFIG_IA64_MCA_RECOVERY=y
CONFIG_PERFMON=y
CONFIG_IA64_PALINFO=y
CONFIG_SGI_SN=y

#
# Firmware Drivers
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y

#
# Power management and ACPI
#
CONFIG_PM=y
CONFIG_PM_LEGACY=y
# CONFIG_PM_DEBUG is not set

#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_NUMA=y
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
# CONFIG_ACPI_CONTAINER is not set
# CONFIG_ACPI_SCI_EMULATE is not set

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set

#
# Bus options (PCI, PCMCIA)
#
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_DEBUG is not set

#
# PCI Hotplug Support
#
# CONFIG_HOTPLUG_PCI is not set

#
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_PCCARD is not set

#
# Networking
#
CONFIG_NET=y

#
# Networking options
#
# CONFIG_NETDEBUG is not set
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
CONFIG_NET_KEY=m
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_FWMARK=y
CONFIG_IP_ROUTE_MULTIPATH=y
# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y

#
# IP: Virtual Server Configuration
#
CONFIG_IP_VS=m
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y
# CONFIG_IPV6_ROUTER_PREF is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
CONFIG_INET6_TUNNEL=m
CONFIG_IPV6_TUNNEL=m
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NETFILTER_XTABLES is not set

#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_CT_ACCT=y
# CONFIG_IP_NF_CONNTRACK_MARK is not set
# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
CONFIG_IP_NF_CT_PROTO_SCTP=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_NETBIOS_NS is not set
CONFIG_IP_NF_TFTP=m
CONFIG_IP_NF_AMANDA=m
# CONFIG_IP_NF_PPTP is not set
CONFIG_IP_NF_QUEUE=m

#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
#
# CONFIG_IP6_NF_QUEUE is not set

#
# Bridge: Netfilter Configuration
#
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
# CONFIG_BRIDGE_EBT_ULOG is not set

#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set

#
# SCTP Configuration (EXPERIMENTAL)
#
CONFIG_IP_SCTP=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not set
CONFIG_SCTP_HMAC_MD5=y

#
# TIPC Configuration (EXPERIMENTAL)
#
# CONFIG_TIPC is not set
CONFIG_ATM=m
CONFIG_ATM_CLIP=m
# CONFIG_ATM_CLIP_NO_ICMP is not set
CONFIG_ATM_LANE=m
# CONFIG_ATM_MPOA is not set
CONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not set
CONFIG_BRIDGE=m
CONFIG_VLAN_8021Q=m
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_NET_DIVERT=y
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set

#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CLK_JIFFIES=y
# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
# CONFIG_NET_SCH_CLK_CPU is not set

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_INGRESS=m

#
# Classification
#
CONFIG_NET_CLS=y
# CONFIG_NET_CLS_BASIC is not set
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
# CONFIG_CLS_U32_MARK is not set
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_CLS_ACT is not set
CONFIG_NET_CLS_POLICE=y
CONFIG_NET_CLS_IND=y
CONFIG_NET_ESTIMATOR=y

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set

#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set

#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set

#
# Parallel port support
#
# CONFIG_PARPORT is not set

#
# Plug and Play support
#
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set

#
# Protocols
#
CONFIG_PNPACPI=y

#
# Block devices
#
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=16384
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set

#
# ATA/ATAPI/MFM/RLL support
#
# CONFIG_IDE is not set

#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_TGT=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHR_DEV_OSST=m
CONFIG_BLK_DEV_SR=m
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set

#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SAS_CLASS is not set

#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
CONFIG_SCSI_AIC7XXX=m
CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIC7XXX_DEBUG_ENABLE=y
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_AIC7XXX_OLD is not set
CONFIG_SCSI_AIC79XX=m
CONFIG_AIC79XX_CMDS_PER_DEVICE=4
CONFIG_AIC79XX_RESET_DELAY_MS=15000
# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
# CONFIG_AIC79XX_DEBUG_ENABLE is not set
CONFIG_AIC79XX_DEBUG_MASK=0
# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
# CONFIG_SCSI_ARCMSR is not set
CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_MM=m
CONFIG_MEGARAID_MAILBOX=m
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_FC is not set
CONFIG_SCSI_QLOGIC_1280=m
# CONFIG_SCSI_QLA_FC is not set
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set

#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID5=m
CONFIG_MD_RAID6=m
CONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not set
CONFIG_BLK_DEV_DM=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_EMC=m

#
# Fusion MPT device support
#
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
# CONFIG_FUSION_FC is not set
# CONFIG_FUSION_SAS is not set
CONFIG_FUSION_MAX_SGE=128
# CONFIG_FUSION_CTL is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_IEEE1394 is not set

#
# I2O device support
#
CONFIG_I2O=m
CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_EXT_ADAPTEC_DMA64=y
CONFIG_I2O_CONFIG=m
CONFIG_I2O_CONFIG_OLD_IOCTL=y
# CONFIG_I2O_BUS is not set
CONFIG_I2O_BLOCK=m
CONFIG_I2O_SCSI=m
CONFIG_I2O_PROC=m

#
# Network device support
#
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
CONFIG_BONDING=m
# CONFIG_EQUALIZER is not set
CONFIG_TUN=m
# CONFIG_NET_SB1000 is not set

#
# ARCnet devices
#
# CONFIG_ARCNET is not set

#
# PHY device support
#

#
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set

#
# Ethernet (1000 Mbit)
#
CONFIG_ACENIC=m
# CONFIG_ACENIC_OMIT_TIGON_I is not set
# CONFIG_DL2K is not set
CONFIG_E1000=m
CONFIG_E1000_NAPI=y
# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set
CONFIG_TIGON3=m
# CONFIG_BNX2 is not set

#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set

#
# Token Ring devices
#
# CONFIG_TR is not set

#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set

#
# Wan interfaces
#
# CONFIG_WAN is not set

#
# ATM drivers
#
# CONFIG_ATM_DUMMY is not set
# CONFIG_ATM_TCP is not set
# CONFIG_ATM_LANAI is not set
# CONFIG_ATM_ENI is not set
# CONFIG_ATM_FIRESTREAM is not set
# CONFIG_ATM_ZATM is not set
# CONFIG_ATM_IDT77252 is not set
# CONFIG_ATM_AMBASSADOR is not set
# CONFIG_ATM_HORIZON is not set
# CONFIG_ATM_FORE200E_MAYBE is not set
# CONFIG_ATM_HE is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=m
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
CONFIG_NETPOLL_TRAP=y
CONFIG_NET_POLL_CONTROLLER=y

#
# ISDN subsystem
#
# CONFIG_ISDN is not set

#
# Telephony Support
#
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=m
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_PCIPS2=y
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=y
# CONFIG_GAMEPORT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_COMPUTONE is not set
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_INTELLIO is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_ISI is not set
CONFIG_SYNCLINKMP=m
# CONFIG_SYNCLINK_GT is not set
CONFIG_N_HDLC=m
# CONFIG_SPECIALIX is not set
# CONFIG_SX is not set
CONFIG_STALDRV=y
# CONFIG_SGI_SNSC is not set
# CONFIG_SGI_TIOCX is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_SGI_L1_CONSOLE is not set
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_SGI_IOC4 is not set
# CONFIG_SERIAL_SGI_IOC3 is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set

#
# IPMI
#
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m

#
# Watchdog Cards
#
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_I8XX_TCO=m

#
# PCI-based Watchdog Cards
#
CONFIG_PCIPCWATCHDOG=m
CONFIG_WDTPCI=m
CONFIG_WDT_501_PCI=y
CONFIG_HW_RANDOM=m
# CONFIG_EFI_RTC is not set
CONFIG_DTLK=m
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set

#
# Ftape, the floppy tape device driver
#
CONFIG_AGP=y
# CONFIG_AGP_I460 is not set
# CONFIG_AGP_HP_ZX1 is not set
# CONFIG_AGP_SGI_TIOCA is not set
CONFIG_DRM=y
# CONFIG_DRM_TDFX is not set
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_MGA=m
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
CONFIG_RAW_DRIVER=y
CONFIG_MAX_RAW_DEVS=8192
# CONFIG_HPET is not set
CONFIG_HANGCHECK_TIMER=m
CONFIG_MMTIMER=y

#
# TPM devices
#
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set

#
# I2C support
#
CONFIG_I2C=m
CONFIG_I2C_CHARDEV=m

#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=m
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#
CONFIG_I2C_ALI1535=m
CONFIG_I2C_ALI1563=m
CONFIG_I2C_ALI15X3=m
CONFIG_I2C_AMD756=m
# CONFIG_I2C_AMD756_S4882 is not set
CONFIG_I2C_AMD8111=m
CONFIG_I2C_I801=m
CONFIG_I2C_I810=m
CONFIG_I2C_PIIX4=m
CONFIG_I2C_ISA=m
CONFIG_I2C_NFORCE2=m
# CONFIG_I2C_PARPORT_LIGHT is not set
CONFIG_I2C_PROSAVAGE=m
CONFIG_I2C_SAVAGE4=m
CONFIG_I2C_SIS5595=m
CONFIG_I2C_SIS630=m
CONFIG_I2C_SIS96X=m
# CONFIG_I2C_STUB is not set
CONFIG_I2C_VIA=m
CONFIG_I2C_VIAPRO=m
CONFIG_I2C_VOODOO3=m
# CONFIG_I2C_PCA_ISA is not set

#
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
CONFIG_SENSORS_EEPROM=m
CONFIG_SENSORS_PCF8574=m
# CONFIG_SENSORS_PCA9539 is not set
CONFIG_SENSORS_PCF8591=m
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set

#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set

#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set

#
# Hardware Monitoring support
#
CONFIG_HWMON=y
CONFIG_HWMON_VID=m
CONFIG_SENSORS_ADM1021=m
CONFIG_SENSORS_ADM1025=m
# CONFIG_SENSORS_ADM1026 is not set
CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM9240 is not set
CONFIG_SENSORS_ASB100=m
# CONFIG_SENSORS_ATXP1 is not set
CONFIG_SENSORS_DS1621=m
# CONFIG_SENSORS_F71805F is not set
CONFIG_SENSORS_FSCHER=m
# CONFIG_SENSORS_FSCPOS is not set
CONFIG_SENSORS_GL518SM=m
# CONFIG_SENSORS_GL520SM is not set
CONFIG_SENSORS_IT87=m
# CONFIG_SENSORS_LM63 is not set
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
CONFIG_SENSORS_LM80=m
CONFIG_SENSORS_LM83=m
CONFIG_SENSORS_LM85=m
# CONFIG_SENSORS_LM87 is not set
CONFIG_SENSORS_LM90=m
# CONFIG_SENSORS_LM92 is not set
CONFIG_SENSORS_MAX1619=m
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SIS5595 is not set
CONFIG_SENSORS_SMSC47M1=m
# CONFIG_SENSORS_SMSC47B397 is not set
CONFIG_SENSORS_VIA686A=m
# CONFIG_SENSORS_VT8231 is not set
CONFIG_SENSORS_W83781D=m
# CONFIG_SENSORS_W83792D is not set
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83627HF=m
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Misc devices
#

#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set

#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set

#
# Graphics support
#
# CONFIG_FB is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
CONFIG_DUMMY_CONSOLE=y

#
# Sound
#
# CONFIG_SOUND is not set

#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
# CONFIG_USB is not set

#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#

#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set

#
# MMC/SD Card support
#
# CONFIG_MMC is not set

#
# LED devices
#
# CONFIG_NEW_LEDS is not set

#
# InfiniBand support
#
# CONFIG_INFINIBAND is not set

#
# SN Devices
#
CONFIG_SGI_IOC4=m
CONFIG_SGI_IOC3=m

#
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
#

#
# Distributed Lock Manager
#
# CONFIG_DLM is not set

#
# Real Time Clock
#
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y

#
# RTC drivers
#
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_TEST is not set

#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISER4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_QUOTA=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_ZISOFS_FS=y
CONFIG_UDF_FS=m
CONFIG_UDF_NLS=y

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set

#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
CONFIG_CRAMFS=m
CONFIG_VXFS_FS=m
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set

#
# Network File Systems
#
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
CONFIG_NFS_DIRECTIO=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
CONFIG_RPCSEC_GSS_SPKM3=m
CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
CONFIG_OSF_PARTITION=y
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
# CONFIG_LDM_PARTITION is not set
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
CONFIG_SUN_PARTITION=y
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y

#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m

#
# Library routines
#
CONFIG_CRC_CCITT=m
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y

#
# HP Simulator drivers
#
# CONFIG_HP_SIMETH is not set
# CONFIG_HP_SIMSERIAL is not set
# CONFIG_HP_SIMSCSI is not set

#
# Instrumentation Support
#
CONFIG_PROFILING=y
CONFIG_OPROFILE=m
CONFIG_KPROBES=y

#
# Kernel hacking
#
CONFIG_PRINTK_TIME=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SLAB_LEAK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_VM is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_SYNCHRO_TEST is not set
CONFIG_IA64_GRANULE_16MB=y
# CONFIG_IA64_GRANULE_64MB is not set
# CONFIG_IA64_PRINT_HAZARDS is not set
# CONFIG_DISABLE_VHPT is not set
# CONFIG_IA64_DEBUG_CMPXCHG is not set
# CONFIG_IA64_DEBUG_IRQ is not set

#
# Security options
#
# CONFIG_KEYS is not set
CONFIG_SECURITY=y
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
CONFIG_SECURITY_CAPABILITIES=y
# CONFIG_SECURITY_SECLVL is not set
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1

#
# Cryptographic options
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_SERPENT=m
# CONFIG_CRYPTO_AES is not set
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_TEST is not set

#
# Hardware crypto devices
#


Attachments:
config-ia64 (26.41 kB)

2006-03-15 23:55:57

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Tue, Mar 14, 2006 at 07:51:14PM -0500, Jun'ichi Nomura wrote:
> Hi Andrew,
>
> Andrew Morton wrote:
> >One option might be to create inclued/linux/msi.h, put this declaration in
> >there then include <asm/msi.h>. Possibly some other declarations should be
> >moved into linux/msi.h as well.
>
> How about the attached one?
> Build tested on ia64 with both CONFIG_PCI_MSI y and n.

No, we don't need a linux/msi.h, these are core pci things that no one
else should care about. The other arches handle this just fine, let's
not mess everything up just because ia64 can't get it right :)

thanks,

greg k-h

2006-03-16 15:18:13

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Greg KH wrote:
> No, we don't need a linux/msi.h, these are core pci things that no one
> else should care about. The other arches handle this just fine, let's
> not mess everything up just because ia64 can't get it right :)

Hmm, it sounds asm/msi.h shouldn't be included from common headers. :<
I think the attached patch might be better. How about this?

Default msi_arch_init() looks sufficient for most ia64 platforms
except for SGI SN2, which seems to need its special version.
gregkh-pci-msi-vector-targeting-abstractions.patch used machvec
to switch the functions between platforms.
For that, it included asm/msi.h from asm/machvec.h and
caused the warnings flood.
The attached patch separates machvec function and the original
inline function. So that we don't need to include asm/msi.h from
common headers.


There is another problem that CONFIG_IA64_GENERIC still doesn't
build due to error in SGI SN specific code.
It needs additional fix.

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.


Attachments:
ia64-machvec-based-msi-init.patch (1.26 kB)

2006-03-16 15:28:00

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Jun'ichi Nomura wrote:
> There is another problem that CONFIG_IA64_GENERIC still doesn't
> build due to error in SGI SN specific code.

The error is as followings.

CC arch/ia64/sn/pci/msi.o
/build/rc6/source/arch/ia64/sn/pci/msi.c: At top level:
/build/rc6/source/arch/ia64/sn/pci/msi.c:192: error: variable `sn_msi_ops' has initializer but incomplete type
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: error: unknown field `setup' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:193: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: error: unknown field `teardown' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:194: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: error: unknown field `target' specified in initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: warning: excess elements in struct initializer
/build/rc6/source/arch/ia64/sn/pci/msi.c:196: warning: (near initialization for `sn_msi_ops')
/build/rc6/source/arch/ia64/sn/pci/msi.c:192: error: storage size of `sn_msi_ops' isn't known

The code seems to define its own msi_ops but never include a
definition of struct msi_ops.

I think this is a sign that some part of arch/ia64/sn/pci/msi.c
should move to something like drivers/pci/msi-sgi-sn.c.
I leave it to SGI developers, who should have a good insight on
what the proper fix is. Mark?

If such fix doesn't come up soon, the attached patch can be
a band-aid.

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.


Attachments:
ia64-sn-msi-build-band-aid.patch (584.00 B)

2006-03-16 18:19:46

by Mark Maule

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 10:19:44AM -0500, Jun'ichi Nomura wrote:
> Greg KH wrote:
> >No, we don't need a linux/msi.h, these are core pci things that no one
> >else should care about. The other arches handle this just fine, let's
> >not mess everything up just because ia64 can't get it right :)
>
> Hmm, it sounds asm/msi.h shouldn't be included from common headers. :<
> I think the attached patch might be better. How about this?
>
> Default msi_arch_init() looks sufficient for most ia64 platforms
> except for SGI SN2, which seems to need its special version.
> gregkh-pci-msi-vector-targeting-abstractions.patch used machvec
> to switch the functions between platforms.
> For that, it included asm/msi.h from asm/machvec.h and
> caused the warnings flood.
> The attached patch separates machvec function and the original
> inline function. So that we don't need to include asm/msi.h from
> common headers.
>
>
> There is another problem that CONFIG_IA64_GENERIC still doesn't
> build due to error in SGI SN specific code.
> It needs additional fix.
>
> Thanks,
> --
> Jun'ichi Nomura, NEC Solutions (America), Inc.

Ok, looking back at some of my original patches, it seems like the
declaration of msi_ops got moved from pci.h to and some forward declarations
in ia64/msi.h were removed. This patch corrects the build problems.

The reason for putting struct msi_ops in pci.h is so that msi code that
resides outside of drivers/pci can use the declaration without having to
reach down into drivers/pci.

If there's objectins to having struct msi_ops declared in pci.h, then I guess
we need to come up with another solution.

The following patch should correct the build problems on ia64. I have not
yet checked other platforms.


Index: linux-2.6.16-rc6/include/asm-ia64/msi.h
===================================================================
--- linux-2.6.16-rc6.orig/include/asm-ia64/msi.h 2006-03-16 10:20:09.000000000 -0600
+++ linux-2.6.16-rc6/include/asm-ia64/msi.h 2006-03-16 12:18:23.615928436 -0600
@@ -16,6 +16,10 @@

extern struct msi_ops msi_apic_ops;

+/* Ugly defs to avoid having to include pci.h in machvec.h */
+struct msi_ops;
+extern int msi_register(struct msi_ops *);
+
/* default ia64 msi init routine */
static inline int ia64_msi_init(void)
{
Index: linux-2.6.16-rc6/drivers/pci/msi.h
===================================================================
--- linux-2.6.16-rc6.orig/drivers/pci/msi.h 2006-03-16 10:20:07.000000000 -0600
+++ linux-2.6.16-rc6/drivers/pci/msi.h 2006-03-16 12:02:33.276296521 -0600
@@ -83,61 +83,4 @@
struct pci_dev *dev;
};

-/*
- * MSI operation vector. Used by the msi core code (drivers/pci/msi.c)
- * to abstract platform-specific tasks relating to MSI address generation
- * and resource management.
- */
-struct msi_ops {
- /**
- * setup - generate an MSI bus address and data for a given vector
- * @pdev: PCI device context (in)
- * @vector: vector allocated by the msi core (in)
- * @addr_hi: upper 32 bits of PCI bus MSI address (out)
- * @addr_lo: lower 32 bits of PCI bus MSI address (out)
- * @data: MSI data payload (out)
- *
- * Description: The setup op is used to generate a PCI bus addres and
- * data which the msi core will program into the card MSI capability
- * registers. The setup routine is responsible for picking an initial
- * cpu to target the MSI at. The setup routine is responsible for
- * examining pdev to determine the MSI capabilities of the card and
- * generating a suitable address/data. The setup routine is
- * responsible for allocating and tracking any system resources it
- * needs to route the MSI to the cpu it picks, and for associating
- * those resources with the passed in vector.
- *
- * Returns 0 if the MSI address/data was successfully setup.
- */
- int (*setup) (struct pci_dev *pdev, unsigned int vector,
- u32 *addr_hi, u32 *addr_lo, u32 *data);
-
- /**
- * teardown - release resources allocated by setup
- * @vector: vector context for resources (in)
- *
- * Description: The teardown op is used to release any resources
- * that were allocated in the setup routine associated with the passed
- * in vector.
- */
- void (*teardown) (unsigned int vector);
-
- /**
- * target - retarget an MSI at a different cpu
- * @vector: vector context for resources (in)
- * @cpu: new cpu to direct vector at (in)
- * @addr_hi: new value of PCI bus upper 32 bits (in/out)
- * @addr_lo: new value of PCI bus lower 32 bits (in/out)
- *
- * Description: The target op is used to redirect an MSI vector
- * at a different cpu. addr_hi/addr_lo coming in are the existing
- * values that the MSI core has programmed into the card. The
- * target code is responsible for freeing any resources (if any)
- * associated with the old address, and generating a new PCI bus
- * addr_hi/addr_lo that will redirect the vector at the indicated cpu.
- */
- void (*target) (unsigned int vector, unsigned int cpu,
- u32 *addr_hi, u32 *addr_lo);
-};
-
#endif /* MSI_H */
Index: linux-2.6.16-rc6/include/linux/pci.h
===================================================================
--- linux-2.6.16-rc6.orig/include/linux/pci.h 2006-03-16 10:20:10.000000000 -0600
+++ linux-2.6.16-rc6/include/linux/pci.h 2006-03-16 12:03:20.646663409 -0600
@@ -583,6 +583,63 @@
u16 entry; /* driver uses to specify entry, OS writes */
};

+/*
+ * MSI operation vector. Used by the msi core code (drivers/pci/msi.c)
+ * to abstract platform-specific tasks relating to MSI address generation
+ * and resource management.
+ */
+struct msi_ops {
+ /**
+ * setup - generate an MSI bus address and data for a given vector
+ * @pdev: PCI device context (in)
+ * @vector: vector allocated by the msi core (in)
+ * @addr_hi: upper 32 bits of PCI bus MSI address (out)
+ * @addr_lo: lower 32 bits of PCI bus MSI address (out)
+ * @data: MSI data payload (out)
+ *
+ * Description: The setup op is used to generate a PCI bus addres and
+ * data which the msi core will program into the card MSI capability
+ * registers. The setup routine is responsible for picking an initial
+ * cpu to target the MSI at. The setup routine is responsible for
+ * examining pdev to determine the MSI capabilities of the card and
+ * generating a suitable address/data. The setup routine is
+ * responsible for allocating and tracking any system resources it
+ * needs to route the MSI to the cpu it picks, and for associating
+ * those resources with the passed in vector.
+ *
+ * Returns 0 if the MSI address/data was successfully setup.
+ */
+ int (*setup) (struct pci_dev *pdev, unsigned int vector,
+ u32 *addr_hi, u32 *addr_lo, u32 *data);
+
+ /**
+ * teardown - release resources allocated by setup
+ * @vector: vector context for resources (in)
+ *
+ * Description: The teardown op is used to release any resources
+ * that were allocated in the setup routine associated with the passed
+ * in vector.
+ */
+ void (*teardown) (unsigned int vector);
+
+ /**
+ * target - retarget an MSI at a different cpu
+ * @vector: vector context for resources (in)
+ * @cpu: new cpu to direct vector at (in)
+ * @addr_hi: new value of PCI bus upper 32 bits (in/out)
+ * @addr_lo: new value of PCI bus lower 32 bits (in/out)
+ *
+ * Description: The target op is used to redirect an MSI vector
+ * at a different cpu. addr_hi/addr_lo coming in are the existing
+ * values that the MSI core has programmed into the card. The
+ * target code is responsible for freeing any resources (if any)
+ * associated with the old address, and generating a new PCI bus
+ * addr_hi/addr_lo that will redirect the vector at the indicated cpu.
+ */
+ void (*target) (unsigned int vector, unsigned int cpu,
+ u32 *addr_hi, u32 *addr_lo);
+};
+
#ifndef CONFIG_PCI_MSI
static inline void pci_scan_msi_device(struct pci_dev *dev) {}
static inline int pci_enable_msi(struct pci_dev *dev) {return -1;}

2006-03-16 19:32:28

by Junichi Nomura

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Hi Mark,

Thanks for the reply.

Mark Maule wrote:
>>There is another problem that CONFIG_IA64_GENERIC still doesn't
>>build due to error in SGI SN specific code.
>>It needs additional fix.
>
> Ok, looking back at some of my original patches, it seems like the
> declaration of msi_ops got moved from pci.h to and some forward declarations
> in ia64/msi.h were removed. This patch corrects the build problems.

But,

Greg said:
> these are core pci things that no one else should care about.

Andrew said:
> a declaration for msi_register(), in drivers/pci/pci.h.
> We don't want to add a duplicated declaration like this.

I think the idea already gets objections.

> The reason for putting struct msi_ops in pci.h is so that msi code that
> resides outside of drivers/pci can use the declaration without having to
> reach down into drivers/pci.

The code in arch/ia64/sn/pci/msi.c looks much like
drivers/pci/msi-apic.c.
Why don't you move them to drivers/pci/msi-sgi-sn.c or something?

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.

2006-03-16 19:42:11

by Mark Maule

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 02:32:52PM -0500, Jun'ichi Nomura wrote:
> Hi Mark,
>
> Thanks for the reply.
>
> Mark Maule wrote:
> >>There is another problem that CONFIG_IA64_GENERIC still doesn't
> >>build due to error in SGI SN specific code.
> >>It needs additional fix.
> >
> >Ok, looking back at some of my original patches, it seems like the
> >declaration of msi_ops got moved from pci.h to and some forward
> >declarations
> >in ia64/msi.h were removed. This patch corrects the build problems.
>
> But,
>
> Greg said:
> >these are core pci things that no one else should care about.
>
> Andrew said:
> >a declaration for msi_register(), in drivers/pci/pci.h.
> > We don't want to add a duplicated declaration like this.
>
> I think the idea already gets objections.
>
> >The reason for putting struct msi_ops in pci.h is so that msi code that
> >resides outside of drivers/pci can use the declaration without having to
> >reach down into drivers/pci.
>
> The code in arch/ia64/sn/pci/msi.c looks much like
> drivers/pci/msi-apic.c.
> Why don't you move them to drivers/pci/msi-sgi-sn.c or something?

I didn't do that originally 'cause I didn't think drivers/pci was the place
for platform-specific code.

That said, I am not against moving sn/pci/msi.c into drivers if that is
more acceptable than putting msi_ops into pci.h.

Greg/Andrew?

Mark

2006-03-16 23:29:00

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 01:41:55PM -0600, Mark Maule wrote:
> On Thu, Mar 16, 2006 at 02:32:52PM -0500, Jun'ichi Nomura wrote:
> > Hi Mark,
> >
> > Thanks for the reply.
> >
> > Mark Maule wrote:
> > >>There is another problem that CONFIG_IA64_GENERIC still doesn't
> > >>build due to error in SGI SN specific code.
> > >>It needs additional fix.
> > >
> > >Ok, looking back at some of my original patches, it seems like the
> > >declaration of msi_ops got moved from pci.h to and some forward
> > >declarations
> > >in ia64/msi.h were removed. This patch corrects the build problems.
> >
> > But,
> >
> > Greg said:
> > >these are core pci things that no one else should care about.
> >
> > Andrew said:
> > >a declaration for msi_register(), in drivers/pci/pci.h.
> > > We don't want to add a duplicated declaration like this.
> >
> > I think the idea already gets objections.
> >
> > >The reason for putting struct msi_ops in pci.h is so that msi code that
> > >resides outside of drivers/pci can use the declaration without having to
> > >reach down into drivers/pci.
> >
> > The code in arch/ia64/sn/pci/msi.c looks much like
> > drivers/pci/msi-apic.c.
> > Why don't you move them to drivers/pci/msi-sgi-sn.c or something?
>
> I didn't do that originally 'cause I didn't think drivers/pci was the place
> for platform-specific code.
>
> That said, I am not against moving sn/pci/msi.c into drivers if that is
> more acceptable than putting msi_ops into pci.h.

As msi.c today is pretty platform-specific as is, I don't have a problem
with moving the ia64 stuff also into that directory. Especially as it
will help solve issues like this a lot better.

thanks,

greg k-h

2006-03-16 23:37:28

by Roland Dreier

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

Greg> As msi.c today is pretty platform-specific as is, I don't
Greg> have a problem with moving the ia64 stuff also into that
Greg> directory. Especially as it will help solve issues like
Greg> this a lot better.

I think we really want to make drivers/pci/msi.c less
platform-specific. Both powerpc and sparc64 are starting to pay
attention to MSI, so we should really be trying to move things in the
direction of a clean separation of generic MSI handling and
Intel-specific bits.

- R.

2006-03-16 23:41:09

by Grant Grundler

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 12:19:34PM -0600, Mark Maule wrote:
> If there's objectins to having struct msi_ops declared in pci.h, then I guess
> we need to come up with another solution.

There are other transaction based interrupt subsystems that are typically
arch specific (e.g. GSC device interrupts on PA-RISC). So far, MSI is the
only generic one and that is clearly part of the PCI spec.

grant

2006-03-16 23:45:10

by Grant Grundler

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 03:37:22PM -0800, Roland Dreier wrote:
> I think we really want to make drivers/pci/msi.c less platform-specific.
> Both powerpc and sparc64 are starting to pay attention to MSI, so we
> should really be trying to move things in the direction of a clean
> separation of generic MSI handling and Intel-specific bits.

Matthew Wilcox and I have previously volunteered to get MSI working
on parisc arch. parisc, like systems with Local SAPIC, only
operates on transaction based interrupts at the CPU level.

We need an arch hook to set the target address of the CPU
instead of looking at ID/EID bits but haven't proposed
anything concrete yet. My understanding is SGI needs the
same thing for Altix/SN2 platforms.

thanks,
grant

2006-03-16 23:47:26

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 03:37:22PM -0800, Roland Dreier wrote:
> Greg> As msi.c today is pretty platform-specific as is, I don't
> Greg> have a problem with moving the ia64 stuff also into that
> Greg> directory. Especially as it will help solve issues like
> Greg> this a lot better.
>
> I think we really want to make drivers/pci/msi.c less
> platform-specific. Both powerpc and sparc64 are starting to pay
> attention to MSI, so we should really be trying to move things in the
> direction of a clean separation of generic MSI handling and
> Intel-specific bits.

Oh I completely agree. It's just that the efforts so far to do this has
caused a big #include mess that we are currently in. And I don't think
that putting pci core structures in the include/linux/ directory is the
correct solution. If others can come up with cleaner splits of the
code, I incourage it.

thanks,

greg k-h

2006-03-16 23:49:42

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 03:41:18PM -0800, Grant Grundler wrote:
> On Thu, Mar 16, 2006 at 12:19:34PM -0600, Mark Maule wrote:
> > If there's objectins to having struct msi_ops declared in pci.h, then I guess
> > we need to come up with another solution.
>
> There are other transaction based interrupt subsystems that are typically
> arch specific (e.g. GSC device interrupts on PA-RISC). So far, MSI is the
> only generic one and that is clearly part of the PCI spec.

Yes, that's fine. But the core pci msi structures do not need to be
exported for the whole kernel to see, right? That's my only point here.

pci.h is cluttered enough as it is :)

thanks,

greg k-h

2006-03-17 00:40:57

by Grant Grundler

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 03:49:06PM -0800, Greg KH wrote:
> > There are other transaction based interrupt subsystems that are typically
> > arch specific (e.g. GSC device interrupts on PA-RISC). So far, MSI is the
> > only generic one and that is clearly part of the PCI spec.
>
> Yes, that's fine. But the core pci msi structures do not need to be
> exported for the whole kernel to see, right? That's my only point here.

Yes, got it. I agree.

grant

2006-03-17 01:18:46

by Mark Maule

[permalink] [raw]
Subject: Re: [PATCH] (-mm) drivers/pci/msi: explicit declaration of msi_register

On Thu, Mar 16, 2006 at 04:41:08PM -0800, Grant Grundler wrote:
> On Thu, Mar 16, 2006 at 03:49:06PM -0800, Greg KH wrote:
> > > There are other transaction based interrupt subsystems that are typically
> > > arch specific (e.g. GSC device interrupts on PA-RISC). So far, MSI is the
> > > only generic one and that is clearly part of the PCI spec.
> >
> > Yes, that's fine. But the core pci msi structures do not need to be
> > exported for the whole kernel to see, right? That's my only point here.
>
> Yes, got it. I agree.
>

Ok, I'll move the SN stuff down into pci/drivers. I think that's ok, and
still allow the separation we want. Basicly there's [almost] generic
msi core code (msi.c) and platform dependent interrupt controllers
(msi-apic.c and soon msi-altix.c).

Mark