ifeq ($(LINUX_VERSION),2.6.39.4)
   LINUX_KERNEL_MD5SUM:=a17c748c2070168f1e784e9605ca043d
 endif
-ifeq ($(LINUX_VERSION),3.0.3)
-  LINUX_KERNEL_MD5SUM:=6a8af5f6733b3db970197e65b3db712c
+ifeq ($(LINUX_VERSION),3.0.9)
+  LINUX_KERNEL_MD5SUM:=71992fa4dfc289a959f9ce266d08d77b
 endif
 ifeq ($(LINUX_VERSION),3.1.1)
   LINUX_KERNEL_MD5SUM:=4db653798a325f759b8cf49a1b5e6011
 
 BOARDNAME:=Broadcom BCM947xx/953xx
 FEATURES:=squashfs usb pcmcia
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 DEFAULT_PACKAGES += wpad-mini kmod-switch kmod-diag nvram
 
        depends on USB
 --- a/drivers/usb/host/ehci-hcd.c
 +++ b/drivers/usb/host/ehci-hcd.c
-@@ -1284,9 +1284,14 @@ MODULE_LICENSE ("GPL");
+@@ -1312,9 +1312,14 @@ MODULE_LICENSE ("GPL");
  #define PLATFORM_DRIVER               ehci_grlib_driver
  #endif
  
  #error "missing bus glue for ehci-hcd"
  #endif
  
-@@ -1346,10 +1351,20 @@ static int __init ehci_hcd_init(void)
+@@ -1374,10 +1379,20 @@ static int __init ehci_hcd_init(void)
        if (retval < 0)
                goto clean4;
  #endif
  clean4:
  #endif
  #ifdef OF_PLATFORM_DRIVER
