diff options
author | iap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk> | 2005-06-13 13:17:02 +0000 |
---|---|---|
committer | iap10@freefall.cl.cam.ac.uk <iap10@freefall.cl.cam.ac.uk> | 2005-06-13 13:17:02 +0000 |
commit | ad25d356d1d4675daaaf3cf551a5c5491a2ef7de (patch) | |
tree | e660a15b33c510fd051cdf85dd3595f185154a68 | |
parent | 6a3e7b20356fdd77466caf5e439cf8261b9fbaf2 (diff) | |
download | xen-ad25d356d1d4675daaaf3cf551a5c5491a2ef7de.tar.gz xen-ad25d356d1d4675daaaf3cf551a5c5491a2ef7de.tar.bz2 xen-ad25d356d1d4675daaaf3cf551a5c5491a2ef7de.zip |
bitkeeper revision 1.1159.258.167 (42ad874eIWwyPd8tmJO5tkGQ2JoYXQ)
Upgrade to linux patch 2.6.11.12
Signed-off-by: ian@xensource.com
-rw-r--r-- | .rootkeys | 2 | ||||
-rw-r--r-- | patches/linux-2.6.11/linux-2.6.11.12.patch (renamed from patches/linux-2.6.11/linux-2.6.11.11.patch) | 279 |
2 files changed, 278 insertions, 3 deletions
@@ -368,7 +368,7 @@ 413cb3b53nyOv1OIeDSsCXhBFDXvJA netbsd-2.0-xen-sparse/sys/nfs/files.nfs 413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.11/agpgart.patch 42372652KCUP-IOH9RN19YQmGhs4aA patches/linux-2.6.11/iomap.patch -428359d4b3fDYtazwXi4UUmSWaOUew patches/linux-2.6.11/linux-2.6.11.11.patch +428359d4b3fDYtazwXi4UUmSWaOUew patches/linux-2.6.11/linux-2.6.11.12.patch 418abc69J3F638vPO9MYoDGeYilxoQ patches/linux-2.6.11/nettel.patch 429ae875I9ZrqrRDjGD34IC2kzDREw patches/linux-2.6.11/rcu-nohz.patch 429ba3007184K-y6WHQ6KgY65-lEIQ patches/linux-2.6.11/udp-frag.patch diff --git a/patches/linux-2.6.11/linux-2.6.11.11.patch b/patches/linux-2.6.11/linux-2.6.11.12.patch index 5720fd25ec..592ea13001 100644 --- a/patches/linux-2.6.11/linux-2.6.11.11.patch +++ b/patches/linux-2.6.11/linux-2.6.11.12.patch @@ -65,7 +65,7 @@ diff --git a/Makefile b/Makefile SUBLEVEL = 11 -EXTRAVERSION = -NAME=Woozy Numbat -+EXTRAVERSION = .11 ++EXTRAVERSION = .12 +NAME=Woozy Beaver # *DOCUMENTATION* @@ -448,6 +448,19 @@ diff --git a/arch/um/kernel/sys_call_table.c b/arch/um/kernel/sys_call_table.c [ __NR_add_key ] = (syscall_handler_t *) sys_add_key, [ __NR_request_key ] = (syscall_handler_t *) sys_request_key, [ __NR_keyctl ] = (syscall_handler_t *) sys_keyctl, +diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c +--- a/arch/x86_64/kernel/apic.c ++++ b/arch/x86_64/kernel/apic.c +@@ -775,9 +775,7 @@ void __init setup_boot_APIC_clock (void) + + void __init setup_secondary_APIC_clock(void) + { +- local_irq_disable(); /* FIXME: Do we need this? --RR */ + setup_APIC_timer(calibration_result); +- local_irq_enable(); + } + + void __init disable_APIC_timer(void) diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c --- a/arch/x86_64/kernel/ptrace.c +++ b/arch/x86_64/kernel/ptrace.c @@ -481,6 +494,45 @@ diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c } put_stack_long(child, regno - sizeof(struct pt_regs), value); return 0; +@@ -247,7 +252,7 @@ asmlinkage long sys_ptrace(long request, + break; + + switch (addr) { +- case 0 ... sizeof(struct user_regs_struct): ++ case 0 ... sizeof(struct user_regs_struct) - sizeof(long): + tmp = getreg(child, addr); + break; + case offsetof(struct user, u_debugreg[0]): +@@ -292,7 +297,7 @@ asmlinkage long sys_ptrace(long request, + break; + + switch (addr) { +- case 0 ... sizeof(struct user_regs_struct): ++ case 0 ... sizeof(struct user_regs_struct) - sizeof(long): + ret = putreg(child, addr, data); + break; + /* Disallows to set a breakpoint into the vsyscall */ +diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c +--- a/arch/x86_64/kernel/smpboot.c ++++ b/arch/x86_64/kernel/smpboot.c +@@ -309,8 +309,6 @@ void __init smp_callin(void) + Dprintk("CALLIN, before setup_local_APIC().\n"); + setup_local_APIC(); + +- local_irq_enable(); +- + /* + * Get our bogomips. + */ +@@ -324,8 +322,6 @@ void __init smp_callin(void) + */ + smp_store_cpu_info(cpuid); + +- local_irq_disable(); +- + /* + * Allow the master to continue. + */ diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c --- a/arch/x86_64/mm/fault.c +++ b/arch/x86_64/mm/fault.c @@ -724,7 +776,15 @@ diff --git a/drivers/media/video/bt819.c b/drivers/media/video/bt819.c diff --git a/drivers/media/video/bttv-cards.c b/drivers/media/video/bttv-cards.c --- a/drivers/media/video/bttv-cards.c +++ b/drivers/media/video/bttv-cards.c -@@ -2718,8 +2718,6 @@ void __devinit bttv_init_card2(struct bt +@@ -1939,7 +1939,6 @@ struct tvcard bttv_tvcards[] = { + .no_tda9875 = 1, + .no_tda7432 = 1, + .tuner_type = TUNER_ABSENT, +- .no_video = 1, + .pll = PLL_28, + },{ + .name = "Teppro TEV-560/InterVision IV-560", +@@ -2718,8 +2717,6 @@ void __devinit bttv_init_card2(struct bt } btv->pll.pll_current = -1; @@ -1415,6 +1475,82 @@ diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c spin_unlock(rsv_lock); } } +diff --git a/fs/hfs/mdb.c b/fs/hfs/mdb.c +--- a/fs/hfs/mdb.c ++++ b/fs/hfs/mdb.c +@@ -333,6 +333,8 @@ void hfs_mdb_close(struct super_block *s + * Release the resources associated with the in-core MDB. */ + void hfs_mdb_put(struct super_block *sb) + { ++ if (!HFS_SB(sb)) ++ return; + /* free the B-trees */ + hfs_btree_close(HFS_SB(sb)->ext_tree); + hfs_btree_close(HFS_SB(sb)->cat_tree); +@@ -340,4 +342,7 @@ void hfs_mdb_put(struct super_block *sb) + /* free the buffers holding the primary and alternate MDBs */ + brelse(HFS_SB(sb)->mdb_bh); + brelse(HFS_SB(sb)->alt_mdb_bh); ++ ++ kfree(HFS_SB(sb)); ++ sb->s_fs_info = NULL; + } +diff --git a/fs/hfs/super.c b/fs/hfs/super.c +--- a/fs/hfs/super.c ++++ b/fs/hfs/super.c +@@ -263,7 +263,7 @@ static int hfs_fill_super(struct super_b + res = -EINVAL; + if (!parse_options((char *)data, sbi)) { + hfs_warn("hfs_fs: unable to parse mount options.\n"); +- goto bail3; ++ goto bail; + } + + sb->s_op = &hfs_super_operations; +@@ -276,7 +276,7 @@ static int hfs_fill_super(struct super_b + hfs_warn("VFS: Can't find a HFS filesystem on dev %s.\n", + hfs_mdb_name(sb)); + res = -EINVAL; +- goto bail2; ++ goto bail; + } + + /* try to get the root inode */ +@@ -306,10 +306,8 @@ bail_iput: + iput(root_inode); + bail_no_root: + hfs_warn("hfs_fs: get root inode failed.\n"); ++bail: + hfs_mdb_put(sb); +-bail2: +-bail3: +- kfree(sbi); + return res; + } + +diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c +--- a/fs/hfsplus/super.c ++++ b/fs/hfsplus/super.c +@@ -207,7 +207,9 @@ static void hfsplus_write_super(struct s + static void hfsplus_put_super(struct super_block *sb) + { + dprint(DBG_SUPER, "hfsplus_put_super\n"); +- if (!(sb->s_flags & MS_RDONLY)) { ++ if (!sb->s_fs_info) ++ return; ++ if (!(sb->s_flags & MS_RDONLY) && HFSPLUS_SB(sb).s_vhdr) { + struct hfsplus_vh *vhdr = HFSPLUS_SB(sb).s_vhdr; + + vhdr->modify_date = hfsp_now2mt(); +@@ -223,6 +225,8 @@ static void hfsplus_put_super(struct sup + iput(HFSPLUS_SB(sb).alloc_file); + iput(HFSPLUS_SB(sb).hidden_dir); + brelse(HFSPLUS_SB(sb).s_vhbh); ++ kfree(sb->s_fs_info); ++ sb->s_fs_info = NULL; + } + + static int hfsplus_statfs(struct super_block *sb, struct kstatfs *buf) diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -1534,6 +1670,21 @@ diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c SetPageError(page); kunmap(page); unlock_page(page); +diff --git a/fs/jbd/checkpoint.c b/fs/jbd/checkpoint.c +--- a/fs/jbd/checkpoint.c ++++ b/fs/jbd/checkpoint.c +@@ -339,8 +339,10 @@ int log_do_checkpoint(journal_t *journal + } + } while (jh != last_jh && !retry); + +- if (batch_count) ++ if (batch_count) { + __flush_batch(journal, bhs, &batch_count); ++ retry = 1; ++ } + + /* + * If someone cleaned up this transaction while we slept, we're diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c @@ -1921,6 +2072,36 @@ diff --git a/mm/mmap.c b/mm/mmap.c } EXPORT_SYMBOL(get_unmapped_area); +diff --git a/mm/rmap.c b/mm/rmap.c +--- a/mm/rmap.c ++++ b/mm/rmap.c +@@ -641,7 +641,7 @@ static void try_to_unmap_cluster(unsigne + pgd_t *pgd; + pud_t *pud; + pmd_t *pmd; +- pte_t *pte; ++ pte_t *pte, *original_pte; + pte_t pteval; + struct page *page; + unsigned long address; +@@ -673,7 +673,7 @@ static void try_to_unmap_cluster(unsigne + if (!pmd_present(*pmd)) + goto out_unlock; + +- for (pte = pte_offset_map(pmd, address); ++ for (original_pte = pte = pte_offset_map(pmd, address); + address < end; pte++, address += PAGE_SIZE) { + + if (!pte_present(*pte)) +@@ -710,7 +710,7 @@ static void try_to_unmap_cluster(unsigne + (*mapcount)--; + } + +- pte_unmap(pte); ++ pte_unmap(original_pte); + + out_unlock: + spin_unlock(&mm->page_table_lock); diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c --- a/net/bluetooth/af_bluetooth.c +++ b/net/bluetooth/af_bluetooth.c @@ -1951,6 +2132,42 @@ diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c return -EINVAL; #if defined(CONFIG_KMOD) +diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c +--- a/net/bridge/br_input.c ++++ b/net/bridge/br_input.c +@@ -54,6 +54,9 @@ int br_handle_frame_finish(struct sk_buf + struct net_bridge_fdb_entry *dst; + int passedup = 0; + ++ /* insert into forwarding database after filtering to avoid spoofing */ ++ br_fdb_insert(p->br, p, eth_hdr(skb)->h_source, 0); ++ + if (br->dev->flags & IFF_PROMISC) { + struct sk_buff *skb2; + +@@ -108,8 +111,7 @@ int br_handle_frame(struct net_bridge_po + if (eth_hdr(skb)->h_source[0] & 1) + goto err; + +- if (p->state == BR_STATE_LEARNING || +- p->state == BR_STATE_FORWARDING) ++ if (p->state == BR_STATE_LEARNING) + br_fdb_insert(p->br, p, eth_hdr(skb)->h_source, 0); + + if (p->br->stp_enabled && +diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c +--- a/net/bridge/br_stp_bpdu.c ++++ b/net/bridge/br_stp_bpdu.c +@@ -140,6 +140,9 @@ int br_stp_handle_bpdu(struct sk_buff *s + struct net_bridge *br = p->br; + unsigned char *buf; + ++ /* insert into forwarding database after filtering to avoid spoofing */ ++ br_fdb_insert(p->br, p, eth_hdr(skb)->h_source, 0); ++ + /* need at least the 802 and STP headers */ + if (!pskb_may_pull(skb, sizeof(header)+1) || + memcmp(skb->data, header, sizeof(header))) diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c @@ -1994,6 +2211,41 @@ diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c return v; } +diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c +--- a/net/ipv4/netfilter/ip_queue.c ++++ b/net/ipv4/netfilter/ip_queue.c +@@ -3,6 +3,7 @@ + * communicating with userspace via netlink. + * + * (C) 2000-2002 James Morris <jmorris@intercode.com.au> ++ * (C) 2003-2005 Netfilter Core Team <coreteam@netfilter.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as +@@ -14,6 +15,7 @@ + * Zander). + * 2000-08-01: Added Nick Williams' MAC support. + * 2002-06-25: Code cleanup. ++ * 2005-05-26: local_bh_{disable,enable} around nf_reinject (Harald Welte) + * + */ + #include <linux/module.h> +@@ -66,7 +68,15 @@ static DECLARE_MUTEX(ipqnl_sem); + static void + ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict) + { ++ /* TCP input path (and probably other bits) assume to be called ++ * from softirq context, not from syscall, like ipq_issue_verdict is ++ * called. TCP input path deadlocks with locks taken from timer ++ * softirq, e.g. We therefore emulate this by local_bh_disable() */ ++ ++ local_bh_disable(); + nf_reinject(entry->skb, entry->info, verdict); ++ local_bh_enable(); ++ + kfree(entry); + } + diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2141,6 +2393,29 @@ diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c err = rose_add_node(&rose_route, dev); dev_put(dev); return err; +diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c +--- a/net/sched/sch_netem.c ++++ b/net/sched/sch_netem.c +@@ -184,10 +184,15 @@ static int netem_enqueue(struct sk_buff + /* Random duplication */ + if (q->duplicate && q->duplicate >= get_crandom(&q->dup_cor)) { + struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); +- +- pr_debug("netem_enqueue: dup %p\n", skb2); +- if (skb2) +- delay_skb(sch, skb2); ++ if (skb2) { ++ struct Qdisc *rootq = sch->dev->qdisc; ++ u32 dupsave = q->duplicate; ++ ++ /* prevent duplicating a dup... */ ++ q->duplicate = 0; ++ rootq->enqueue(skb2, rootq); ++ q->duplicate = dupsave; ++ } + } + + /* If doing simple delay then gap == 0 so all packets diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c |