* [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c @ 2002-10-14 20:27 David Mansfield 2002-10-14 20:54 ` Arjan van de Ven 0 siblings, 1 reply; 4+ messages in thread From: David Mansfield @ 2002-10-14 20:27 UTC (permalink / raw) To: linux-kernel Trying to compile 2.5.42 I encountered the following error, which looks a lot like a GCC bug. I did a 'make mrproper; make oldconfig; make bzImage' and it still failed. The system is a mostly updated 7.3 system, running 2.5.41. make -f drivers/md/Makefile gcc -Wp,-MD,drivers/md/.raid0.o.d -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -Iarch/i386/mach-generic -nostdinc -iwithprefix include -DKBUILD_BASENAME=raid0 -c -o drivers/md/raid0.o drivers/md/raid0.c drivers/md/raid0.c: In function `raid0_make_request': drivers/md/raid0.c:353: Unrecognizable insn: (insn 51 497 491 (parallel[ (set (reg:SI 0 eax) (asm_operands ("") ("=a") 0[ (reg:DI 1 edx) ] [ (asm_input:DI ("A")) ] ("drivers/md/raid0.c") 290)) (set (reg:SI 1 edx) (asm_operands ("") ("=d") 1[ (reg:DI 1 edx) ] [ (asm_input:DI ("A")) ] ("drivers/md/raid0.c") 290)) (clobber (reg:QI 19 dirflag)) (clobber (reg:QI 18 fpsr)) (clobber (reg:QI 17 flags)) ] ) -1 (insn_list 42 (nil)) (nil)) drivers/md/raid0.c:353: confused by earlier errors, bailing out make[2]: *** [drivers/md/raid0.o] Error 1 make[1]: *** [drivers/md] Error 2 make: *** [drivers] Error 2 I needed the following really stupid patch to compile: --- raid0.c.orig Sat Sep 14 09:20:30 2002 +++ raid0.c Sat Sep 14 11:31:22 2002 @@ -283,10 +283,11 @@ chunk_size = mddev->chunk_size >> 10; chunksize_bits = ffz(~chunk_size); block = bio->bi_sector >> 1; { - sector_t x = block; + volatile sector_t y = 0; + sector_t x = block - y; sector_div(x, (unsigned long)conf->smallest->size); hash = conf->hash_table + x; } My Gcc version is: gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-112) My config is: CONFIG_X86=y CONFIG_UID16=y CONFIG_GENERIC_ISA_DMA=y CONFIG_EXPERIMENTAL=y CONFIG_NET=y CONFIG_SYSVIPC=y CONFIG_SYSCTL=y CONFIG_MODULES=y CONFIG_KMOD=y CONFIG_M686=y CONFIG_X86_WP_WORKS_OK=y CONFIG_X86_INVLPG=y CONFIG_X86_CMPXCHG=y CONFIG_X86_XADD=y CONFIG_X86_BSWAP=y CONFIG_X86_POPAD_OK=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_X86_L1_CACHE_SHIFT=5 CONFIG_X86_TSC=y CONFIG_X86_GOOD_APIC=y CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_PPRO_FENCE=y CONFIG_SMP=y CONFIG_PREEMPT=y CONFIG_NR_CPUS=2 CONFIG_X86_MCE=y CONFIG_X86_MCE_NONFATAL=y CONFIG_X86_MCE_P4THERMAL=y CONFIG_MICROCODE=y CONFIG_X86_MSR=y CONFIG_X86_CPUID=y CONFIG_HIGHMEM4G=y CONFIG_HIGHMEM=y CONFIG_MTRR=y CONFIG_HAVE_DEC_LOCK=y CONFIG_ACPI=y CONFIG_ACPI_BOOT=y CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y CONFIG_ACPI_FAN=y CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_THERMAL=y CONFIG_ACPI_BOOT=y CONFIG_ACPI_BUS=y CONFIG_ACPI_INTERPRETER=y CONFIG_ACPI_EC=y CONFIG_ACPI_POWER=y CONFIG_ACPI_PCI=y CONFIG_ACPI_SYSTEM=y CONFIG_PM=y CONFIG_X86_IO_APIC=y CONFIG_X86_LOCAL_APIC=y CONFIG_PCI=y CONFIG_PCI_GOANY=y CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y CONFIG_PCI_NAMES=y CONFIG_ISA=y CONFIG_KCORE_ELF=y CONFIG_BINFMT_ELF=y CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_PC_CML1=m CONFIG_PARPORT_PC_FIFO=y CONFIG_PARPORT_PC_SUPERIO=y CONFIG_PARPORT_1284=y CONFIG_PNP=m CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_NBD=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y CONFIG_IDE=y CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDEDISK=y CONFIG_IDEDISK_MULTI_MODE=y CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDESCSI=m CONFIG_IDE_TASK_IOCTL=y CONFIG_BLK_DEV_IDEPCI=y CONFIG_BLK_DEV_GENERIC=y CONFIG_IDEPCI_SHARE_IRQ=y CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_IDEDMA_PCI_AUTO=y CONFIG_BLK_DEV_IDEDMA=y CONFIG_IDEDMA_PCI_WIP=y CONFIG_BLK_DEV_ADMA=y CONFIG_BLK_DEV_PIIX=y CONFIG_IDEDMA_AUTO=y CONFIG_BLK_DEV_IDE_MODES=y CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y CONFIG_SD_EXTRA_DEVS=40 CONFIG_CHR_DEV_ST=m CONFIG_BLK_DEV_SR=m CONFIG_BLK_DEV_SR_VENDOR=y CONFIG_SR_EXTRA_DEVS=2 CONFIG_CHR_DEV_SG=m CONFIG_SCSI_REPORT_LUNS=y CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_AIC7XXX=y CONFIG_AIC7XXX_CMDS_PER_DEVICE=253 CONFIG_AIC7XXX_RESET_DELAY_MS=15000 CONFIG_MD=y CONFIG_BLK_DEV_MD=y CONFIG_MD_LINEAR=y CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID5=y CONFIG_PACKET=y CONFIG_PACKET_MMAP=y CONFIG_NETFILTER=y CONFIG_FILTER=y CONFIG_UNIX=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_INET_ECN=y CONFIG_SYN_COOKIES=y CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_FTP=m CONFIG_IP_NF_IRC=m CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m CONFIG_IP_NF_MATCH_MAC=m CONFIG_IP_NF_MATCH_PKTTYPE=m CONFIG_IP_NF_MATCH_MARK=m CONFIG_IP_NF_MATCH_MULTIPORT=m CONFIG_IP_NF_MATCH_TOS=m CONFIG_IP_NF_MATCH_ECN=m CONFIG_IP_NF_MATCH_DSCP=m CONFIG_IP_NF_MATCH_AH_ESP=m CONFIG_IP_NF_MATCH_LENGTH=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_HELPER=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_CONNTRACK=m CONFIG_IP_NF_MATCH_UNCLEAN=m CONFIG_IP_NF_MATCH_OWNER=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m CONFIG_IP_NF_TARGET_MIRROR=m CONFIG_IP_NF_MANGLE=m CONFIG_IP_NF_TARGET_TOS=m CONFIG_IP_NF_TARGET_ECN=m CONFIG_IP_NF_TARGET_DSCP=m CONFIG_IP_NF_TARGET_MARK=m CONFIG_IP_NF_TARGET_LOG=m CONFIG_IP_NF_TARGET_ULOG=m CONFIG_IP_NF_TARGET_TCPMSS=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m CONFIG_IPV6_SCTP__=y CONFIG_NETDEVICES=y CONFIG_DUMMY=m CONFIG_TUN=y CONFIG_NET_ETHERNET=y CONFIG_NET_VENDOR_3COM=y CONFIG_VORTEX=y CONFIG_NET_PCI=y CONFIG_E100=y CONFIG_PPP=m CONFIG_PPP_MULTILINK=y CONFIG_PPP_FILTER=y CONFIG_PPP_ASYNC=m CONFIG_PPP_DEFLATE=m CONFIG_PPP_BSDCOMP=m CONFIG_PPPOE=m CONFIG_INPUT=y CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_SOUND_GAMEPORT=y CONFIG_SERIO=y CONFIG_SERIO_I8042=y CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y CONFIG_INPUT_MISC=y CONFIG_INPUT_PCSPKR=y CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 CONFIG_PRINTER=m CONFIG_PPDEV=m CONFIG_RTC=y CONFIG_RAW_DRIVER=y CONFIG_REISERFS_FS=y CONFIG_EXT3_FS=y CONFIG_JBD=y CONFIG_FAT_FS=m CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=m CONFIG_TMPFS=y CONFIG_RAMFS=y CONFIG_ISO9660_FS=y CONFIG_JOLIET=y CONFIG_JFS_FS=y CONFIG_MINIX_FS=y CONFIG_NTFS_FS=m CONFIG_NTFS_RW=y CONFIG_PROC_FS=y CONFIG_DEVPTS_FS=y CONFIG_EXT2_FS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y CONFIG_NFSD=y CONFIG_NFSD_V3=y CONFIG_NFSD_TCP=y CONFIG_SUNRPC=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=y CONFIG_SMB_FS=m CONFIG_MSDOS_PARTITION=y CONFIG_SMB_NLS=y CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=m CONFIG_NLS_ISO8859_1=m CONFIG_VGA_CONSOLE=y CONFIG_DEBUG_KERNEL=y CONFIG_MAGIC_SYSRQ=y CONFIG_KALLSYMS=y CONFIG_X86_EXTRA_IRQS=y CONFIG_X86_FIND_SMP_CONFIG=y CONFIG_X86_MPPARSE=y CONFIG_SECURITY_CAPABILITIES=y CONFIG_CRC32=y CONFIG_ZLIB_INFLATE=m CONFIG_ZLIB_DEFLATE=m CONFIG_X86_SMP=y CONFIG_X86_HT=y CONFIG_X86_BIOS_REBOOT=y -- /==============================\ | David Mansfield | | lkml@dm.cobite.com | \==============================/ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c 2002-10-14 20:27 [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c David Mansfield @ 2002-10-14 20:54 ` Arjan van de Ven 2002-10-14 21:11 ` Arjan van de Ven 0 siblings, 1 reply; 4+ messages in thread From: Arjan van de Ven @ 2002-10-14 20:54 UTC (permalink / raw) To: David Mansfield; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 444 bytes --] On Mon, 2002-10-14 at 22:27, David Mansfield wrote: > > - sector_t x = block; > + volatile sector_t y = 0; > + sector_t x = block - y; > sector_div(x, (unsigned long)conf->smallest->size); > hash = conf->hash_table + x; > } this appears to be a bad code bug; do_div() requires the first argument to be an u64 and we cast it to unsigned long here.... [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c 2002-10-14 20:54 ` Arjan van de Ven @ 2002-10-14 21:11 ` Arjan van de Ven 0 siblings, 0 replies; 4+ messages in thread From: Arjan van de Ven @ 2002-10-14 21:11 UTC (permalink / raw) To: Arjan van de Ven; +Cc: David Mansfield, linux-kernel [-- Attachment #1: Type: text/plain, Size: 543 bytes --] On Mon, 2002-10-14 at 22:54, Arjan van de Ven wrote: > On Mon, 2002-10-14 at 22:27, David Mansfield wrote: > > > > - sector_t x = block; > > + volatile sector_t y = 0; > > + sector_t x = block - y; > > sector_div(x, (unsigned long)conf->smallest->size); > > hash = conf->hash_table + x; > > } > this appears to be a bad code bug; do_div() requires the first argument > to be an u64 and we cast it to unsigned long here.... ehm ignore me I'm blind [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <540557597@toto.iv>]
* [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c [not found] <540557597@toto.iv> @ 2002-10-15 0:18 ` Peter Chubb 0 siblings, 0 replies; 4+ messages in thread From: Peter Chubb @ 2002-10-15 0:18 UTC (permalink / raw) To: David Mansfield, akpm, torvalds; +Cc: linux-kernel >>>>> "David" == David Mansfield <lkml@dm.cobite.com> writes: David> Trying to compile 2.5.42 I encountered the following error, David> which looks a lot like a GCC bug. I did a 'make mrproper; make David> oldconfig; make bzImage' and it still failed. (lots of gcc internal structure dump deleted here) Yes it's a GCC optimiser bug. I'm surprised I didn't see it: I tried a whole heap of different compilers on that code, and had problems only on the earlier similar code in raid0_run(). I didn't try redhat's compilers (I run debian) but didn't expect the behaviour to be that different. Anyway, please apply this patch (which also fixes the chunk overlap problems). diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet linux-2.5-import/drivers/md/raid0.c linux-2.5-mdfix/drivers/md/raid0.c --- linux-2.5-import/drivers/md/raid0.c Mon Oct 14 10:32:35 2002 +++ linux-2.5-mdfix/drivers/md/raid0.c Tue Oct 15 10:03:07 2002 @@ -162,6 +162,29 @@ return 1; } +/** + * raid0_mergeable_bvec -- tell bio layer if a two requests can be merged + * @q: request queue + * @bio: the buffer head that's been built up so far + * @biovec: the request that could be merged to it. + * + * Return 1 if the merge is not permitted (because the + * result would cross a chunk boundary), 0 otherwise. + */ +static int raid0_mergeable_bvec(request_queue_t *q, struct bio *bio, struct bio_vec *biovec) +{ + mddev_t *mddev = q->queuedata; + sector_t block; + unsigned int chunk_size; + unsigned int bio_sz; + + chunk_size = mddev->chunk_size >> 10; + block = bio->bi_sector >> 1; + bio_sz = (bio->bi_size + biovec->bv_len) >> 10; + + return chunk_size < ((block & (chunk_size - 1)) + bio_sz); +} + static int raid0_run (mddev_t *mddev) { unsigned cur=0, i=0, nb_zone; @@ -233,6 +256,8 @@ conf->hash_table[i++].zone1 = conf->strip_zone + cur; size -= (conf->smallest->size - zone0_size); } + blk_queue_max_sectors(&mddev->queue, mddev->chunk_size >> 9); + blk_queue_merge_bvec(&mddev->queue, raid0_mergeable_bvec); return 0; out_free_zone_conf: @@ -262,13 +287,6 @@ return 0; } -/* - * FIXME - We assume some things here : - * - requested buffers NEVER bigger than chunk size, - * - requested buffers NEVER cross stripes limits. - * Of course, those facts may not be valid anymore (and surely won't...) - * Hey guys, there's some work out there ;-) - */ static int raid0_make_request (request_queue_t *q, struct bio *bio) { mddev_t *mddev = q->queuedata; @@ -286,13 +304,16 @@ { +#if __GNUC__ < 3 + volatile +#endif sector_t x = block; sector_div(x, (unsigned long)conf->smallest->size); hash = conf->hash_table + x; } - /* Sanity check */ - if (chunk_size < (block & (chunk_size - 1)) + (bio->bi_size >> 10)) + /* Sanity check -- queue functions should prevent this happening */ + if (unlikely(chunk_size < (block & (chunk_size - 1)) + (bio->bi_size >> 10))) goto bad_map; if (!hash) ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2002-10-15 0:13 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2002-10-14 20:27 [BUG] Compile failure (gcc 2.96 bug?). 2.5.42 raid0.c David Mansfield 2002-10-14 20:54 ` Arjan van de Ven 2002-10-14 21:11 ` Arjan van de Ven [not found] <540557597@toto.iv> 2002-10-15 0:18 ` Peter Chubb
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).