★ wanayoo — archive 1999 http://www.atnf.csiro.au/~rgooch/linux/docs/kernel-newsflash.htmlNouvelle recherche | Portail wanayoo
Kernel Newsflash

Kernel Newsflash

Richard Gooch

28-FEB-2000


What is this page?

This page is meant to reduce questions to the linux-kernel mailing list of the form "kernel x.y.z doesn't compile". Often a fix is posted to the list which solves the problem. Unfortunately, for days afterwards, people ask the same question, even though the fix has been posted many times already.

Please bookmark this page and refer to it before asking on the kernel list.

This document is for the 2.2 and 2.3 series kernels.

Note that some versions of egcs need the compile option: -fno-strict-aliasing
Gcc 2.95.2 has this as the default, although it won't hurt to still provide this switch. Better safe than sorry.


Production Kernels (2.2.x series)


General Note

The 2.2.x serial driver has a bug that interferes with interrupt sharing for multifunction cards. The effect is that opening a serial port on a multifunction card fails, giving an IO error.

The bug can be fixed by editing linux/drivers/char/serial.c and changing each use of IRQ_T(info) to IRQ_T(state).


The latest official kernel is 2.2.14

No known problems.

Archive of problems for kernel 2.2.12

There still appear to be some stability problems.

Archive of problems for kernel 2.2.10

Some people have reported filesystem corruption.

Archive of problems for kernel 2.2.9

Some people have reported filesystem corruption.

The matroxfb driver won't run as a module. It must be built into the kernel, or you can fix it by adding:

EXPORT_SYMBOL(fb_con);
to the end of drivers/video/fbcon.c

Archive of problems for kernel 2.2.7

The via-rhine problem reported for kernel 2.2.6 remains. Use the same fix.

Archive of problems for kernel 2.2.6

When IrDA is enabled, the file net/irda/iriap.c does not compile. The 2.2.6-ac1 kernel is supposed to fix this ("ac" means Alan Cox). Alan's kernels are available from
ftp://ftp.kernel.org/pub/linux/kernel/alan/ or a mirror near you.

There is a run-time bug in the via-rhine driver. The following patch has been posted:

--- linux/drivers/net/via-rhine.c.orig  Sun Apr 11 16:16:17 1999
+++ linux/drivers/net/via-rhine.c       Fri Apr 16 16:46:17 1999
@@ -1053,6 +1053,7 @@
                        skb->protocol = eth_type_trans(skb, dev);
                        netif_rx(skb);
                        dev->last_rx = jiffies;
+                       np->stats.rx_bytes += pkt_len;
                        np->stats.rx_packets++;
                }
                entry = (++np->cur_rx) % RX_RING_SIZE;

The radio-cadet video capture driver doesn't compile. The following patch has been posted:

--- include/linux/videodev.h.stock	Sat Apr 17 11:00:04 1999
+++ include/linux/videodev.h	Sat Apr 17 11:00:34 1999
@@ -275,6 +275,7 @@
 #define VID_HARDWARE_GEMTEK	18
 #define VID_HARDWARE_TYPHOON	19
 #define VID_HARDWARE_VINO	20	/* Reserved for SGI Indy Vino */
