Skip to contentSkip to conversation

Scsi on sparc build break in 2.6.23.

PATCH In review Rob Landley 5 participants 13 messages Oct 11, 2007 – Oct 18, 2007 1 message not in the archive SCSI

lore
Share & tools
lore
#0 lore raw

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o:
defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Do you need my full .config to reproduce this?

Rob

Signature · 2 lines
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.
#1 lore raw
Quoted 8 lines · Rob Landley

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o:
defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Do you need my full .config to reproduce this?

Please always attach the .config when reporting errors. The few bytes don't matter and it often saves some time.

I have an idea regarding what might be going wrong in this case, but it would cost me additional time to look at it because you didn't send your .config.

Quoted 1 line

Rob

cu
Adrian

Signature · 4 lines
       "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
#2 lore raw
Quoted 9 lines · Adrian Bunk
Quoted 8 lines · Rob Landley

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Quoted 8 lines
Quoted 1 line

Do you need my full .config to reproduce this?

Please always attach the .config when reporting errors. The few bytes don't matter and it often saves some time.

I have an idea regarding what might be going wrong in this case, but it would cost me additional time to look at it because you didn't send your .config.

*shrug* That's why I asked.

The reason I hesitated is I use miniconfig files rather than big .config files, and some people get confused by that. Drop the attached miniconfig-linux in the kernel source directory and go:
make ARCH=sparc allnoconfig KCONFIG_ALLCONFIG=miniconfig-linux

That expands it to a big .config file, and from there "make ARCH=sparc CROSS_COMPILE=sparc-" to reproduce the problem. Assuming you have a sparc cross-compiler lying around.

