merge changes from HEAD for official 3.3 bootcd planetlab-3_3-bootcd-branch
authorMark Huang <mlhuang@cs.princeton.edu>
Mon, 10 Jul 2006 18:14:17 +0000 (18:14 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Mon, 10 Jul 2006 18:14:17 +0000 (18:14 +0000)
arch/i386/Makefile
drivers/net/bcm5700/DISTRIB.TXT
drivers/net/bcm5700/README.TXT
drivers/net/bcm5700/RELEASE.TXT
drivers/net/bcm5700/b57um.c
drivers/net/bcm5700/bcm5700.4
drivers/net/bcm5700/tigon3.c
drivers/usb/host/uhci-hub.c
include/asm-i386/smp.h
init/initramfs.c
scripts/kernel-2.6-planetlab.spec

index 4d22f78..efec8dc 100644 (file)
@@ -33,8 +33,7 @@ cflags-$(CONFIG_M486)         += -march=i486
 cflags-$(CONFIG_M586)          += -march=i586
 cflags-$(CONFIG_M586TSC)       += -march=i586
 cflags-$(CONFIG_M586MMX)       += $(call cc-option,-march=pentium-mmx,-march=i586)
-#cflags-$(CONFIG_M686)         += -march=i686 -mtune=pentium4
-cflags-$(CONFIG_M686)          += -march=i686 -mcpu=pentium4
+cflags-$(CONFIG_M686)          += -march=i686 $(call cc-option,-mtune=pentium4,-mcpu=pentium4)
 cflags-$(CONFIG_MPENTIUMII)    += -march=i686 $(call cc-option,-mtune=pentium2)
 cflags-$(CONFIG_MPENTIUMIII)   += -march=i686 $(call cc-option,-mtune=pentium3)
 cflags-$(CONFIG_MPENTIUMM)     += -march=i686 $(call cc-option,-mtune=pentium3)
index 2c4ba7d..22891d3 100755 (executable)
@@ -1,14 +1,14 @@
 \r
            Additional Installation Notes for Various Linux Distributions\r
                        Broadcom BCM5700 Linux Driver\r
-                              Version 8.3.14\r
-                                11/02/2005\r
+                              Version 8.3.17b\r
+                                02/21/2006\r
 \r
                           Broadcom Corporation\r
                           16215 Alton Parkway,\r
                           Irvine, CA 92619-7013\r
 \r
-                Copyright (c) 2000-2005 Broadcom Corporation\r
+                Copyright (c) 2000-2006 Broadcom Corporation\r
                            All rights reserved\r
 \r
 \r
index 3555ef5..05d713d 100644 (file)
@@ -1,14 +1,14 @@
 
                            Installation Notes
                        Broadcom BCM5700 Linux Driver
-                              Version 8.3.14
-                                11/02/2005
+                              Version 8.3.17b
+                                02/21/2006
 
                           Broadcom Corporation
                           16215 Alton Parkway,
                           Irvine, CA 92619-7013
 
-                Copyright (c) 2000-2005 Broadcom Corporation
+                Copyright (c) 2000-2006 Broadcom Corporation
                            All rights reserved
 
 
@@ -529,7 +529,7 @@ The following are the most common sample messages that may be logged in the file
 will appear on the console. Most systems are set to level 6 by default.
 
 Broadcom Gigabit Ethernet Driver bcm5700 with Broadcom NIC Extension (NICE)
-ver. 8.3.14 (11/02/05)
+ver. 8.3.17b (02/21/06)
 
     Driver signon
 
index abfc21c..10ca5a0 100755 (executable)
@@ -1,17 +1,56 @@
 \r
                               Release Notes\r
                        Broadcom BCM5700 Linux Driver\r
-                              Version 8.3.14\r
-                                11/02/2005\r
+                              Version 8.3.17b\r
+                                02/21/2006\r
 \r
                           Broadcom Corporation\r
                           16215 Alton Parkway,\r
                           Irvine, CA 92619-7013\r
 \r
-                Copyright (c) 2000-2005 Broadcom Corporation\r
+                Copyright (c) 2000-2006 Broadcom Corporation\r
                            All rights reserved\r
 \r
 \r
+v8.3.17b (February 21 2006)\r
+=========================\r
+    Fixes:\r
+    ------\r
+    1. Problem : (ISSUE289636) 5715 ports hang under linux with 6 or more\r
+                ports are active in the RFC2544 test.\r
+       Cause   : While running RFC2544 test with 6 or more ports active\r
+                the linux error message "NETDEV_WATCHDOG transmitt timed out"\r
+                gets displayed multiple times. After multiple errors 5715\r
+                ports stop working.\r
+       Change  : Updated trans_start with jiffies before calling\r
+                netif_stop_queue to prevent false NETDEV WATCHDOG\r
+       Impact  : 5715.\r
+\r
+v8.3.17 (January 18 2006)\r
+=========================\r
+The patch file in the bcm_sup-8.3.16 tar file will not compile\r
+in 2.6.14 kernels. This release version is using a patch\r
+file for 2.6.13 kernels.\r
+\r
+v8.3.16 (January 10 2006)\r
+=========================\r
+    Enhancement:\r
+    ------------\r
+       ECD13216 complete workaround for 5714/5715 fiber:\r
+       During chip init set: \r
+       0x5b0[10]=1\r
+       0x6808[5:4]=01\r
+       To check link status read:\r
+       0x460 bit 3 is set when link is established.    \r
+\r
+\r
+v8.3.15 (December 16, 2005)\r
+===========================\r
+    Enhancement:\r
+    ------------\r
+       Added support for 5714S and 5715S.\r
\r
+\r
 v8.3.14 (November 02, 2005)\r
 ===========================\r
     Fixes:\r
index 10374e6..d3f76ad 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /*                                                                            */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom  */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom  */
 /* Corporation.                                                               */
 /* All rights reserved.                                                       */
 /*                                                                            */
@@ -12,8 +12,8 @@
 
 
 char bcm5700_driver[] = "bcm5700";
-char bcm5700_version[] = "8.3.14a";
-char bcm5700_date[] = "(11/2/05)";
+char bcm5700_version[] = "8.3.17b";
+char bcm5700_date[] = "(02/21/06)";
 
 #define B57UM
 #include "mm.h"
@@ -128,6 +128,8 @@ static int bcm_msi_chipset_bug = 0;
 /* Operational parameters that usually are not changed. */
 /* Time in jiffies before concluding the transmitter is hung. */
 #define TX_TIMEOUT  (2*HZ)
+/* RQM 289636: */
+#define BCM_TX_TIMEOUT  (5*HZ)
 
 #if (LINUX_VERSION_CODE < 0x02030d)
 #define pci_resource_start(dev, bar)   (dev->base_address[bar] & PCI_BASE_ADDRESS_MEM_MASK)
@@ -289,6 +291,14 @@ pci_set_dma_mask(struct pci_dev *dev, dma_addr_t mask)
                spin_unlock_irqrestore(&(pUmDevice)->global_lock, flags);\
        }
 