+#define VID_HARDWARE_CADET	21	/* Cadet radio */
 
 /*
  *	Initialiser list

The MSDOS/FAT filesystems do not compile. The following patch should fix it:

diff -urN linux-2.2.6/fs/fat/fatfs_syms.c linux/fs/fat/fatfs_syms.c
--- linux-2.2.6/fs/fat/fatfs_syms.c	Thu Feb 25 10:03:56 1999
+++ linux/fs/fat/fatfs_syms.c	Tue Apr 20 00:19:38 1999
@@ -54,6 +54,7 @@
 EXPORT_SYMBOL(unlock_fat);
 EXPORT_SYMBOL(fat_dir_ioctl);
 EXPORT_SYMBOL(fat_readpage);
+EXPORT_SYMBOL(fat_is_binary);
 
 int init_fat_fs(void)
 {
diff -urN linux-2.2.6/fs/fat/inode.c linux/fs/fat/inode.c
--- linux-2.2.6/fs/fat/inode.c	Fri Apr 16 13:26:37 1999
+++ linux/fs/fat/inode.c	Tue Apr 20 00:18:36 1999
@@ -703,7 +703,7 @@
 	if(raw_entry->attr & ATTR_SYS)
 		if (MSDOS_SB(sb)->options.sys_immutable)
 			inode->i_flags |= S_IMMUTABLE;
-	MSDOS_I(inode)->i_binary = is_binary(MSDOS_SB(sb)->options.conversion,
+	MSDOS_I(inode)->i_binary = fat_is_binary(MSDOS_SB(sb)->options.conversion,
 	    raw_entry->ext);
 	MSDOS_I(inode)->i_attrs = raw_entry->attr & ATTR_UNUSED;
 	/* this is as close to the truth as we can get ... */
diff -urN linux-2.2.6/fs/fat/misc.c linux/fs/fat/misc.c
--- linux-2.2.6/fs/fat/misc.c	Thu Feb 25 10:03:56 1999
+++ linux/fs/fat/misc.c	Tue Apr 20 00:18:56 1999
@@ -55,7 +55,7 @@
  * the extension part of the file name.
  */
 
-int is_binary(char conversion,char *extension)
+int fat_is_binary(char conversion,char *extension)
 {
 	char *walk;
 
diff -urN linux-2.2.6/fs/msdos/namei.c linux/fs/msdos/namei.c
--- linux-2.2.6/fs/msdos/namei.c	Tue Apr 13 09:15:18 1999
+++ linux/fs/msdos/namei.c	Tue Apr 20 00:22:31 1999
@@ -713,7 +713,7 @@
 	fat_cache_inval_inode(old_inode);
 	old_inode->i_version = ++event;
 	MSDOS_I(old_inode)->i_binary =
-		is_binary(MSDOS_SB(sb)->options.conversion, free_de->ext);
+		fat_is_binary(MSDOS_SB(sb)->options.conversion, free_de->ext);
 	old_inode->i_ino = free_ino;
 	fat_mark_buffer_dirty(sb, free_bh, 1);
 	old_de->name[0] = DELETED_FLAG;
diff -urN linux-2.2.6/include/linux/msdos_fs.h linux/include/linux/msdos_fs.h
--- linux-2.2.6/include/linux/msdos_fs.h	Thu Feb 25 10:04:04 1999
+++ linux/include/linux/msdos_fs.h	Tue Apr 20 00:20:22 1999
@@ -195,7 +195,7 @@
 };
 
 /* misc.c */
-extern int is_binary(char conversion,char *extension);
+extern int fat_is_binary(char conversion,char *extension);
 extern void lock_fat(struct super_block *sb);
 extern void unlock_fat(struct super_block *sb);
 extern int fat_add_cluster(struct inode *inode);

Development Kernels (2.3.x series)


The latest official kernel is 2.3.48

NTFS will not compile. Apply the following patch:
--- linux-2.3.48/fs/ntfs/fs.c.orig      Sun Feb 27 11:49:15 2000
+++ linux-2.3.48/fs/ntfs/fs.c   Sun Feb 27 12:39:42 2000
@@ -692,7 +692,7 @@
                        inode->u.ntfs_i.mmu_private = inode->i_size;
                } else {
                        inode->i_op=&ntfs_inode_operations_nobmap;
-                       inode->i_fop=&ntfs_file_operations_nommap,
+                       inode->i_fop=&ntfs_file_operations_nommap;
                }
                inode->i_mode=S_IFREG|S_IRUGO;
        }

Archive of problems for kernel 2.3.47

The MTRR driver will not compile. Change "#ifdev" to "#ifdef" near the end of arch/i386/kernel/mtrr.c

Archive of problems for kernel is 2.3.34

The RAMDISC/initrd problems with 2.3.28 continue.

