mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
bitkeeper revision 1.1715 (42ad87c2-sJjiHBUqeN9efUJT_3kSQ)
Merge freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-unstable.bk into freefall.cl.cam.ac.uk:/auto/groups/xeno/users/iap10/xeno-clone/xen-unstable.bk
This commit is contained in:
commit
df5e6a17c3
3 files changed
+279
-4
No files matched your search
@@ -468,7 +468,7 @@
|
||||
413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.11/agpgart.patch
|
||||
427261074Iy1MkbbqIV6zdZDWWx_Jg patches/linux-2.6.11/i386-cpu-hotplug-updated-for-mm.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
|
||||
4296fb998LGSWCcljGKbOCUv3h9uRQ patches/linux-2.6.11/net-csum.patch
|
||||
429ae875I9ZrqrRDjGD34IC2kzDREw patches/linux-2.6.11/rcu-nohz.patch
|
||||
429ba3007184K-y6WHQ6KgY65-lEIQ patches/linux-2.6.11/udp-frag.patch
|
||||
|
||||
+277
-2
@@ -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
|
||||
+1
-1
@@ -1246,7 +1246,7 @@ void free_page_type(struct pfn_info *page, unsigned int type)
|
||||
{
|
||||
gpfn = __mfn_to_gpfn(owner, page_to_pfn(page));
|
||||
ASSERT(VALID_M2P(gpfn));
|
||||
remove_shadow(owner, gpfn, type);
|
||||
remove_shadow(owner, gpfn, type & PGT_type_mask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||