+/* Fix for RQM 289636 */
+static inline void
+bcm5700_netif_stop_queue(struct net_device *dev)
+{
+       dev->trans_start = jiffies; /* prevent tx timeout */
+       netif_stop_queue(dev);
+}
+
 inline void
 bcm5700_intr_lock(PUM_DEVICE_BLOCK pUmDevice)
 {
@@ -883,9 +893,11 @@ static struct pci_device_id bcm5700_pci_tbl[] __devinitdata = {
        {0x14e4, 0x1600, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5752 },
        {0x14e4, 0x1601, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5752M },
        {0x14e4, 0x1668, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5714 },
+       {0x14e4, 0x1669, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5714S },
        {0x14e4, 0x166a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5780 },
        {0x14e4, 0x166b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5780S },
        {0x14e4, 0x1678, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5715 },
+       {0x14e4, 0x1679, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5715S },
        {0x14e4, 0x16ff, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5903M },
 #endif
        {0,}
@@ -1211,7 +1223,9 @@ bcm5700_init_one(struct pci_dev *pdev,
 #endif
 #if (LINUX_VERSION_CODE >= 0x20400)
        dev->tx_timeout = bcm5700_reset;
-       dev->watchdog_timeo = TX_TIMEOUT;
+       /* Fix for RQM 289636 */
+       /* dev->watchdog_timeo = TX_TIMEOUT; */
+       dev->watchdog_timeo = BCM_TX_TIMEOUT;
 #endif
 #ifdef BCM_VLAN
        dev->vlan_rx_register = &bcm5700_vlan_rx_register;
@@ -1287,6 +1301,8 @@ bcm5700_init_one(struct pci_dev *pdev,
             if(( pDevice->PhyId & PHY_ID_MASK ) == PHY_BCM5780_PHY_ID)
                 printk("Broadcom BCM5780S Integrated Serdes ");
 
+            if(( pDevice->PhyId & PHY_ID_MASK ) == PHY_BCM5714_PHY_ID)
+                printk("Broadcom BCM5714S Integrated Serdes ");
         }        
        else if ((pDevice->PhyId & PHY_ID_MASK) == PHY_BCM5705_PHY_ID)
                printk("Broadcom BCM5705 Integrated Copper ");
@@ -2075,7 +2091,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
 #endif
 
        if (pUmDevice->do_global_lock && pUmDevice->interrupt) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_queued = 1;
                if (!pUmDevice->interrupt) {
                        netif_wake_queue(dev);
@@ -2087,7 +2105,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
        pPacket = (PLM_PACKET)
                QQ_PopHead(&pDevice->TxPacketFreeQ.Container);
        if (pPacket == 0) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_full = 1;
                if (QQ_GetEntryCnt(&pDevice->TxPacketFreeQ.Container)) {
                        netif_wake_queue(dev);
@@ -2113,7 +2133,9 @@ bcm5700_start_xmit(struct sk_buff *skb, struct net_device *dev)
        frag_no = 0;
 #endif
        if (atomic_read(&pDevice->SendBdLeft) < (frag_no + 1)) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                pUmDevice->tx_full = 1;
                QQ_PushHead(&pDevice->TxPacketFreeQ.Container, pPacket);
                if (atomic_read(&pDevice->SendBdLeft) >= (frag_no + 1)) {
@@ -2472,7 +2494,9 @@ bcm5700_close(struct net_device *dev)
 #if (LINUX_VERSION_CODE < 0x02032b)
        dev->start = 0;
 #endif
-       netif_stop_queue(dev);
+       /* Fix for RQM 289636 */
+       /* netif_stop_queue(dev); */
+       bcm5700_netif_stop_queue(dev);
        pUmDevice->opened = 0;
 
 #ifdef BCM_ASF
@@ -4379,7 +4403,9 @@ STATIC int bcm5700_change_mtu(struct net_device *dev, int new_mtu)
 
        BCM5700_PHY_LOCK(pUmDevice, flags);
        if (reinit) {
-               netif_stop_queue(dev);
+               /* Fix for RQM 289636 */
+               /* netif_stop_queue(dev); */
+               bcm5700_netif_stop_queue(dev);
                bcm5700_shutdown(pUmDevice);
                bcm5700_freemem(dev);
        }
@@ -4516,11 +4542,16 @@ void cleanup_module(void)
 #endif  /* MODULE */
 #else  /* LINUX_VERSION_CODE < 0x020300 */
 
+
+#if (LINUX_VERSION_CODE >= 0x2060b)
+static int bcm5700_suspend(struct pci_dev *pdev, pm_message_t state)
+#else
 #if (LINUX_VERSION_CODE >= 0x020406)
 static int bcm5700_suspend (struct pci_dev *pdev, u32 state)
 #else
 static void bcm5700_suspend (struct pci_dev *pdev)
 #endif
+#endif
 {
        struct net_device *dev = (struct net_device *) pci_get_drvdata(pdev);
        PUM_DEVICE_BLOCK pUmDevice = (PUM_DEVICE_BLOCK) dev->priv;
index 1549000..240d40a 100644 (file)
@@ -1,11 +1,11 @@
-.\" Copyright (c) 2000-2005 Broadcom Corporation
+.\" Copyright (c) 2000-2006 Broadcom Corporation
 .\" This is free documentation; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
 .\" published by the Free Software Foundation.
 .\"
 .\" bcm5700.4,v 5.9 
 .\"
-.TH BCM5700 4 "10/28/05" "Broadcom Corporation"
+.TH BCM5700 4 "01/10/06" "Broadcom Corporation"
 .\"
 .\" NAME part
 .\"
index 6e0f3ce..6ae0fcb 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /*                                                                            */
-/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2005 Broadcom  */
+/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2006 Broadcom  */
 /* Corporation.                                                               */
 /* All rights reserved.                                                       */
 /*                                                                            */
@@ -3011,7 +3011,7 @@ PLM_DEVICE_BLOCK pDevice)
             {
                 pDevice->PhyId = EePhyId;
                 
-                if (EePhyTypeSerdes && ((pDevice->PhyId == PHY_BCM5780_PHY_ID)) )
+                if (EePhyTypeSerdes && ((pDevice->PhyId == PHY_BCM5714_PHY_ID) || (pDevice->PhyId == PHY_BCM5780_PHY_ID)) )
                 {
                     pDevice->PhyFlags |= PHY_IS_FIBER;
                 }
@@ -4866,12 +4866,13 @@ restart_reset:
     REG_WR(pDevice, MacCtrl.LowWaterMarkMaxRxFrame, 2);
 
     /* ecd 13216 workaround for serdes */
-    if(pDevice->PhyFlags & PHY_IS_FIBER)
+    if ((pDevice->PhyFlags & PHY_IS_FIBER) && 
+        (T3_ASIC_REV(pDevice->ChipRevId) != T3_ASIC_REV_5780))
     {
         Value32 = REG_RD_OFFSET(pDevice, 0x5b0);
         REG_WR_OFFSET(pDevice, 0x5b0, Value32 | BIT_10 );
-      
-        pDevice->GrcLocalCtrl |= BIT_4 ; 
+
+        pDevice->GrcLocalCtrl |= BIT_4 ; 
         pDevice->GrcLocalCtrl &= ~BIT_5 ; 
 
         REG_WR(pDevice, Grc.LocalCtrl, pDevice->GrcLocalCtrl);
@@ -4886,7 +4887,7 @@ restart_reset:
 
     if (!(pDevice->TbiFlags & ENABLE_TBI_FLAG) &&
         ( ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5401_PHY_ID)&&
-        ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5411_PHY_ID) ))
+          ((pDevice->PhyId & PHY_ID_MASK) != PHY_BCM5411_PHY_ID) ))
     {
         /* 5401/5411 PHY needs a delay of about 1 second after PHY reset */
         /* Without the delay, it has problem linking at forced 10 half */
@@ -7782,10 +7783,12 @@ LM_SetupNewFiberPhy(
 
         LM_5714_FamForceFiber(pDevice);
     }
-    LM_ReadPhy(pDevice, PHY_STATUS_REG, &Sreg);
-    LM_ReadPhy(pDevice, PHY_STATUS_REG, &Sreg);
 
-    if(Sreg & PHY_STATUS_LINK_PASS){
+    /* 5714/15 Serdes link status is valid only in reg 0x460 */        
+    /* ecd 13216 workaround for serdes */
+    Sreg = REG_RD(pDevice, MacCtrl.TxStatus);
+
+    if(Sreg & TX_STATUS_LINK_UP){
 
         pDevice->LinkStatus = LM_STATUS_LINK_ACTIVE;
         pDevice->LineSpeed = LM_LINE_SPEED_1000MBPS;
index 4c45ba8..f94d169 100644 (file)
@@ -86,6 +86,21 @@ static void uhci_finish_suspend(struct uhci_hcd *uhci, int port,
        }
 }
 
+/* Wait for the UHCI controller in HP's iLO2 server management chip.
+ * It can take up to 250 us to finish a reset and set the CSC bit.
+ */
+static void wait_for_HP(unsigned long port_addr)
+{
+       int i;
+
+       for (i = 10; i < 250; i += 10) {
+               if (inw(port_addr) & USBPORTSC_CSC)
+                       return;
+       udelay(10);
+       }
+       /* Log a warning? */
+}
+
 static void uhci_check_ports(struct uhci_hcd *uhci)
 {
        unsigned int port;
@@ -99,6 +114,11 @@ static void uhci_check_ports(struct uhci_hcd *uhci)
                        if (time_after_eq(jiffies, uhci->ports_timeout)) {
                                CLR_RH_PORTSTAT(USBPORTSC_PR);
                                udelay(10);
+                               /* HP's server management chip requires
+                                * a longer delay. */
+                               if (to_pci_dev(uhci_dev(uhci))->vendor ==
+                                               PCI_VENDOR_ID_HP)
+                                       wait_for_HP(port_addr);
 
                                /* If the port was enabled before, turning
                                 * reset on caused a port enable change.
index 2551f3b..e03a206 100644 (file)
@@ -42,7 +42,6 @@ extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
 extern void smp_invalidate_rcv(void);          /* Process an NMI */
 extern void (*mtrr_hook) (void);
 extern void zap_low_mappings (void);
-extern void stop_this_cpu(void *);
 
 #define MAX_APICID 256
 extern u8 x86_cpu_to_apicid[];
index 02c5ce6..be7f53c 100644 (file)
@@ -26,10 +26,12 @@ static void __init free(void *where)
 
 /* link hash */
 
+#define N_ALIGN(len) ((((len) + 1) & ~3) + 2)
+
 static __initdata struct hash {
        int ino, minor, major;
        struct hash *next;
-       char *name;
+       char name[N_ALIGN(PATH_MAX)];
 } *head[32];
 
 static inline int hash(int major, int minor, int ino)
@@ -57,7 +59,7 @@ static char __init *find_link(int major, int minor, int ino, char *name)
        q->ino = ino;
        q->minor = minor;
        q->major = major;
-       q->name = name;
+       strcpy(q->name, name);
        q->next = NULL;
        *p = q;
        return NULL;
@@ -133,8 +135,6 @@ static inline void eat(unsigned n)
        count -= n;
 }
 
-#define N_ALIGN(len) ((((len) + 1) & ~3) + 2)
-
 static __initdata char *collected;
 static __initdata int remains;
 static __initdata char *collect;
@@ -249,6 +249,7 @@ static int __init do_name(void)
        if (dry_run)
                return 0;
        if (S_ISREG(mode)) {
+               sys_unlink(collected);
                if (maybe_link() >= 0) {
                        wfd = sys_open(collected, O_WRONLY|O_CREAT, mode);
                        if (wfd >= 0) {
@@ -263,6 +264,7 @@ static int __init do_name(void)
                sys_chmod(collected, mode);
        } else if (S_ISBLK(mode) || S_ISCHR(mode) ||
                   S_ISFIFO(mode) || S_ISSOCK(mode)) {
+               sys_unlink(collected);
                if (maybe_link() == 0) {
                        sys_mknod(collected, mode, rdev);
                        sys_chown(collected, uid, gid);
@@ -291,6 +293,7 @@ static int __init do_copy(void)
 static int __init do_symlink(void)
 {
        collected[N_ALIGN(name_len) + body_len] = '\0';
+       sys_unlink(collected);
        sys_symlink(collected + N_ALIGN(name_len), collected);
        sys_lchown(collected, uid, gid);
        state = SkipIt;
index c5b9110..67936cd 100644 (file)
@@ -23,7 +23,7 @@ Summary: The Linux kernel (the core of the Linux operating system)
 %define rpmversion 2.6.%{sublevel}
 %define rhbsys  %([ -r /etc/beehive-root -o -n "%{?__beehive_build}" ] && echo || echo .`whoami`)
 
-%define release 1.1398_FC4.5%{?pldistro:.%{pldistro}}%{?date:.%{date}}
+%define release 1.1398_FC4.6%{?pldistro:.%{pldistro}}%{?date:.%{date}}
 
 %define signmodules 0
 %define make_target bzImage
@@ -326,17 +326,40 @@ BuildKernel() {
 
     # and now to start the build process
 
-    make -s ARCH=$Arch mrproper
-    cp configs/$Config .config
-
-    echo USING ARCH=$Arch
+    CC=gcc
+    gccversion=$(gcc -v 2>&1 | grep "gcc version" | awk '{print $3'} | awk -F . '{print $1}')
+    if [ "$gccversion" == "4" ] ; then
+       echo "Currently not compiling kernel with gcc 4.x"
+       echo "Trying to find a recent gcc 3.x based compiler"
+       CC=
+       gcc3=$(which gcc32 2>/dev/null || /bin/true)
+       [ "$gcc3" != "" ] && CC=gcc32
+       echo "gcc3 = $gcc3; CC=${CC}"
+       gcc3=$(which gcc33 2>/dev/null || /bin/true)
+       [ "$gcc3" != "" ] && CC=gcc33
+       echo "gcc3 = $gcc3; CC=${CC}"
+       gcc3=$(which gcc34 2>/dev/null || /bin/true)
+       [ "$gcc3" != "" ] && CC=gcc34
+       echo "gcc3 = $gcc3; CC=${CC}"
+       if [ -z "$CC" ]; then
+           echo "Could not find a gcc 3.x based compiler!"
+           echo "Trying to compile with gcc $gccversion anyway"
+           CC=gcc
+           #echo "Aborting kernel compilation!"
+           #exit -1
+       fi
+    fi
+    HOSTCC=${CC}
 
-    make -s ARCH=$Arch nonint_oldconfig > /dev/null
-    make -s ARCH=$Arch include/linux/version.h 
+    make -s CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch mrproper
+    cp configs/$Config .config
+    echo "USING ARCH=$Arch CC=${CC} HOSTCC=${HOSTCC}"
 
-    make -s ARCH=$Arch %{?_smp_mflags} $Target
-    make -s ARCH=$Arch %{?_smp_mflags} modules || exit 1
-    make ARCH=$Arch buildcheck
+    make -s CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch nonint_oldconfig > /dev/null
+    make -s CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch include/linux/version.h 
+    make -s CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch %{?_smp_mflags} $Target
+    make -s CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch %{?_smp_mflags} modules || exit 1
+    make CC=${CC} HOSTCC=${HOSTCC} ARCH=$Arch buildcheck
     
     # Start installing the results
 
@@ -569,9 +592,9 @@ fi
 
 # make some useful links
 pushd /boot > /dev/null ; {
-       ln -sf config-%{KVERREL} config
-       ln -sf initrd-%{KVERREL}.img initrd-boot
-       ln -sf vmlinuz-%{KVERREL} kernel-boot
+       ln -sf config-%{KVERREL}smp configsmp
+       ln -sf initrd-%{KVERREL}smp.img initrd-bootsmp
+       ln -sf vmlinuz-%{KVERREL}smp kernel-bootsmp
 }
 popd > /dev/null
 
@@ -597,6 +620,9 @@ pushd /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu} > /dev/null
 popd > /dev/null
 fi
 
+%post uml-modules
+depmod -ae %{KVERREL}uml
+
 
 %preun 
 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
@@ -610,6 +636,9 @@ fi
 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
 [ -x /sbin/new-kernel-pkg ] && /sbin/new-kernel-pkg --rmmoddep --remove %{KVERREL}xenU
 
+%preun uml-modules
+rm -f /lib/modules/%{KVERREL}uml/modules.*
+
 
 ###
 ### file lists