Archive of problems for kernel 2.3.30

The RAMDISC/initrd problems with 2.3.28 continue.

Compiling for SMP and Pentium (or better) CPUs will fail in arch/i386/kernel/time.c when compiling with gcc 2.7.2.3 (the recommended compiler). Compile for a lesser CPU (i.e. 486) or disable SMP support.


Archive of problems for kernel 2.3.28

Most of the bugs due to the pagecache changes seem to have been fixed. I'm currently investigating problems with RAMDISCS and loop devices.

This kernel (and recent kernels) doesn't compile if you've enabled initrd. Disable initrd in your config and recompile. If you need initrd, wait for the kernel to be fixed.

There are various compile/link/module problems with this kernel. Apply the following patch:

diff -u linux.old/Makefile linux/Makefile
--- linux.old/Makefile	1999/11/12 22:59:05	1.1.1.17
+++ linux/Makefile	1999/11/13 07:50:32	1.1.1.17.4.1
@@ -112,6 +112,7 @@
 DRIVERS		=drivers/block/block.a \
 		 drivers/char/char.o \
 		 drivers/misc/misc.o \
+		 drivers/net/net.o \
 	         drivers/parport/parport.a
 LIBS		=$(TOPDIR)/lib/lib.a
 SUBDIRS		=kernel drivers mm fs net ipc lib
@@ -123,8 +124,6 @@
 ifeq ($(CONFIG_ISDN),y)
 DRIVERS := $(DRIVERS) drivers/isdn/isdn.a
 endif
-
-DRIVERS := $(DRIVERS) drivers/net/net.a
 
 ifdef CONFIG_NET_FC
 DRIVERS := $(DRIVERS) drivers/net/fc/fc.a
diff -u linux.old/drivers/net/Makefile linux/drivers/net/Makefile
--- linux.old/drivers/net/Makefile	1999/11/11 04:52:09	1.1.1.11
+++ linux/drivers/net/Makefile	1999/11/13 07:50:32	1.1.1.11.8.1
@@ -19,8 +19,8 @@
 MOD_IN_SUB_DIRS :=
 ALL_SUB_DIRS := $(SUB_DIRS) fc hamradio irda pcmcia tokenring wan
 
-L_TARGET := net.a
-L_OBJS   := auto_irq.o
+O_TARGET := net.o
+O_OBJS   := auto_irq.o
 M_OBJS   :=
 MOD_LIST_NAME := NET_MODULES
 
@@ -258,14 +258,11 @@
 
 # Translate to Rules.make lists.
 
-O_OBJS          := $(filter-out $(export-objs), $(obj-y))
+O_OBJS          += $(filter-out $(export-objs), $(obj-y))
 OX_OBJS         := $(filter     $(export-objs), $(obj-y))
 M_OBJS          := $(sort $(filter-out $(export-objs), $(obj-m)))
 MX_OBJS         := $(sort $(filter     $(export-objs), $(obj-m)))
 
-L_OBJS += $(O_OBJS)
-L_OBJS += $(OX_OBJS)
-
 include $(TOPDIR)/Rules.make
 
 clean:
diff -urN linux.old/drivers/block/ide-features.c linux/drivers/block/ide-features.c
--- linux.old/drivers/block/ide-features.c	Fri Nov 12 11:12:11 1999
+++ linux/drivers/block/ide-features.c	Wed Nov 17 12:39:03 1999
@@ -14,6 +14,7 @@
  */
 
 #include <linux/config.h>
+#define __NO_VERSION__
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/string.h>
diff -urN linux.old/mm/Makefile linux/mm/Makefile
--- linux.old/mm/Makefile	Tue Oct 19 11:22:19 1999
+++ linux/mm/Makefile	Wed Nov 17 13:25:09 1999
@@ -10,7 +10,8 @@
 O_TARGET := mm.o
 O_OBJS	 := memory.o mmap.o filemap.o mprotect.o mlock.o mremap.o \
 	    vmalloc.o slab.o bootmem.o swap.o vmscan.o page_io.o \