-@@ -1380,6 +1395,9 @@ module_init(ehci_hcd_init);
+@@ -1408,6 +1423,9 @@ module_init(ehci_hcd_init);
  
  static void __exit ehci_hcd_cleanup(void)
  {
 
 +#endif
 --- a/drivers/usb/host/ehci-hcd.c
 +++ b/drivers/usb/host/ehci-hcd.c
-@@ -1352,17 +1352,21 @@ static int __init ehci_hcd_init(void)
+@@ -1380,17 +1380,21 @@ static int __init ehci_hcd_init(void)
                goto clean4;
  #endif
  
  #ifdef XILINX_OF_PLATFORM_DRIVER
        platform_driver_unregister(&XILINX_OF_PLATFORM_DRIVER);
  clean4:
-@@ -1395,9 +1399,11 @@ module_init(ehci_hcd_init);
+@@ -1423,9 +1427,11 @@ module_init(ehci_hcd_init);
  
  static void __exit ehci_hcd_cleanup(void)
  {
 
 --- a/fs/fuse/dev.c
 +++ b/fs/fuse/dev.c
-@@ -647,11 +647,20 @@ static int fuse_copy_fill(struct fuse_co
+@@ -651,11 +651,20 @@ static int fuse_copy_fill(struct fuse_co
        return lock_request(cs->fc, cs->req);
  }
  
 
        tw32(GRC_MODE, tp->grc_mode);
  
        if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
-@@ -7408,9 +7446,12 @@ static int tg3_halt_cpu(struct tg3 *tp,
+@@ -7403,9 +7441,12 @@ static int tg3_halt_cpu(struct tg3 *tp,
                return -ENODEV;
        }
  
        return 0;
  }
  
-@@ -7472,6 +7513,11 @@ static int tg3_load_5701_a0_firmware_fix
+@@ -7467,6 +7508,11 @@ static int tg3_load_5701_a0_firmware_fix
        const __be32 *fw_data;
        int err, i;
  
        fw_data = (void *)tp->fw->data;
  
        /* Firmware blob starts with version numbers, followed by
-@@ -7528,6 +7574,11 @@ static int tg3_load_tso_firmware(struct
+@@ -7523,6 +7569,11 @@ static int tg3_load_tso_firmware(struct
        unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
        int err, i;
  
        if (tg3_flag(tp, HW_TSO_1) ||
            tg3_flag(tp, HW_TSO_2) ||
            tg3_flag(tp, HW_TSO_3))
-@@ -8825,6 +8876,11 @@ static void tg3_timer(unsigned long __op
+@@ -8819,6 +8870,11 @@ static void tg3_timer(unsigned long __op
  
        spin_lock(&tp->lock);
  
        if (!tg3_flag(tp, TAGGED_STATUS)) {
                /* All of this garbage is because when using non-tagged
                 * IRQ status the mailbox/status_block protocol the chip
-@@ -10448,6 +10504,11 @@ static int tg3_test_nvram(struct tg3 *tp
+@@ -10446,6 +10502,11 @@ static int tg3_test_nvram(struct tg3 *tp
        if (tg3_flag(tp, NO_NVRAM))
                return 0;
  
        if (tg3_nvram_read(tp, 0, &magic) != 0)
                return -EIO;
  
-@@ -11442,7 +11503,7 @@ static int tg3_ioctl(struct net_device *
+@@ -11440,7 +11501,7 @@ static int tg3_ioctl(struct net_device *
                        return -EAGAIN;
  
                spin_lock_bh(&tp->lock);
                spin_unlock_bh(&tp->lock);
  
                data->val_out = mii_regval;
-@@ -11458,7 +11519,7 @@ static int tg3_ioctl(struct net_device *
+@@ -11456,7 +11517,7 @@ static int tg3_ioctl(struct net_device *
                        return -EAGAIN;
  
                spin_lock_bh(&tp->lock);
                spin_unlock_bh(&tp->lock);
  
                return err;
-@@ -12188,6 +12249,13 @@ static void __devinit tg3_get_5720_nvram
+@@ -12186,6 +12247,13 @@ static void __devinit tg3_get_5720_nvram
  /* Chips other than 5700/5701 use the NVRAM for fetching info. */
  static void __devinit tg3_nvram_init(struct tg3 *tp)
  {
        tw32_f(GRC_EEPROM_ADDR,
             (EEPROM_ADDR_FSM_RESET |
              (EEPROM_DEFAULT_CLOCK_PERIOD <<
-@@ -12454,6 +12522,9 @@ static int tg3_nvram_write_block(struct
+@@ -12452,6 +12520,9 @@ static int tg3_nvram_write_block(struct
  {
        int ret;
  
 
 +MODULE_ALIAS("platform:bcm63xx_ehci");
 --- a/drivers/usb/host/ehci-hcd.c
 +++ b/drivers/usb/host/ehci-hcd.c
-@@ -1284,6 +1284,11 @@ MODULE_LICENSE ("GPL");
+@@ -1312,6 +1312,11 @@ MODULE_LICENSE ("GPL");
  #define PLATFORM_DRIVER               ehci_grlib_driver
  #endif
  
 
                               struct pipe_inode_info *opipe,
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
-@@ -1494,6 +1494,23 @@ void drop_collected_mounts(struct vfsmou
+@@ -1495,6 +1495,23 @@ void drop_collected_mounts(struct vfsmou
        release_mounts(&umount_list);
  }
  
 
                    &ehci->regs->intr_enable); /* Turn On Interrupts */
 --- a/drivers/usb/host/ehci-hub.c
 +++ b/drivers/usb/host/ehci-hub.c
-@@ -656,7 +656,7 @@ ehci_hub_status_data (struct usb_hcd *hc
+@@ -655,7 +655,7 @@ ehci_hub_status_data (struct usb_hcd *hc
         * always set, seem to clear PORT_OCC and PORT_CSC when writing to
         * PORT_POWER; that's surprising, but maybe within-spec.
         */
                mask = PORT_CSC | PORT_PEC | PORT_OCC;
        else
                mask = PORT_CSC | PORT_PEC;
-@@ -881,7 +881,7 @@ static int ehci_hub_control (
+@@ -880,7 +880,7 @@ static int ehci_hub_control (
                if (temp & PORT_PEC)
                        status |= USB_PORT_STAT_C_ENABLE << 16;
  
                        /*
 --- a/drivers/usb/host/ehci.h
 +++ b/drivers/usb/host/ehci.h
-@@ -137,6 +137,7 @@ struct ehci_hcd {                  /* one per controlle
-       unsigned                fs_i_thresh:1;  /* Intel iso scheduling */
+@@ -138,6 +138,7 @@ struct ehci_hcd {                  /* one per controlle
        unsigned                use_dummy_qh:1; /* AMD Frame List table quirk*/
        unsigned                has_synopsys_hc_bug:1; /* Synopsys HC */
+       unsigned                frame_index_bug:1; /* MosChip (AKA NetMos) */
 +      unsigned                ignore_oc:1;
  
        /* required for usb32 quirk */
 
  
 --- a/drivers/mtd/mtdchar.c
 +++ b/drivers/mtd/mtdchar.c
-@@ -948,6 +948,12 @@ static int mtd_ioctl(struct file *file,
+@@ -949,6 +949,12 @@ static int mtd_ioctl(struct file *file,
                break;
        }
  
 
        if (!net_eq(dev_net(dev), sock_net(sk)))
                goto drop;
  
-@@ -687,12 +690,12 @@ static int tpacket_rcv(struct sk_buff *s
+@@ -690,12 +693,12 @@ static int tpacket_rcv(struct sk_buff *s
        struct timespec ts;
        struct skb_shared_hwtstamps *shhwtstamps = skb_hwtstamps(skb);
  
        if (!net_eq(dev_net(dev), sock_net(sk)))
                goto drop;
  
-@@ -1529,6 +1532,7 @@ static int packet_create(struct net *net
+@@ -1532,6 +1535,7 @@ static int packet_create(struct net *net
        spin_lock_init(&po->bind_lock);
        mutex_init(&po->pg_vec_lock);
        po->prot_hook.func = packet_rcv;
  
        if (sock->type == SOCK_PACKET)
                po->prot_hook.func = packet_rcv_spkt;
-@@ -2102,6 +2106,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -2105,6 +2109,16 @@ packet_setsockopt(struct socket *sock, i
                po->tp_tstamp = val;
                return 0;
        }
        default:
                return -ENOPROTOOPT;
        }
-@@ -2159,6 +2173,13 @@ static int packet_getsockopt(struct sock
+@@ -2162,6 +2176,13 @@ static int packet_getsockopt(struct sock
  
                data = &val;
                break;
 
  static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask)
  {
        u16 cmd;
-@@ -869,3 +871,5 @@ static void __devinit quirk_usb_early_ha
+@@ -883,3 +885,5 @@ static void __devinit quirk_usb_early_ha
                quirk_usb_handoff_xhci(pdev);
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff);
 
  {
 --- a/kernel/sched.c
 +++ b/kernel/sched.c
-@@ -4937,6 +4937,7 @@ int can_nice(const struct task_struct *p
+@@ -4923,6 +4923,7 @@ int can_nice(const struct task_struct *p
        return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
                capable(CAP_SYS_NICE));
  }
  
  int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
  {
-@@ -1361,6 +1362,7 @@ struct vm_struct *get_vm_area(unsigned l
+@@ -1383,6 +1384,7 @@ struct vm_struct *get_vm_area(unsigned l
        return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END,
                                -1, GFP_KERNEL, __builtin_return_address(0));
  }
                                void *caller)
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -871,6 +871,7 @@ extern bool skip_free_areas_node(unsigne
+@@ -870,6 +870,7 @@ extern bool skip_free_areas_node(unsigne
  
  int shmem_lock(struct file *file, int lock, struct user_struct *user);
  struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
 
 INITRAMFS_EXTRA_FILES:=
 MAINTAINER:=Florian Fainelli <florian@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
  arch/mips/pmc-sierra/msp71xx/msp_setup.c |    8 ++---
  4 files changed, 56 insertions(+), 24 deletions(-)
 
-diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h
-index 9e09af3..48b03ff 100644
 --- a/arch/mips/include/asm/smp-ops.h
 +++ b/arch/mips/include/asm/smp-ops.h
-@@ -56,8 +56,43 @@ static inline void register_smp_ops(struct plat_smp_ops *ops)
+@@ -56,8 +56,43 @@ static inline void register_smp_ops(stru
  
  #endif /* !CONFIG_SMP */
  
 +}
  
  #endif /* __ASM_SMP_OPS_H */
-diff --git a/arch/mips/mipssim/sim_setup.c b/arch/mips/mipssim/sim_setup.c
-index 55f22a3..1970069 100644
 --- a/arch/mips/mipssim/sim_setup.c
 +++ b/arch/mips/mipssim/sim_setup.c
 @@ -59,18 +59,17 @@ void __init prom_init(void)
  }
  
  static void __init serial_init(void)
-diff --git a/arch/mips/mti-malta/malta-init.c b/arch/mips/mti-malta/malta-init.c
-index 31180c3..4b988b9 100644
 --- a/arch/mips/mti-malta/malta-init.c
 +++ b/arch/mips/mti-malta/malta-init.c
 @@ -28,6 +28,7 @@
  #ifdef CONFIG_MIPS_MT_SMTC
        register_smp_ops(&msmtc_smp_ops);
  #endif
-diff --git a/arch/mips/pmc-sierra/msp71xx/msp_setup.c b/arch/mips/pmc-sierra/msp71xx/msp_setup.c
-index 2413ea6..0abfbe0 100644
 --- a/arch/mips/pmc-sierra/msp71xx/msp_setup.c
 +++ b/arch/mips/pmc-sierra/msp71xx/msp_setup.c
 @@ -228,13 +228,11 @@ void __init prom_init(void)
  
  #ifdef CONFIG_PMCTWILED
        /*
--- 
-1.7.3.4
-
 
 CFLAGS=-Os -pipe -march=armv5te -mtune=xscale -fno-caller-saves
 MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
 CFLAGS:=-Os -pipe -fno-caller-saves -mcpu=405
 MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
 CFLAGS:=-Os -pipe -fno-caller-saves -mcpu=440
 MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
 CFLAGS:=-Os -pipe -march=armv6k -mtune=mpcore -mfloat-abi=softfp -mfpu=vfp -fno-caller-saves
 MAINTAINER:=Florian Fainelli <florian@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
 FEATURES:=ext4 audio
 MAINTAINER:=Florian Fainelli <florian@openwrt.org>
 
-LINUX_VERSION:=3.0.3
+LINUX_VERSION:=3.0.9
 
 include $(INCLUDE_DIR)/target.mk
 
 
-diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c
-index 05f5ea8..9e71e7e 100644
 --- a/arch/um/os-Linux/user_syms.c
 +++ b/arch/um/os-Linux/user_syms.c
-@@ -18,6 +18,9 @@ extern void *memmove(void *, const void *, size_t);
+@@ -18,6 +18,9 @@ extern void *memmove(void *, const void
  extern void *memset(void *, int, size_t);
  extern int printf(const char *, ...);
  
 
 
 --- a/lib/Kconfig
 +++ b/lib/Kconfig
-@@ -98,7 +98,7 @@ config ZLIB_INFLATE
+@@ -91,7 +91,7 @@ config ZLIB_INFLATE
        tristate
  
  config ZLIB_DEFLATE