Disable CONFIG_SCSI_SUNESP and it builds to the end, (and the result boots but won't mount the root filesystem, which is sort of expected).

Rob

Signature · 2 lines
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.

CONFIG_EXPERIMENTAL=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=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_VM_EVENT_COUNTERS=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_KMOD=y
CONFIG_BLOCK=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_BINFMT_ELF=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_PNP=y
CONFIG_INET_DIAG=y
CONFIG_NETFILTER=y
CONFIG_VLAN_8021Q=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=4
CONFIG_BLK_DEV_INITRD=y
CONFIG_SCSI=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_SCSI_PROC_FS=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y
CONFIG_SCSI_SUNESP=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_SUNLANCE=y
CONFIG_INPUT=y
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_SERIAL_SUNZILOG=y
CONFIG_SERIAL_SUNZILOG_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_HWMON=y
CONFIG_FIRMWARE_EDID=y
CONFIG_UNIX98_PTY_COUNT=64
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_DNOTIFY=y
CONFIG_ISO9660_FS=y
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="ascii"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=15
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
CONFIG_UNWIND_INFO=y
CONFIG_FORCED_INLINING=y
CONFIG_SECURITY=y
CONFIG_SECURITY_CAPABILITIES=y
CONFIG_SQUASHFS=y

#3 lore raw
Quoted 26 lines · Rob Landley
Quoted 9 lines · Adrian Bunk
Quoted 8 lines · Rob Landley

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Quoted 8 lines
Quoted 1 line

Do you need my full .config to reproduce this?

Please always attach the .config when reporting errors. The few bytes don't matter and it often saves some time.

I have an idea regarding what might be going wrong in this case, but it would cost me additional time to look at it because you didn't send your .config.

*shrug* That's why I asked.

The reason I hesitated is I use miniconfig files rather than big .config files, and some people get confused by that. Drop the attached miniconfig-linux in the kernel source directory and go:
make ARCH=sparc allnoconfig KCONFIG_ALLCONFIG=miniconfig-linux

Quoted 6 lines

That expands it to a big .config file, and from there "make ARCH=sparc CROSS_COMPILE=sparc-" to reproduce the problem. Assuming you have a sparc cross-compiler lying around.

Disable CONFIG_SCSI_SUNESP and it builds to the end, (and the result boots but won't mount the root filesystem, which is sort of expected).

This is a very subtle error. You're building without hotplug, which causes __devexit to become __exit, so scsi_esp_unregister is placed in the discard section of vmlinux. Unfortunately, the EXPORT_SYMBOL causes it to be referenced from the symbol export table.

The fix is probably just to remove the __devexit tag from the function rather than trying to work out how to make the export symbol conditional on the symbol not being discarded.

James

#4 lore raw

PATCH 1/1 esp_scsi.c: remove __dev{init,exit}

Quoted 34 lines · James Bottomley
Quoted 26 lines · Rob Landley
Quoted 9 lines · Adrian Bunk
Quoted 8 lines · Rob Landley

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Quoted 8 lines
Quoted 1 line

Do you need my full .config to reproduce this?

Please always attach the .config when reporting errors. The few bytes don't matter and it often saves some time.

I have an idea regarding what might be going wrong in this case, but it would cost me additional time to look at it because you didn't send your .config.

*shrug* That's why I asked.

The reason I hesitated is I use miniconfig files rather than big .config files, and some people get confused by that. Drop the attached miniconfig-linux in the kernel source directory and go:
make ARCH=sparc allnoconfig KCONFIG_ALLCONFIG=miniconfig-linux

Quoted 6 lines

That expands it to a big .config file, and from there "make ARCH=sparc CROSS_COMPILE=sparc-" to reproduce the problem. Assuming you have a sparc cross-compiler lying around.

Disable CONFIG_SCSI_SUNESP and it builds to the end, (and the result boots but won't mount the root filesystem, which is sort of expected).

Quoted 8 lines

This is a very subtle error. You're building without hotplug, which causes __devexit to become __exit, so scsi_esp_unregister is placed in the discard section of vmlinux. Unfortunately, the EXPORT_SYMBOL causes it to be referenced from the symbol export table.

The fix is probably just to remove the __devexit tag from the function rather than trying to work out how to make the export symbol conditional on the symbol not being discarded.

You can't make it conditional on that since a built-in esp_scsi could have modular users.

scsi_esp_register() is also buggy since it's impossible that the EXPORT_SYMBOL(scsi_esp_register) works in the CONFIG_HOTPLUG=n case when it's __devinit - it will always Oops.

Having anything exported __{,dev}{init,exit} is always very likely to be buggy.

Patch below.

Quoted 1 line

James

cu
Adrian

<-- snip -->

Since scsi_esp_{,un}register() are EXPORT_SYMBOL'ed, these functions (and the functions they use) can't be __dev{init,exit}.

Based on a bug report by Rob Landley.

---

 drivers/scsi/esp_scsi.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/scsi/esp_scsi.c renamed from drivers/scsi/esp_scsi.c.old +5 -5
@@ -2138,7 +2138,7 @@
 }
 EXPORT_SYMBOL(scsi_esp_intr);
 
-static void __devinit esp_get_revision(struct esp *esp)
+static void esp_get_revision(struct esp *esp)
 {
 	u8 val;
 
@@ -2187,7 +2187,7 @@
 	}
 }
 
-static void __devinit esp_init_swstate(struct esp *esp)
+static void esp_init_swstate(struct esp *esp)
 {
 	int i;
 
@@ -2233,7 +2233,7 @@
 	esp_read8(ESP_INTRPT);
 }
 
-static void __devinit esp_set_clock_params(struct esp *esp)
+static void esp_set_clock_params(struct esp *esp)
 {
 	int fmhz;
 	u8 ccf;
@@ -2306,7 +2306,7 @@
 
 static struct scsi_transport_template *esp_transport_template;
 
-int __devinit scsi_esp_register(struct esp *esp, struct device *dev)
+int scsi_esp_register(struct esp *esp, struct device *dev)
 {
 	static int instance;
 	int err;
@@ -2346,7 +2346,7 @@
 }
 EXPORT_SYMBOL(scsi_esp_register);
 
-void __devexit scsi_esp_unregister(struct esp *esp)
+void scsi_esp_unregister(struct esp *esp)
 {
 	scsi_remove_host(esp->host);
 }
author Acked-by on v1 1/1
#5 lore raw

Re: [2.6 patch] esp_scsi.c: remove __dev{init,exit}

Quoted 6 lines · Adrian Bunk

Since scsi_esp_{,un}register() are EXPORT_SYMBOL'ed, these functions (and the functions they use) can't be __dev{init,exit}.

Based on a bug report by Rob Landley.

Worked for me...

Rob

Signature · 2 lines
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.
Acked-by
#6 lore raw

Re: [2.6 patch] esp_scsi.c: remove __dev{init,exit}

From: Rob Landley <[email protected]>
Date: Thu, 11 Oct 2007 17:47:02 -0500

Quoted 9 lines · Adrian Bunk
Quoted 6 lines

Since scsi_esp_{,un}register() are EXPORT_SYMBOL'ed, these functions (and the functions they use) can't be __dev{init,exit}.

Based on a bug report by Rob Landley.

I'm fine with this fix too.

#7 lore raw

Re: [2.6 patch] esp_scsi.c: remove __dev{init,exit}

Quoted 9 lines · David Miller

From: Rob Landley <[email protected]>
Date: Thu, 11 Oct 2007 17:47:02 -0500

Quoted 6 lines · Adrian Bunk
Quoted 5 lines

Since scsi_esp_{,un}register() are EXPORT_SYMBOL'ed, these functions (and the functions they use) can't be __dev{init,exit}.

Based on a bug report by Rob Landley.

Quoted 7 lines
Quoted 3 lines
Quoted 1 line

I'm fine with this fix too.

Did this already go to the -stable guys for 2.6.23.2?

Rob

Signature · 2 lines
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.
#8 lore raw
In reply to Rob Landley
Quoted 19 lines · Rob Landley
Quoted 9 lines · Adrian Bunk
Quoted 8 lines · Rob Landley

CONFIG_SCSI_SUNESP=y breaks the build in 2.6.23:

LD vmlinux
scsi_esp_unregister' referenced in section __ksymtab' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o
make: *** [vmlinux] Error 1

Quoted 8 lines
Quoted 1 line

Do you need my full .config to reproduce this?

Please always attach the .config when reporting errors. The few bytes don't matter and it often saves some time.

I have an idea regarding what might be going wrong in this case, but it would cost me additional time to look at it because you didn't send your .config.

Quoted 7 lines

*shrug* That's why I asked.

The reason I hesitated is I use miniconfig files rather than big .config files, and some people get confused by that. Drop the attached miniconfig-linux in the kernel source directory and go:
make ARCH=sparc allnoconfig KCONFIG_ALLCONFIG=miniconfig-linux
...

I assume you have the full .config in your build directory, and could have taken it from there?

Quoted 1 line

Rob

cu
Adrian

Signature · 4 lines
       "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

A message that is not in the archive (sent off-list or not yet received): [email protected]

#10 lore raw
Quoted 9 lines · Rob Landley
Quoted 2 lines · Adrian Bunk

I assume you have the full .config in your build directory, and could have taken it from there?

Actually I don't. (The extracted source tree is in a temporary directory which the script deletes afterwards unless I tell it not to. I just followed my own instructions to create the .config and attach it, but I see that James Bottomley already diagnosed it and you came up with a patch. Off to try it...)

I was able to follow your instructions for generating it.

But I hope you got my point that it's much easier to debug such issues when you generate the .config yourself and attach it when sending the bug report.

Quoted 1 line

Rob

cu
Adrian

Signature · 4 lines
       "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
#11 lore raw
Quoted 11 lines · On Fri, 12 Oct 2007 01:56:59 +0200 Adrian Bunk wrote:
Quoted 9 lines · Rob Landley
Quoted 2 lines · Adrian Bunk

I assume you have the full .config in your build directory, and could have taken it from there?

Actually I don't. (The extracted source tree is in a temporary directory which the script deletes afterwards unless I tell it not to. I just followed my own instructions to create the .config and attach it, but I see that James Bottomley already diagnosed it and you came up with a patch. Off to try it...)

Quoted 5 lines

I was able to follow your instructions for generating it.

But I hope you got my point that it's much easier to debug such issues when you generate the .config yourself and attach it when sending the bug report.

I use the mini-config method quite a bit (probably not as much as Rob does), but I agree with Adrian, it should have just been included here in full (not mini).

---
~Randy

#12 lore raw
In reply to Adrian Bunk
Quoted 11 lines · Adrian Bunk
Quoted 9 lines · Rob Landley
Quoted 2 lines · Adrian Bunk

I assume you have the full .config in your build directory, and could have taken it from there?

Actually I don't. (The extracted source tree is in a temporary directory which the script deletes afterwards unless I tell it not to. I just followed my own instructions to create the .config and attach it, but I see that James Bottomley already diagnosed it and you came up with a patch. Off to try it...)

Quoted 5 lines

I was able to follow your instructions for generating it.

But I hope you got my point that it's much easier to debug such issues when you generate the .config yourself and attach it when sending the bug report.

*shrug* I find miniconfig much easier to read because I can see what the 50 or so intentional options are, not just the 1000 or so background options set to various default values.

Rob

Signature · 2 lines
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.
#13 lore raw
Quoted 14 lines · Rob Landley
Quoted 13 lines · Adrian Bunk
Quoted 9 lines · Rob Landley
Quoted 2 lines · Adrian Bunk

I assume you have the full .config in your build directory, and could have taken it from there?

Actually I don't. (The extracted source tree is in a temporary directory which the script deletes afterwards unless I tell it not to. I just followed my own instructions to create the .config and attach it, but I see that James Bottomley already diagnosed it and you came up with a patch. Off to try it...)

I was able to follow your instructions for generating it.

Quoted 7 lines
Quoted 3 lines

But I hope you got my point that it's much easier to debug such issues when you generate the .config yourself and attach it when sending the bug report.

*shrug* I find miniconfig much easier to read because I can see what the 50 or so intentional options are, not just the 1000 or so background options set to various default values.

The .config is the canonical format everyone is used to.

It also has advantages like a defined order of the options.

And it is actually an advantage that you see what the other options are set to (e.g. in this case your miniconfig did not show the value of CONFIG_HOTPLUG which was the most important option for understanding the bug) - it doesn't matter whether you {dis,en}abled it intentionally, all that matter is it's value.

There might be use cases where a miniconfig is better, but for debugging compile errors a full .config is much better.

Quoted 1 line

Rob

cu
Adrian

Signature · 4 lines
       "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