-	    page_alloc.o swap_state.o swapfile.o
+	    swap_state.o swapfile.o
+OX_OBJS  := page_alloc.o
 
 ifeq ($(CONFIG_HIGHMEM),y)
 O_OBJS += highmem.o
diff -urN linux.old/mm/page_alloc.c linux/mm/page_alloc.c
--- linux.old/mm/page_alloc.c	Thu Nov 11 11:33:42 1999
+++ linux/mm/page_alloc.c	Wed Nov 17 13:22:11 1999
@@ -8,6 +8,7 @@
  */
 
 #include <linux/config.h>
+#include <linux/module.h>
 #include <linux/mm.h>
 #include <linux/kernel_stat.h>
 #include <linux/swap.h>
@@ -373,6 +374,7 @@
 {
 	return __get_pages(gfp_mask_to_zone(gfp_mask), gfp_mask, order);
 }
+EXPORT_SYMBOL(alloc_pages);
 
 /*
  * Total amount of free (allocatable) RAM:

Archive of problems for kernel 2.3.22

This kernel doesn't compile. Apply the following patch:
diff -u --recursive linux-2.3.22/arch/i386/kernel/setup.c linux/arch/i386/kernel/setup.c
--- linux-2.3.22/arch/i386/kernel/setup.c	Sun Oct 17 17:18:18 1999
+++ linux/arch/i386/kernel/setup.c	Sun Oct 17 17:15:27 1999
@@ -619,10 +619,10 @@
 	if (LOADER_TYPE) {
 		initrd_start = INITRD_START ? INITRD_START + PAGE_OFFSET : 0;
 		initrd_end = initrd_start+INITRD_SIZE;
-		if (initrd_end > memory_end) {
+		if (initrd_end > *memory_end_p) {
 			printk("initrd extends beyond end of memory "
 			    "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
-			    initrd_end,memory_end);
+			    initrd_end, (unsigned long) memory_end_p);
 			initrd_start = 0;
 		}
 	}

Archive of problems for kernel 2.3.10

There has been a major redesign of the pagecache. This has broken some filesystems (i.e. nfs, hpfs, vfat). Don't compile these for now. In addition, there may still be lingering problems with all filesystems. Don't use this kernel if your data is precious.

Archive of problems for kernel 2.3.6

net/netsyms.c does not compile. Apply the following patch:
diff -u -r1.116 -r1.117
--- netsyms.c	1999/06/09 10:10:11	1.116
+++ netsyms.c	1999/06/09 22:04:57	1.117
@@ -377,7 +377,6 @@
 EXPORT_SYMBOL(rtnetlink_links);
 EXPORT_SYMBOL(__rta_fill);
 EXPORT_SYMBOL(rtnetlink_dump_ifinfo);
-EXPORT_SYMBOL(rtnl_wlockct);
 EXPORT_SYMBOL(rtnl);
 EXPORT_SYMBOL(neigh_delete);
 EXPORT_SYMBOL(neigh_add);

Archive of problems for kernel is 2.3.5

binfmt_java and binfmt_misc can't be loaded as modules. Apply the following patch:
--- linux/kernel/ksyms.c.old	Thu Jun  3 16:52:58 1999
+++ linux/kernel/ksyms.c	Thu Jun  3 16:53:53 1999
@@ -346,6 +346,7 @@
 /* Program loader interfaces */
 EXPORT_SYMBOL(setup_arg_pages);
 EXPORT_SYMBOL(copy_strings);
+EXPORT_SYMBOL(copy_strings_kernel);
 EXPORT_SYMBOL(do_execve);
 EXPORT_SYMBOL(flush_old_exec);
 EXPORT_SYMBOL(open_dentry);

Archive of problems for kernel 2.3.4

No known problems.
Go back to my:
Home Page, Linux Page or Linux Documentation Page.

Richard Gooch (rgooch@atnf.csiro.au)