rpms/kernel/devel xen-build-with-O2.patch, 1.1.6.1, 1.1.6.2 xen-fix_huge_timeouts.patch, 1.1.8.1, 1.1.8.2 xen-ia64-hv.patch, 1.1.4.1, 1.1.4.2 Config.mk, 1.3.8.1, 1.3.8.2 kernel-2.6.spec, 1.2519.4.1, 1.2519.4.2 linux-2.6-cell-mambo-drivers.patch, 1.4.16.1, 1.4.16.2 linux-2.6-compile-fixes.patch, 1.97.6.1, 1.97.6.2 linux-2.6-gfs2-dlm.patch, 1.12.4.1, 1.12.4.2 linux-2.6-gfs2-locking-exports.patch, 1.1.10.1, 1.1.10.2 linux-2.6-lockdep-fixes.patch, 1.16.4.1, 1.16.4.2 linux-2.6-utrace.patch, 1.12.4.1, 1.12.4.2 linux-2.6-xen.patch, 1.49.4.1, 1.49.4.2 sources, 1.468.4.1, 1.468.4.2 linux-2.6-xen-unbreak-oprofile.patch, 1.1.2.1, NONE
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Wed Aug 16 20:43:09 UTC 2006
Author: dzickus
Update of /cvs/dist/rpms/kernel/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv30955
Modified Files:
Tag: kernel-2_6_17-1_2519_el5_beta1
Config.mk kernel-2.6.spec linux-2.6-cell-mambo-drivers.patch
linux-2.6-compile-fixes.patch linux-2.6-gfs2-dlm.patch
linux-2.6-gfs2-locking-exports.patch
linux-2.6-lockdep-fixes.patch linux-2.6-utrace.patch
linux-2.6-xen.patch sources
Added Files:
Tag: kernel-2_6_17-1_2519_el5_beta1
xen-build-with-O2.patch xen-fix_huge_timeouts.patch
xen-ia64-hv.patch
Removed Files:
Tag: kernel-2_6_17-1_2519_el5_beta1
linux-2.6-xen-unbreak-oprofile.patch
Log Message:
straightening out what can and what can not go into an updated beta build
xen-build-with-O2.patch:
Rules.mk | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
Index: xen-build-with-O2.patch
===================================================================
RCS file: xen-build-with-O2.patch
diff -N xen-build-with-O2.patch
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ xen-build-with-O2.patch 16 Aug 2006 20:43:06 -0000 1.1.6.2
@@ -0,0 +1,17 @@
+Always build the hypervisor with -O2. This reduces stack consumption
+significantly and seems to stop the stack overflows that made Xen crash
+frequently in some configurations.
+
+Signed-off-by: Rik van Riel <riel at redhat.com>
+
+--- xen/Rules.mk.noop 2006-07-26 17:44:02.000000000 -0400
++++ xen/Rules.mk 2006-07-26 17:44:16.000000000 -0400
+@@ -52,7 +52,7 @@
+ ALL_OBJS-$(ACM_SECURITY) += $(BASEDIR)/acm/built_in.o
+ ALL_OBJS-y += $(BASEDIR)/arch/$(TARGET_ARCH)/built_in.o
+
+-CFLAGS-y += -g -D__XEN__
++CFLAGS-y += -g -D__XEN__ -O2
+ CFLAGS-$(ACM_SECURITY) += -DACM_SECURITY
+ CFLAGS-$(verbose) += -DVERBOSE
+ CFLAGS-$(crash_debug) += -DCRASH_DEBUG
xen-fix_huge_timeouts.patch:
schedule.c | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
Index: xen-fix_huge_timeouts.patch
===================================================================
RCS file: xen-fix_huge_timeouts.patch
diff -N xen-fix_huge_timeouts.patch
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ xen-fix_huge_timeouts.patch 16 Aug 2006 20:43:06 -0000 1.1.8.2
@@ -0,0 +1,12 @@
+diff -ur xen-10712/common/schedule.c xen/common/schedule.c
+--- xen-10712/common/schedule.c 2006-07-15 16:59:55.000000000 +0200
++++ xen/common/schedule.c 2006-07-25 15:56:24.000000000 +0200
+@@ -409,7 +409,7 @@
+ DPRINTK("Warning: huge timeout set by domain %d (vcpu %d):"
+ " %"PRIx64"\n",
+ v->domain->domain_id, v->vcpu_id, (uint64_t)timeout);
+- send_timer_event(v);
++// send_timer_event(v);
+ }
+ else
+ {
xen-ia64-hv.patch:
arch/ia64/linux-xen/iosapic.c | 8 +++-
arch/ia64/xen/domain.c | 70 +++++++++++++++++++++++++++++++-----------
arch/ia64/xen/vcpu.c | 2 -
arch/ia64/xen/vhpt.c | 20 ++++++------
arch/ia64/xen/xensetup.c | 2 -
include/asm-ia64/domain.h | 10 ++++++
include/asm-ia64/tlbflush.h | 2 -
include/asm-ia64/vhpt.h | 1
8 files changed, 84 insertions(+), 31 deletions(-)
Index: xen-ia64-hv.patch
===================================================================
RCS file: xen-ia64-hv.patch
diff -N xen-ia64-hv.patch
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ xen-ia64-hv.patch 16 Aug 2006 20:43:06 -0000 1.1.4.2
@@ -0,0 +1,306 @@
+diff -urNp xen/arch/ia64/linux-xen/iosapic.c xen/arch/ia64/linux-xen/iosapic.c
+--- xen/arch/ia64/linux-xen/iosapic.c 2006-08-01 19:40:39.000000000 -0400
++++ xen/arch/ia64/linux-xen/iosapic.c 2006-08-01 19:41:31.000000000 -0400
+@@ -1155,7 +1155,7 @@ int iosapic_guest_read(unsigned long phy
+
+ int iosapic_guest_write(unsigned long physbase, unsigned int reg, u32 val)
+ {
+- unsigned int id, gsi, vec, dest, high32;
++ unsigned int id, gsi, vec, xen_vec, dest, high32;
+ char rte_index;
+ struct iosapic *ios;
+ struct iosapic_intr_info *info;
+@@ -1185,13 +1185,17 @@ int iosapic_guest_write(unsigned long ph
+
+ /* Sanity check. Vector should be allocated before this update */
+ if ((rte_index > ios->num_rte) ||
+- test_bit(vec, ia64_xen_vector) ||
+ ((vec > IA64_FIRST_DEVICE_VECTOR) &&
+ (vec < IA64_LAST_DEVICE_VECTOR) &&
+ (!test_bit(vec - IA64_FIRST_DEVICE_VECTOR, ia64_vector_mask))))
+ return -EINVAL;
+
+ gsi = ios->gsi_base + rte_index;
++ xen_vec = gsi_to_vector(gsi);
++ if (xen_vec >= 0 && test_bit(xen_vec, ia64_xen_vector)) {
++ printk("WARN: GSI %d in use by Xen.\n", gsi);
++ return -EINVAL;
++ }
+ info = &iosapic_intr_info[vec];
+ spin_lock_irqsave(&irq_descp(vec)->lock, flags);
+ spin_lock(&iosapic_lock);
+diff -urNp xen/arch/ia64/xen/domain.c xen/arch/ia64/xen/domain.c
+--- xen/arch/ia64/xen/domain.c 2006-08-01 19:37:05.000000000 -0400
++++ xen/arch/ia64/xen/domain.c 2006-08-01 19:50:54.000000000 -0400
+@@ -93,6 +93,29 @@ DEFINE_PER_CPU(int *, current_psr_ic_add
+
+ #include <xen/sched-if.h>
+
++static void flush_vtlb_for_context_switch(struct vcpu* vcpu)
++{
++ int last_vcpu_id =
++ vcpu->domain->arch.last_vcpu[smp_processor_id()].vcpu_id;
++
++ if (is_idle_domain(vcpu->domain) || last_vcpu_id == vcpu->vcpu_id)
++ return;
++ vcpu->domain->arch.last_vcpu[smp_processor_id()].vcpu_id =
++ vcpu->vcpu_id;
++ if (last_vcpu_id == INVALID_VCPU_ID)
++ return;
++
++ // if the vTLB implementation was changed,
++ // the followings must be updated either.
++ if (VMX_DOMAIN(vcpu)) {
++ // currently vTLB for vt-i domian is per vcpu.
++ // so any flushing isn't needed.
++ } else {
++ vhpt_flush();
++ }
++ local_flush_tlb_all();
++}
++
+ void schedule_tail(struct vcpu *prev)
+ {
+ extern char ia64_ivt;
+@@ -111,6 +134,7 @@ void schedule_tail(struct vcpu *prev)
+ __ia64_per_cpu_var(current_psr_ic_addr) = (int *)
+ (current->domain->arch.shared_info_va + XSI_PSR_IC_OFS);
+ }
++ flush_vtlb_for_context_switch(current);
+ }
+
+ void context_switch(struct vcpu *prev, struct vcpu *next)
+@@ -176,6 +200,7 @@ if (!i--) { i = 1000000; printk("+"); }
+ __ia64_per_cpu_var(current_psr_ic_addr) = NULL;
+ }
+ }
++ flush_vtlb_for_context_switch(current);
+ local_irq_restore(spsr);
+ context_saved(prev);
+ }
+@@ -310,9 +335,14 @@ static void init_switch_stack(struct vcp
+
+ int arch_domain_create(struct domain *d)
+ {
++ int i;
++
+ // the following will eventually need to be negotiated dynamically
+ d->arch.shared_info_va = DEFAULT_SHAREDINFO_ADDR;
+ d->arch.breakimm = 0x1000;
++ for (i = 0; i < NR_CPUS; i++) {
++ d->arch.last_vcpu[i].vcpu_id = INVALID_VCPU_ID;
++ }
+
+ if (is_idle_domain(d))
+ return 0;
+diff -urNp xen/arch/ia64/xen/vhpt.c xen/arch/ia64/xen/vhpt.c
+--- xen/arch/ia64/xen/vhpt.c 2006-08-01 19:37:05.000000000 -0400
++++ xen/arch/ia64/xen/vhpt.c 2006-08-01 19:50:54.000000000 -0400
+@@ -23,7 +23,7 @@ extern long running_on_sim;
+ DEFINE_PER_CPU (unsigned long, vhpt_paddr);
+ DEFINE_PER_CPU (unsigned long, vhpt_pend);
+
+-static void vhpt_flush(void)
++void vhpt_flush(void)
+ {
+ struct vhpt_lf_entry *v = __va(__ia64_per_cpu_var(vhpt_paddr));
+ int i;
+diff -urNp xen/include/asm-ia64/domain.h xen/include/asm-ia64/domain.h
+--- xen/include/asm-ia64/domain.h 2006-08-01 19:37:05.000000000 -0400
++++ xen/include/asm-ia64/domain.h 2006-08-01 19:50:54.000000000 -0400
+@@ -58,6 +58,11 @@ struct mm_struct {
+ // atomic_t mm_users; /* How many users with user space? */
+ };
+
++struct last_vcpu {
++#define INVALID_VCPU_ID INT_MAX
++ int vcpu_id;
++} ____cacheline_aligned_in_smp;
++
+ struct arch_domain {
+ struct mm_struct mm;
+ unsigned long metaphysical_rr0;
+@@ -101,6 +106,8 @@ struct arch_domain {
+ void *efi_runtime;
+ /* Metaphysical address to fpswa_interface_t in domain firmware memory is set. */
+ void *fpswa_inf;
++
++ struct last_vcpu last_vcpu[NR_CPUS];
+ };
+ #define INT_ENABLE_OFFSET(v) \
+ (sizeof(vcpu_info_t) * (v)->vcpu_id + \
+diff -urNp xen/include/asm-ia64/vhpt.h xen/include/asm-ia64/vhpt.h
+--- xen/include/asm-ia64/vhpt.h 2006-08-01 19:37:05.000000000 -0400
++++ xen/include/asm-ia64/vhpt.h 2006-08-01 19:50:54.000000000 -0400
+@@ -40,6 +40,7 @@ extern void vhpt_multiple_insert(unsigne
+ unsigned long logps);
+ extern void vhpt_insert (unsigned long vadr, unsigned long pte,
+ unsigned long logps);
++void vhpt_flush(void);
+
+ /* Currently the VHPT is allocated per CPU. */
+ DECLARE_PER_CPU (unsigned long, vhpt_paddr);
+diff -urNp xen/arch/ia64/xen/domain.c xen/arch/ia64/xen/domain.c
+--- xen/arch/ia64/xen/domain.c 2006-08-01 19:50:54.000000000 -0400
++++ xen/arch/ia64/xen/domain.c 2006-08-01 19:52:11.000000000 -0400
+@@ -95,25 +95,32 @@ DEFINE_PER_CPU(int *, current_psr_ic_add
+
+ static void flush_vtlb_for_context_switch(struct vcpu* vcpu)
+ {
+- int last_vcpu_id =
+- vcpu->domain->arch.last_vcpu[smp_processor_id()].vcpu_id;
++ int cpu = smp_processor_id();
++ int last_vcpu_id = vcpu->domain->arch.last_vcpu[cpu].vcpu_id;
++ int last_processor = vcpu->arch.last_processor;
+
+- if (is_idle_domain(vcpu->domain) || last_vcpu_id == vcpu->vcpu_id)
+- return;
+- vcpu->domain->arch.last_vcpu[smp_processor_id()].vcpu_id =
+- vcpu->vcpu_id;
+- if (last_vcpu_id == INVALID_VCPU_ID)
++ if (is_idle_domain(vcpu->domain))
+ return;
++
++ vcpu->domain->arch.last_vcpu[cpu].vcpu_id = vcpu->vcpu_id;
++ vcpu->arch.last_processor = cpu;
+
+- // if the vTLB implementation was changed,
+- // the followings must be updated either.
+- if (VMX_DOMAIN(vcpu)) {
+- // currently vTLB for vt-i domian is per vcpu.
+- // so any flushing isn't needed.
+- } else {
+- vhpt_flush();
++ if ((last_vcpu_id != vcpu->vcpu_id &&
++ last_vcpu_id != INVALID_VCPU_ID) ||
++ (last_vcpu_id == vcpu->vcpu_id &&
++ last_processor != cpu &&
++ last_processor != INVALID_PROCESSOR)) {
++
++ // if the vTLB implementation was changed,
++ // the followings must be updated either.
++ if (VMX_DOMAIN(vcpu)) {
++ // currently vTLB for vt-i domian is per vcpu.
++ // so any flushing isn't needed.
++ } else {
++ vhpt_flush();
++ }
++ local_flush_tlb_all();
+ }
+- local_flush_tlb_all();
+ }
+
+ void schedule_tail(struct vcpu *prev)
+@@ -299,6 +306,7 @@ struct vcpu *alloc_vcpu_struct(struct do
+ v->arch.starting_rid = d->arch.starting_rid;
+ v->arch.ending_rid = d->arch.ending_rid;
+ v->arch.breakimm = d->arch.breakimm;
++ v->arch.last_processor = INVALID_PROCESSOR;
+ }
+
+ return v;
+diff -urNp xen/include/asm-ia64/domain.h xen/include/asm-ia64/domain.h
+--- xen/include/asm-ia64/domain.h 2006-08-01 19:50:54.000000000 -0400
++++ xen/include/asm-ia64/domain.h 2006-08-01 19:52:11.000000000 -0400
+@@ -156,6 +156,9 @@ struct arch_vcpu {
+ int mode_flags;
+ fpswa_ret_t fpswa_ret; /* save return values of FPSWA emulation */
+ struct arch_vmx_struct arch_vmx; /* Virtual Machine Extensions */
++
++#define INVALID_PROCESSOR INT_MAX
++ int last_processor;
+ };
+
+ #include <asm/uaccess.h> /* for KERNEL_DS */
+diff -urNp xen/arch/ia64/xen/vcpu.c xen/arch/ia64/xen/vcpu.c
+--- xen/arch/ia64/xen/vcpu.c 2006-08-01 19:51:43.000000000 -0400
++++ xen/arch/ia64/xen/vcpu.c 2006-08-01 19:54:36.000000000 -0400
+@@ -2096,7 +2096,7 @@ IA64FAULT vcpu_ptc_e(VCPU *vcpu, UINT64
+ // architected loop to purge the entire TLB, should use
+ // base = stride1 = stride2 = 0, count0 = count 1 = 1
+
+- vcpu_flush_vtlb_all ();
++ vcpu_flush_vtlb_all(current);
+
+ return IA64_NO_FAULT;
+ }
+diff -urNp xen/arch/ia64/xen/vhpt.c xen/arch/ia64/xen/vhpt.c
+--- xen/arch/ia64/xen/vhpt.c 2006-08-01 19:51:43.000000000 -0400
++++ xen/arch/ia64/xen/vhpt.c 2006-08-01 19:54:36.000000000 -0400
+@@ -129,10 +129,8 @@ void vhpt_init(void)
+ }
+
+
+-void vcpu_flush_vtlb_all (void)
++void vcpu_flush_vtlb_all(struct vcpu *v)
+ {
+- struct vcpu *v = current;
+-
+ /* First VCPU tlb. */
+ vcpu_purge_tr_entry(&PSCBX(v,dtlb));
+ vcpu_purge_tr_entry(&PSCBX(v,itlb));
+@@ -148,6 +146,11 @@ void vcpu_flush_vtlb_all (void)
+ check this. */
+ }
+
++static void __vcpu_flush_vtlb_all(void *vcpu)
++{
++ vcpu_flush_vtlb_all((struct vcpu*)vcpu);
++}
++
+ void domain_flush_vtlb_all (void)
+ {
+ int cpu = smp_processor_id ();
+@@ -158,12 +161,11 @@ void domain_flush_vtlb_all (void)
+ continue;
+
+ if (v->processor == cpu)
+- vcpu_flush_vtlb_all ();
++ vcpu_flush_vtlb_all(v);
+ else
+- smp_call_function_single
+- (v->processor,
+- (void(*)(void *))vcpu_flush_vtlb_all,
+- NULL,1,1);
++ smp_call_function_single(v->processor,
++ __vcpu_flush_vtlb_all,
++ v, 1, 1);
+ }
+ }
+
+diff -urNp xen/include/asm-ia64/tlbflush.h xen/include/asm-ia64/tlbflush.h
+--- xen/include/asm-ia64/tlbflush.h 2006-08-01 19:51:43.000000000 -0400
++++ xen/include/asm-ia64/tlbflush.h 2006-08-01 19:54:36.000000000 -0400
+@@ -11,7 +11,7 @@
+ */
+
+ /* Local all flush of vTLB. */
+-void vcpu_flush_vtlb_all (void);
++void vcpu_flush_vtlb_all(struct vcpu *v);
+
+ /* Local range flush of machine TLB only (not full VCPU virtual TLB!!!) */
+ void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range);
+diff -urNp xen/arch/ia64/xen/domain.c xen/arch/ia64/xen/domain.c
+--- xen/arch/ia64/xen/domain.c 2006-08-01 19:53:55.000000000 -0400
++++ xen/arch/ia64/xen/domain.c 2006-08-01 19:57:18.000000000 -0400
+@@ -934,8 +934,6 @@ int construct_dom0(struct domain *d,
+ sprintf(si->magic, "xen-%i.%i-ia64", XEN_VERSION, XEN_SUBVERSION);
+ si->nr_pages = max_pages;
+
+- console_endboot();
+-
+ printk("Dom0: 0x%lx\n", (u64)dom0);
+
+ #ifdef VALIDATE_VT
+diff -urNp xen/arch/ia64/xen/xensetup.c xen/arch/ia64/xen/xensetup.c
+--- xen/arch/ia64/xen/xensetup.c 2006-08-02 11:49:15.000000000 -0400
++++ xen/arch/ia64/xen/xensetup.c 2006-08-02 13:51:21.000000000 -0400
+@@ -65,7 +65,7 @@ integer_param("maxcpus", max_cpus);
+ /* xencons: if true enable xenconsole input (and irq).
+ Note: you have to disable 8250 serials in domains (to avoid use of the
+ same resource). */
+-static int opt_xencons = 0;
++static int opt_xencons = 1;
+ boolean_param("xencons", opt_xencons);
+
+ /* Toggle to allow non-legacy xencons UARTs to run in polling mode */
Index: Config.mk
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/Config.mk,v
retrieving revision 1.3.8.1
retrieving revision 1.3.8.2
diff -u -r1.3.8.1 -r1.3.8.2
--- Config.mk 11 Aug 2006 19:11:00 -0000 1.3.8.1
+++ Config.mk 16 Aug 2006 20:42:08 -0000 1.3.8.2
@@ -36,7 +36,7 @@
CFLAGS ?= -O2 -fomit-frame-pointer
CFLAGS += -DNDEBUG
else
-CFLAGS += -O2 -g
+CFLAGS += -g
endif
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/kernel-2.6.spec,v
retrieving revision 1.2519.4.1
retrieving revision 1.2519.4.2
diff -u -r1.2519.4.1 -r1.2519.4.2
--- kernel-2.6.spec 11 Aug 2006 19:01:59 -0000 1.2519.4.1
+++ kernel-2.6.spec 16 Aug 2006 20:42:09 -0000 1.2519.4.2
@@ -33,7 +33,7 @@
%define rpmversion 2.6.%{sublevel}
%define release %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})%{?dist}
%define signmodules 0
-%define xen_hv_cset 10924
+%define xen_hv_cset 10730
%define make_target bzImage
%define kernel_image x86
%define xen_flags debug=y verbose=y crash_debug=y
@@ -323,7 +323,7 @@
Patch954: linux-2.6-xen-execshield.patch
Patch955: linux-2.6-xen-tux.patch
Patch956: linux-2.6-xen-execshield-lazy-exec-limit.patch
-Patch957: linux-2.6-xen-unbreak-oprofile.patch
+
Patch990: linux-2.6-xen-compile-fixes.patch
@@ -448,6 +448,8 @@
Patch10001: linux-2.6-random-patches.patch
# Xen hypervisor patches
+Patch20000: xen-build-with-O2.patch
+Patch20001: xen-ia64-hv.patch
# END OF PATCH DEFINITIONS
@@ -702,6 +704,8 @@
cd xen
# Any necessary hypervisor patches go here
+%patch20000 -p1
+%patch20001 -p1
cd ..
@@ -813,7 +817,6 @@
%patch954 -p1
%patch955 -p1
%patch956 -p1
-%patch957 -p1
#%patch990 -p1
@@ -1694,6 +1697,13 @@
%endif
%changelog
+* Wed Aug 16 2006 Don Zickus <dzickus at redhat.com>
+- un-backport some patches that weren't beta-blockers
+- updating beta blockers
+- added #202466
+- added #200591
+- added #202464
+
* Thu Aug 3 2006 Dave Jones <davej at redhat.com>
- 2.6.18rc3-git3
linux-2.6-cell-mambo-drivers.patch:
arch/powerpc/Kconfig | 21 ++
b/drivers/block/mambo_bd.c | 285 +++++++++++++++++++++++++++
b/drivers/net/mambonet.c | 392 ++++++++++++++++++++++++++++++++++++++
b/include/asm-powerpc/systemsim.h | 130 ++++++++++++
drivers/block/Makefile | 1
drivers/net/Makefile | 1
include/asm-powerpc/processor.h | 17 +
include/linux/root_dev.h | 3
8 files changed, 850 insertions(+)
Index: linux-2.6-cell-mambo-drivers.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-cell-mambo-drivers.patch,v
retrieving revision 1.4.16.1
retrieving revision 1.4.16.2
diff -u -r1.4.16.1 -r1.4.16.2
--- linux-2.6-cell-mambo-drivers.patch 11 Aug 2006 19:11:00 -0000 1.4.16.1
+++ linux-2.6-cell-mambo-drivers.patch 16 Aug 2006 20:42:24 -0000 1.4.16.2
@@ -338,7 +338,7 @@
obj-$(CONFIG_ZNET) += znet.o
--- /dev/null
+++ b/drivers/net/mambonet.c
-@@ -0,0 +1,391 @@
+@@ -0,0 +1,392 @@
+/*
+ * Bogus Network Driver for PowerPC Full System Simulator
+ *
@@ -398,6 +398,7 @@
+#include <linux/if_arp.h> /* For ARPHRD_ETHER */
+#include <linux/workqueue.h>
+#include <asm/prom.h>
++#include <linux/version.h>
+#include <asm/systemsim.h>
+
+#define MAMBO_BOGUS_NET_PROBE 119
linux-2.6-compile-fixes.patch:
arch/ia64/kernel/ia64_ksyms.c | 2 +-
arch/ia64/lib/Makefile | 2 +-
linux-2.6.17.noarch/Makefile | 4 ----
linux-2.6.17.noarch/arch/ia64/kernel/ia64_ksyms.c | 1 +
4 files changed, 3 insertions(+), 6 deletions(-)
Index: linux-2.6-compile-fixes.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-compile-fixes.patch,v
retrieving revision 1.97.6.1
retrieving revision 1.97.6.2
diff -u -r1.97.6.1 -r1.97.6.2
--- linux-2.6-compile-fixes.patch 11 Aug 2006 19:11:00 -0000 1.97.6.1
+++ linux-2.6-compile-fixes.patch 16 Aug 2006 20:42:24 -0000 1.97.6.2
@@ -22,4 +22,45 @@
#define __KERNEL_SYSCALLS__
#include <asm/unistd.h>
+Date: Mon, 31 Jul 2006 09:17:01 -0400
+From: Prarit Bhargava <prarit at redhat.com>
+Subject: [RHEL5/Fedora]: BZ 196903 Fix ia64 compile
+
+CONFIG_MD_RAID5 became CONFIG_MD_RAID456 in drivers/md/Kconfig. Make the
+same
+change in arch/ia64
+
+Signed-off-by: Prarit Bhargava <prarit at redhat.com>
+Signed-off-by: Aron Griffis <aron at hp.com>
+
+
+
+CONFIG_MD_RAID5 became CONFIG_MD_RAID456 in drivers/md/Kconfig. Make the same
+change in arch/ia64
+
+Signed-off-by: Prarit Bhargava <prarit at redhat.com>
+Signed-off-by: Aron Griffis <aron at hp.com>
+
+--- linux-2.6.17.ia64.orig/arch/ia64/kernel/ia64_ksyms.c 2006-07-27 15:21:47.000000000 -0400
++++ linux-2.6.17.ia64/arch/ia64/kernel/ia64_ksyms.c 2006-07-31 09:02:06.000000000 -0400
+@@ -68,7 +68,7 @@ EXPORT_SYMBOL(__udivdi3);
+ EXPORT_SYMBOL(__moddi3);
+ EXPORT_SYMBOL(__umoddi3);
+
+-#if defined(CONFIG_MD_RAID5) || defined(CONFIG_MD_RAID5_MODULE)
++#if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
+ extern void xor_ia64_2(void);
+ extern void xor_ia64_3(void);
+ extern void xor_ia64_4(void);
+--- linux-2.6.17.ia64.orig/arch/ia64/lib/Makefile 2006-07-27 09:20:01.000000000 -0400
++++ linux-2.6.17.ia64/arch/ia64/lib/Makefile 2006-07-31 09:02:41.000000000 -0400
+@@ -14,7 +14,7 @@ lib-y := __divsi3.o __udivsi3.o __modsi3
+ lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o
+ lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
+ lib-$(CONFIG_PERFMON) += carta_random.o
+-lib-$(CONFIG_MD_RAID5) += xor.o
++lib-$(CONFIG_MD_RAID456) += xor.o
+
+ AFLAGS___divdi3.o =
+ AFLAGS___udivdi3.o = -DUNSIGNED
linux-2.6-gfs2-dlm.patch:
CREDITS | 6
Documentation/filesystems/gfs2.txt | 43
MAINTAINERS | 18
fs/Kconfig | 2
fs/Makefile | 2
fs/configfs/item.c | 2
fs/dlm/Kconfig | 21
fs/dlm/Makefile | 19
fs/dlm/ast.c | 172 +
fs/dlm/ast.h | 26
fs/dlm/config.c | 789 +++++++
fs/dlm/config.h | 42
fs/dlm/debug_fs.c | 384 +++
fs/dlm/dir.c | 423 ++++
fs/dlm/dir.h | 30
fs/dlm/dlm_internal.h | 539 +++++
fs/dlm/lock.c | 3845 +++++++++++++++++++++++++++++++++++++
fs/dlm/lock.h | 61
fs/dlm/lockspace.c | 705 ++++++
fs/dlm/lockspace.h | 25
fs/dlm/lowcomms.c | 1238 +++++++++++
fs/dlm/lowcomms.h | 26
fs/dlm/lvb_table.h | 18
fs/dlm/main.c | 97
fs/dlm/member.c | 312 +++
fs/dlm/member.h | 24
fs/dlm/memory.c | 115 +
fs/dlm/memory.h | 29
fs/dlm/midcomms.c | 140 +
fs/dlm/midcomms.h | 21
fs/dlm/rcom.c | 457 ++++
fs/dlm/rcom.h | 24
fs/dlm/recover.c | 776 +++++++
fs/dlm/recover.h | 34
fs/dlm/recoverd.c | 285 ++
fs/dlm/recoverd.h | 24
fs/dlm/requestqueue.c | 184 +
fs/dlm/requestqueue.h | 22
fs/dlm/user.c | 785 +++++++
fs/dlm/user.h | 16
fs/dlm/util.c | 161 +
fs/dlm/util.h | 22
fs/gfs2/Kconfig | 44
fs/gfs2/Makefile | 10
fs/gfs2/acl.c | 313 +++
fs/gfs2/acl.h | 37
fs/gfs2/bmap.c | 1236 +++++++++++
fs/gfs2/bmap.h | 27
fs/gfs2/daemon.c | 196 +
fs/gfs2/daemon.h | 19
fs/gfs2/dir.c | 1976 +++++++++++++++++++
fs/gfs2/dir.h | 73
fs/gfs2/eaops.c | 230 ++
fs/gfs2/eaops.h | 29
fs/gfs2/eattr.c | 1548 ++++++++++++++
fs/gfs2/eattr.h | 97
fs/gfs2/format.h | 21
fs/gfs2/gfs2.h | 31
fs/gfs2/glock.c | 2279 +++++++++++++++++++++
fs/gfs2/glock.h | 152 +
fs/gfs2/glops.c | 564 +++++
fs/gfs2/glops.h | 23
fs/gfs2/incore.h | 658 ++++++
fs/gfs2/inode.c | 1344 ++++++++++++
fs/gfs2/inode.h | 56
fs/gfs2/lm.c | 244 ++
fs/gfs2/lm.h | 41
fs/gfs2/lm_interface.h | 295 ++
fs/gfs2/locking.c | 191 +
fs/gfs2/locking/dlm/Makefile | 3
fs/gfs2/locking/dlm/lock.c | 541 +++++
fs/gfs2/locking/dlm/lock_dlm.h | 188 +
fs/gfs2/locking/dlm/main.c | 64
fs/gfs2/locking/dlm/mount.c | 256 ++
fs/gfs2/locking/dlm/plock.c | 301 ++
fs/gfs2/locking/dlm/sysfs.c | 225 ++
fs/gfs2/locking/dlm/thread.c | 359 +++
fs/gfs2/locking/nolock/Makefile | 3
fs/gfs2/locking/nolock/main.c | 259 ++
fs/gfs2/log.c | 601 +++++
fs/gfs2/log.h | 61
fs/gfs2/lops.c | 800 +++++++
fs/gfs2/lops.h | 96
fs/gfs2/lvb.c | 45
fs/gfs2/lvb.h | 19
fs/gfs2/main.c | 127 +
fs/gfs2/meta_io.c | 780 +++++++
fs/gfs2/meta_io.h | 74
fs/gfs2/mount.c | 214 ++
fs/gfs2/mount.h | 15
fs/gfs2/ondisk.c | 308 ++
fs/gfs2/ops_address.c | 778 +++++++
fs/gfs2/ops_address.h | 18
fs/gfs2/ops_dentry.c | 123 +
fs/gfs2/ops_dentry.h | 15
fs/gfs2/ops_export.c | 293 ++
fs/gfs2/ops_export.h | 19
fs/gfs2/ops_file.c | 812 +++++++
fs/gfs2/ops_file.h | 20
fs/gfs2/ops_fstype.c | 836 ++++++++
fs/gfs2/ops_fstype.h | 16
fs/gfs2/ops_inode.c | 1165 +++++++++++
fs/gfs2/ops_inode.h | 18
fs/gfs2/ops_super.c | 471 ++++
fs/gfs2/ops_super.h | 15
fs/gfs2/ops_vm.c | 194 +
fs/gfs2/ops_vm.h | 16
fs/gfs2/quota.c | 1286 ++++++++++++
fs/gfs2/quota.h | 32
fs/gfs2/recovery.c | 575 +++++
fs/gfs2/recovery.h | 32
fs/gfs2/rgrp.c | 1528 ++++++++++++++
fs/gfs2/rgrp.h | 62
fs/gfs2/super.c | 979 +++++++++
fs/gfs2/super.h | 52
fs/gfs2/sys.c | 579 +++++
fs/gfs2/sys.h | 24
fs/gfs2/trans.c | 184 +
fs/gfs2/trans.h | 34
fs/gfs2/util.c | 245 ++
fs/gfs2/util.h | 169 +
include/linux/Kbuild | 33
include/linux/dlm.h | 302 ++
include/linux/dlm_device.h | 86
include/linux/fs.h | 3
include/linux/gfs2_ondisk.h | 443 ++++
include/linux/iflags.h | 102
include/linux/kernel.h | 1
include/linux/lock_dlm_plock.h | 41
mm/filemap.c | 3
mm/readahead.c | 1
131 files changed, 40621 insertions(+), 21 deletions(-)
Index: linux-2.6-gfs2-dlm.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-gfs2-dlm.patch,v
retrieving revision 1.12.4.1
retrieving revision 1.12.4.2
diff -u -r1.12.4.1 -r1.12.4.2
--- linux-2.6-gfs2-dlm.patch 11 Aug 2006 19:11:00 -0000 1.12.4.1
+++ linux-2.6-gfs2-dlm.patch 16 Aug 2006 20:42:30 -0000 1.12.4.2
@@ -67,10 +67,10 @@
+ mount.gfs2 to help mount(8) mount a filesystem
+ mkfs.gfs2 to make a filesystem
diff --git a/MAINTAINERS b/MAINTAINERS
-index e3e1515..a050d7c 100644
+index b2afc7a..e42e143 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -875,6 +875,16 @@ M: jack at suse.cz
+@@ -862,6 +862,16 @@ M: jack at suse.cz
L: linux-kernel at vger.kernel.org
S: Maintained
@@ -87,7 +87,7 @@
DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
P: Tobias Ringstrom
M: tori at unhappy.mine.nu
-@@ -1129,6 +1139,14 @@ M: khc at pm.waw.pl
+@@ -1112,6 +1122,14 @@ M: khc at pm.waw.pl
W: http://www.kernel.org/pub/linux/utils/net/hdlc/
S: Maintained
@@ -1256,10 +1256,10 @@
+
diff --git a/fs/dlm/debug_fs.c b/fs/dlm/debug_fs.c
new file mode 100644
-index 0000000..9c3aedd
+index 0000000..8f471d9
--- /dev/null
+++ b/fs/dlm/debug_fs.c
-@@ -0,0 +1,387 @@
+@@ -0,0 +1,384 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -1572,19 +1572,16 @@
+{
+ struct dlm_ls *ls = file->private_data;
+ struct dlm_lkb *lkb;
-+ size_t len = DLM_DEBUG_BUF_LEN, pos = 0, ret, rv;
++ size_t len = DLM_DEBUG_BUF_LEN, pos = 0, rv;
+
+ mutex_lock(&debug_buf_lock);
+ mutex_lock(&ls->ls_waiters_mutex);
+ memset(debug_buf, 0, sizeof(debug_buf));
+
+ list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) {
-+ ret = snprintf(debug_buf + pos, len - pos, "%x %d %d %s\n",
-+ lkb->lkb_id, lkb->lkb_wait_type,
-+ lkb->lkb_nodeid, lkb->lkb_resource->res_name);
-+ if (ret >= len - pos)
-+ break;
-+ pos += ret;
++ pos += snprintf(debug_buf + pos, len - pos, "%x %d %d %s\n",
++ lkb->lkb_id, lkb->lkb_wait_type,
++ lkb->lkb_nodeid, lkb->lkb_resource->res_name);
+ }
+ mutex_unlock(&ls->ls_waiters_mutex);
+
@@ -2114,10 +2111,10 @@
+
diff --git a/fs/dlm/dlm_internal.h b/fs/dlm/dlm_internal.h
new file mode 100644
-index 0000000..da75099
+index 0000000..7c3c2d2
--- /dev/null
+++ b/fs/dlm/dlm_internal.h
-@@ -0,0 +1,541 @@
+@@ -0,0 +1,539 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -2587,8 +2584,6 @@
+ struct list_head ls_requestqueue;/* queue remote requests */
+ struct mutex ls_requestqueue_mutex;
+ char *ls_recover_buf;
-+ int ls_recover_nodeid; /* for debugging */
-+ uint64_t ls_rcom_seq;
+ struct list_head ls_recover_list;
+ spinlock_t ls_recover_list_lock;
+ int ls_recover_list_count;
@@ -2661,10 +2656,10 @@
+
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
new file mode 100644
-index 0000000..bb2e351
+index 0000000..7d38f91
--- /dev/null
+++ b/fs/dlm/lock.c
-@@ -0,0 +1,3846 @@
+@@ -0,0 +1,3845 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -6366,7 +6361,6 @@
+ if (lvb_in && ua->lksb.sb_lvbptr)
+ memcpy(ua->lksb.sb_lvbptr, lvb_in, DLM_USER_LVB_LEN);
+ ua->castparam = ua_tmp->castparam;
-+ ua->user_lksb = ua_tmp->user_lksb;
+
+ error = set_unlock_args(flags, ua, &args);
+ if (error)
@@ -6580,10 +6574,10 @@
+
diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
new file mode 100644
-index 0000000..7adaad5
+index 0000000..31ed0fe
--- /dev/null
+++ b/fs/dlm/lockspace.c
-@@ -0,0 +1,716 @@
+@@ -0,0 +1,705 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -6667,11 +6661,6 @@
+ return sprintf(buf, "%x\n", status);
+}
+
-+static ssize_t dlm_recover_nodeid_show(struct dlm_ls *ls, char *buf)
-+{
-+ return sprintf(buf, "%d\n", ls->ls_recover_nodeid);
-+}
-+
+struct dlm_attr {
+ struct attribute attr;
+ ssize_t (*show)(struct dlm_ls *, char *);
@@ -6699,17 +6688,11 @@
+ .show = dlm_recover_status_show
+};
+
-+static struct dlm_attr dlm_attr_recover_nodeid = {
-+ .attr = {.name = "recover_nodeid", .mode = S_IRUGO},
-+ .show = dlm_recover_nodeid_show
-+};
-+
+static struct attribute *dlm_attrs[] = {
+ &dlm_attr_control.attr,
+ &dlm_attr_event.attr,
+ &dlm_attr_id.attr,
+ &dlm_attr_recover_status.attr,
-+ &dlm_attr_recover_nodeid.attr,
+ NULL,
+};
+
@@ -8736,10 +8719,10 @@
+
diff --git a/fs/dlm/member.c b/fs/dlm/member.c
new file mode 100644
-index 0000000..a3f7de7
+index 0000000..cd0c51e
--- /dev/null
+++ b/fs/dlm/member.c
-@@ -0,0 +1,327 @@
+@@ -0,0 +1,312 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -8904,23 +8887,11 @@
+
+/* send a status request to all members just to establish comms connections */
+
-+static int ping_members(struct dlm_ls *ls)
++static void ping_members(struct dlm_ls *ls)
+{
+ struct dlm_member *memb;
-+ int error = 0;
-+
-+ list_for_each_entry(memb, &ls->ls_nodes, list) {
-+ error = dlm_recovery_stopped(ls);
-+ if (error)
-+ break;
-+ error = dlm_rcom_status(ls, memb->nodeid);
-+ if (error)
-+ break;
-+ }
-+ if (error)
-+ log_debug(ls, "ping_members aborted %d last nodeid %d",
-+ error, ls->ls_recover_nodeid);
-+ return error;
++ list_for_each_entry(memb, &ls->ls_nodes, list)
++ dlm_rcom_status(ls, memb->nodeid);
+}
+
+int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out)
@@ -8966,13 +8937,10 @@
+ dlm_set_recover_status(ls, DLM_RS_NODES);
+ *neg_out = neg;
+
-+ error = ping_members(ls);
-+ if (error)
-+ goto out;
++ ping_members(ls);
+
+ error = dlm_recover_members_wait(ls);
-+ out:
-+ log_debug(ls, "total members %d error %d", ls->ls_num_nodes, error);
++ log_debug(ls, "total members %d", ls->ls_num_nodes);
+ return error;
+}
+
@@ -9099,10 +9067,10 @@
+
diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c
new file mode 100644
-index 0000000..989b608
+index 0000000..48dfc27
--- /dev/null
+++ b/fs/dlm/memory.c
-@@ -0,0 +1,116 @@
+@@ -0,0 +1,115 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -9205,8 +9173,7 @@
+{
+ struct dlm_direntry *de;
+
-+ DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,
-+ printk("namelen = %d\n", namelen););
++ DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,);
+
+ de = kmalloc(sizeof(*de) + namelen, GFP_KERNEL);
+ if (de)
@@ -9429,10 +9396,10 @@
+
diff --git a/fs/dlm/rcom.c b/fs/dlm/rcom.c
new file mode 100644
-index 0000000..64ba492
+index 0000000..55fbe31
--- /dev/null
+++ b/fs/dlm/rcom.c
-@@ -0,0 +1,471 @@
+@@ -0,0 +1,457 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -9532,7 +9499,6 @@
+ int error = 0;
+
+ memset(ls->ls_recover_buf, 0, dlm_config.buffer_size);
-+ ls->ls_recover_nodeid = nodeid;
+
+ if (nodeid == dlm_our_nodeid()) {
+ rc = (struct dlm_rcom *) ls->ls_recover_buf;
@@ -9543,7 +9509,6 @@
+ error = create_rcom(ls, nodeid, DLM_RCOM_STATUS, 0, &rc, &mh);
+ if (error)
+ goto out;
-+ rc->rc_id = ++ls->ls_rcom_seq;
+
+ send_rcom(ls, mh, rc);
+
@@ -9576,30 +9541,19 @@
+ sizeof(struct rcom_config), &rc, &mh);
+ if (error)
+ return;
-+ rc->rc_id = rc_in->rc_id;
+ rc->rc_result = dlm_recover_status(ls);
+ make_config(ls, (struct rcom_config *) rc->rc_buf);
+
+ send_rcom(ls, mh, rc);
+}
+
-+static void receive_sync_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
++static void receive_rcom_status_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
+{
-+ if (rc_in->rc_id != ls->ls_rcom_seq) {
-+ log_debug(ls, "reject old reply %d got %llx wanted %llx",
-+ rc_in->rc_type, rc_in->rc_id, ls->ls_rcom_seq);
-+ return;
-+ }
+ memcpy(ls->ls_recover_buf, rc_in, rc_in->rc_header.h_length);
+ set_bit(LSFL_RCOM_READY, &ls->ls_flags);
+ wake_up(&ls->ls_wait_general);
+}
+
-+static void receive_rcom_status_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
-+{
-+ receive_sync_reply(ls, rc_in);
-+}
-+
+int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
+{
+ struct dlm_rcom *rc;
@@ -9607,7 +9561,6 @@
+ int error = 0, len = sizeof(struct dlm_rcom);
+
+ memset(ls->ls_recover_buf, 0, dlm_config.buffer_size);
-+ ls->ls_recover_nodeid = nodeid;
+
+ if (nodeid == dlm_our_nodeid()) {
+ dlm_copy_master_names(ls, last_name, last_len,
@@ -9620,7 +9573,6 @@
+ if (error)
+ goto out;
+ memcpy(rc->rc_buf, last_name, last_len);
-+ rc->rc_id = ++ls->ls_rcom_seq;
+
+ send_rcom(ls, mh, rc);
+
@@ -9657,7 +9609,6 @@
+ error = create_rcom(ls, nodeid, DLM_RCOM_NAMES_REPLY, outlen, &rc, &mh);
+ if (error)
+ return;
-+ rc->rc_id = rc_in->rc_id;
+
+ dlm_copy_master_names(ls, rc_in->rc_buf, inlen, rc->rc_buf, outlen,
+ nodeid);
@@ -9666,7 +9617,9 @@
+
+static void receive_rcom_names_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
+{
-+ receive_sync_reply(ls, rc_in);
++ memcpy(ls->ls_recover_buf, rc_in, rc_in->rc_header.h_length);
++ set_bit(LSFL_RCOM_READY, &ls->ls_flags);
++ wake_up(&ls->ls_wait_general);
+}
+
+int dlm_send_rcom_lookup(struct dlm_rsb *r, int dir_nodeid)
@@ -10758,10 +10711,10 @@
+
diff --git a/fs/dlm/recoverd.c b/fs/dlm/recoverd.c
new file mode 100644
-index 0000000..eac8e9f
+index 0000000..7010353
--- /dev/null
+++ b/fs/dlm/recoverd.c
-@@ -0,0 +1,286 @@
+@@ -0,0 +1,285 @@
+/******************************************************************************
+*******************************************************************************
+**
@@ -11039,7 +10992,6 @@
+
+void dlm_recoverd_suspend(struct dlm_ls *ls)
+{
-+ wake_up(&ls->ls_wait_general);
+ mutex_lock(&ls->ls_recoverd_active);
+}
+
@@ -21331,10 +21283,10 @@
+#endif /* __GLOPS_DOT_H__ */
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
new file mode 100644
-index 0000000..e98c14f
+index 0000000..90e0624
--- /dev/null
+++ b/fs/gfs2/incore.h
-@@ -0,0 +1,659 @@
+@@ -0,0 +1,658 @@
+/*
+ * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
@@ -21616,7 +21568,6 @@
+
+enum {
+ GFF_DID_DIRECT_ALLOC = 0,
-+ GFF_EXLOCK = 1,
+};
+
+struct gfs2_file {
@@ -23705,10 +23656,10 @@
+#endif /* __LM_DOT_H__ */
diff --git a/fs/gfs2/lm_interface.h b/fs/gfs2/lm_interface.h
new file mode 100644
-index 0000000..1da95a5
+index 0000000..9d34bf3
--- /dev/null
+++ b/fs/gfs2/lm_interface.h
-@@ -0,0 +1,290 @@
+@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
@@ -23976,11 +23927,16 @@
+/*
+ * Lock module bottom interface. A lock module makes itself available to GFS
+ * with these functions.
++ *
++ * For the time being, we copy the gfs1 lock module bottom interface so the
++ * same lock modules can be used with both gfs1 and gfs2 (it won't be possible
++ * to load both gfs1 and gfs2 at once.) Eventually the lock modules will fork
++ * for gfs1/gfs2 and this API can change to the gfs2_ prefix.
+ */
+
-+int gfs2_register_lockproto(struct lm_lockops *proto);
++int gfs_register_lockproto(struct lm_lockops *proto);
+
-+void gfs2_unregister_lockproto(struct lm_lockops *proto);
++void gfs_unregister_lockproto(struct lm_lockops *proto);
+
+/*
+ * Lock module top interface. GFS calls these functions when mounting or
@@ -24001,7 +23957,7 @@
+
diff --git a/fs/gfs2/locking.c b/fs/gfs2/locking.c
new file mode 100644
-index 0000000..ded1ef6
+index 0000000..1831928
--- /dev/null
+++ b/fs/gfs2/locking.c
@@ -0,0 +1,191 @@
@@ -24038,13 +23994,13 @@
+static struct mutex lmh_lock;
+
+/**
-+ * gfs2_register_lockproto - Register a low-level locking protocol
++ * gfs_register_lockproto - Register a low-level locking protocol
+ * @proto: the protocol definition
+ *
+ * Returns: 0 on success, -EXXX on failure
+ */
+
-+int gfs2_register_lockproto(struct lm_lockops *proto)
++int gfs_register_lockproto(struct lm_lockops *proto)
+{
+ struct lmh_wrapper *lw;
+
@@ -24074,12 +24030,12 @@
+}
+
+/**
-+ * gfs2_unregister_lockproto - Unregister a low-level locking protocol
++ * gfs_unregister_lockproto - Unregister a low-level locking protocol
+ * @proto: the protocol definition
+ *
+ */
+
-+void gfs2_unregister_lockproto(struct lm_lockops *proto)
++void gfs_unregister_lockproto(struct lm_lockops *proto)
+{
+ struct lmh_wrapper *lw;
+
@@ -24124,7 +24080,7 @@
+ int try = 0;
+ int error, found;
+
-+retry:
++ retry:
+ mutex_lock(&lmh_lock);
+
+ found = 0;
@@ -24158,7 +24114,7 @@
+ min_lvb_size, flags, lockstruct, fskobj);
+ if (error)
+ module_put(lw->lw_ops->lm_owner);
-+out:
++ out:
+ mutex_unlock(&lmh_lock);
+ return error;
+}
@@ -24193,8 +24149,8 @@
+ INIT_LIST_HEAD(&lmh_list);
+}
+
-+EXPORT_SYMBOL_GPL(gfs2_register_lockproto);
-+EXPORT_SYMBOL_GPL(gfs2_unregister_lockproto);
++EXPORT_SYMBOL_GPL(gfs_register_lockproto);
++EXPORT_SYMBOL_GPL(gfs_unregister_lockproto);
+
diff --git a/fs/gfs2/locking/dlm/Makefile b/fs/gfs2/locking/dlm/Makefile
new file mode 100644
@@ -24948,7 +24904,7 @@
+
diff --git a/fs/gfs2/locking/dlm/main.c b/fs/gfs2/locking/dlm/main.c
new file mode 100644
-index 0000000..870a1cd
+index 0000000..89728c9
--- /dev/null
+++ b/fs/gfs2/locking/dlm/main.c
@@ -0,0 +1,64 @@
@@ -24974,7 +24930,7 @@
+{
+ int error;
+
-+ error = gfs2_register_lockproto(&gdlm_ops);
++ error = gfs_register_lockproto(&gdlm_ops);
+ if (error) {
+ printk(KERN_WARNING "lock_dlm: can't register protocol: %d\n",
+ error);
@@ -24983,14 +24939,14 @@
+
+ error = gdlm_sysfs_init();
+ if (error) {
-+ gfs2_unregister_lockproto(&gdlm_ops);
++ gfs_unregister_lockproto(&gdlm_ops);
+ return error;
+ }
+
+ error = gdlm_plock_init();
+ if (error) {
+ gdlm_sysfs_exit();
-+ gfs2_unregister_lockproto(&gdlm_ops);
++ gfs_unregister_lockproto(&gdlm_ops);
+ return error;
+ }
+
@@ -25006,7 +24962,7 @@
+{
+ gdlm_plock_exit();
+ gdlm_sysfs_exit();
-+ gfs2_unregister_lockproto(&gdlm_ops);
++ gfs_unregister_lockproto(&gdlm_ops);
+}
+
+module_init(init_lock_dlm);
@@ -25280,10 +25236,10 @@
+
diff --git a/fs/gfs2/locking/dlm/plock.c b/fs/gfs2/locking/dlm/plock.c
new file mode 100644
-index 0000000..1acb251
+index 0000000..e5b11f0
--- /dev/null
+++ b/fs/gfs2/locking/dlm/plock.c
-@@ -0,0 +1,302 @@
+@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2005 Red Hat, Inc. All rights reserved.
+ *
@@ -25518,8 +25474,7 @@
+ spin_lock(&ops_lock);
+ list_for_each_entry(op, &recv_list, list) {
+ if (op->info.fsid == info.fsid &&
-+ op->info.number == info.number &&
-+ op->info.owner == info.owner) {
++ op->info.number == info.number) {
+ list_del_init(&op->list);
+ found = 1;
+ op->done = 1;
@@ -26193,7 +26148,7 @@
+
diff --git a/fs/gfs2/locking/nolock/main.c b/fs/gfs2/locking/nolock/main.c
new file mode 100644
-index 0000000..748aa5d
+index 0000000..97ffac5
--- /dev/null
+++ b/fs/gfs2/locking/nolock/main.c
@@ -0,0 +1,259 @@
@@ -26432,7 +26387,7 @@
+{
+ int error;
+
-+ error = gfs2_register_lockproto(&nolock_ops);
++ error = gfs_register_lockproto(&nolock_ops);
+ if (error) {
+ printk(KERN_WARNING
+ "lock_nolock: can't register protocol: %d\n", error);
@@ -26446,7 +26401,7 @@
+
+static void __exit exit_nolock(void)
+{
-+ gfs2_unregister_lockproto(&nolock_ops);
++ gfs_unregister_lockproto(&nolock_ops);
+}
+
+module_init(init_nolock);
@@ -26458,7 +26413,7 @@
+
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
new file mode 100644
-index 0000000..a591fb8
+index 0000000..60fdc94
--- /dev/null
+++ b/fs/gfs2/log.c
@@ -0,0 +1,601 @@
@@ -26720,8 +26675,8 @@
+ if (list_empty(&sdp->sd_ail1_list))
+ tail = sdp->sd_log_head;
+ else {
-+ ai = list_entry(sdp->sd_ail1_list.prev, struct gfs2_ail,
-+ ai_list);
++ ai = list_entry(sdp->sd_ail1_list.prev,
++ struct gfs2_ail, ai_list);
+ tail = ai->ai_first;
+ }
+
@@ -29670,10 +29625,10 @@
+
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
new file mode 100644
-index 0000000..45afd05
+index 0000000..fca69f1
--- /dev/null
+++ b/fs/gfs2/ops_address.c
-@@ -0,0 +1,797 @@
+@@ -0,0 +1,778 @@
+/*
+ * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
@@ -29807,8 +29762,8 @@
+static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
+{
+ struct inode *inode = page->mapping->host;
-+ struct gfs2_inode *ip = GFS2_I(inode);
-+ struct gfs2_sbd *sdp = GFS2_SB(inode);
++ struct gfs2_inode *ip = GFS2_I(page->mapping->host);
++ struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
+ loff_t i_size = i_size_read(inode);
+ pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT;
+ unsigned offset;
@@ -29834,10 +29789,6 @@
+ error = gfs2_trans_begin(sdp, RES_DINODE + 1, 0);
+ if (error)
+ goto out_ignore;
-+ if (!page_has_buffers(page)) {
-+ create_empty_buffers(page, inode->i_sb->s_blocksize,
-+ (1 << BH_Dirty)|(1 << BH_Uptodate));
-+ }
+ gfs2_page_add_databufs(ip, page, 0, sdp->sd_vfs->s_blocksize-1);
+ done_trans = 1;
+ }
@@ -29917,22 +29868,14 @@
+ struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
+ struct gfs2_holder gh;
+ int error;
-+ int do_unlock = 0;
+
+ if (likely(file != &gfs2_internal_file_sentinal)) {
-+ if (file) {
-+ struct gfs2_file *gf = file->private_data;
-+ if (test_bit(GFF_EXLOCK, &gf->f_flags))
-+ goto skip_lock;
-+ }
+ gfs2_holder_init(ip->i_gl, LM_ST_SHARED, GL_ATIME|GL_AOP, &gh);
-+ do_unlock = 1;
+ error = gfs2_glock_nq_m_atime(1, &gh);
+ if (unlikely(error))
+ goto out_unlock;
+ }
+
-+skip_lock:
+ if (gfs2_is_stuffed(ip)) {
+ error = stuffed_readpage(ip, page);
+ unlock_page(page);
@@ -29950,7 +29893,7 @@
+ return error;
+out_unlock:
+ unlock_page(page);
-+ if (do_unlock)
++ if (file != &gfs2_internal_file_sentinal)
+ gfs2_holder_uninit(&gh);
+ goto out;
+}
@@ -29979,24 +29922,17 @@
+ struct gfs2_holder gh;
+ unsigned page_idx;
+ int ret;
-+ int do_unlock = 0;
+
+ if (likely(file != &gfs2_internal_file_sentinal)) {
-+ if (file) {
-+ struct gfs2_file *gf = file->private_data;
-+ if (test_bit(GFF_EXLOCK, &gf->f_flags))
-+ goto skip_lock;
-+ }
+ gfs2_holder_init(ip->i_gl, LM_ST_SHARED,
+ LM_FLAG_TRY_1CB|GL_ATIME|GL_AOP, &gh);
-+ do_unlock = 1;
+ ret = gfs2_glock_nq_m_atime(1, &gh);
+ if (ret == GLR_TRYFAILED)
+ goto out_noerror;
+ if (unlikely(ret))
+ goto out_unlock;
+ }
-+skip_lock:
++
+ if (gfs2_is_stuffed(ip)) {
+ struct pagevec lru_pvec;
+ pagevec_init(&lru_pvec, 0);
@@ -30021,7 +29957,7 @@
+ ret = mpage_readpages(mapping, pages, nr_pages, gfs2_get_block);
+ }
+
-+ if (do_unlock) {
++ if (likely(file != &gfs2_internal_file_sentinal)) {
+ gfs2_glock_dq_m(1, &gh);
+ gfs2_holder_uninit(&gh);
+ }
@@ -30039,7 +29975,7 @@
+ unlock_page(page);
+ page_cache_release(page);
+ }
-+ if (do_unlock)
++ if (likely(file != &gfs2_internal_file_sentinal))
+ gfs2_holder_uninit(&gh);
+ goto out;
+}
@@ -34372,10 +34308,10 @@
+#endif /* __OPS_SUPER_DOT_H__ */
diff --git a/fs/gfs2/ops_vm.c b/fs/gfs2/ops_vm.c
new file mode 100644
-index 0000000..875a769
+index 0000000..aff6637
--- /dev/null
+++ b/fs/gfs2/ops_vm.c
-@@ -0,0 +1,188 @@
+@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
@@ -34424,7 +34360,13 @@
+ unsigned long address, int *type)
+{
+ struct gfs2_inode *ip = GFS2_I(area->vm_file->f_mapping->host);
++ struct gfs2_holder i_gh;
+ struct page *result;
++ int error;
++
++ error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
++ if (error)
++ return NULL;
+
+ set_bit(GIF_PAGED, &ip->i_flags);
+
@@ -34433,6 +34375,8 @@
+ if (result && result != NOPAGE_OOM)
+ pfault_be_greedy(ip);
+
++ gfs2_glock_dq_uninit(&i_gh);
++
+ return result;
+}
+
@@ -34511,9 +34455,7 @@
+static struct page *gfs2_sharewrite_nopage(struct vm_area_struct *area,
+ unsigned long address, int *type)
+{
-+ struct file *file = area->vm_file;
-+ struct gfs2_file *gf = file->private_data;
-+ struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
++ struct gfs2_inode *ip = GFS2_I(area->vm_file->f_mapping->host);
+ struct gfs2_holder i_gh;
+ struct page *result = NULL;
+ unsigned long index = ((address - area->vm_start) >> PAGE_CACHE_SHIFT) +
@@ -34528,14 +34470,13 @@
+ set_bit(GIF_PAGED, &ip->i_flags);
+ set_bit(GIF_SW_PAGED, &ip->i_flags);
+
-+ error = gfs2_write_alloc_required(ip, (u64)index << PAGE_CACHE_SHIFT,
++ error = gfs2_write_alloc_required(ip,
++ (uint64_t)index << PAGE_CACHE_SHIFT,
+ PAGE_CACHE_SIZE, &alloc_required);
+ if (error)
+ goto out;
+
-+ set_bit(GFF_EXLOCK, &gf->f_flags);
+ result = filemap_nopage(area, address, type);
-+ clear_bit(GFF_EXLOCK, &gf->f_flags);
+ if (!result || result == NOPAGE_OOM)
+ goto out;
+
@@ -34550,7 +34491,8 @@
+ }
+
+ pfault_be_greedy(ip);
-+out:
++
++ out:
+ gfs2_glock_dq_uninit(&i_gh);
+
+ return result;
@@ -35918,10 +35860,10 @@
+#endif /* __QUOTA_DOT_H__ */
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
new file mode 100644
-index 0000000..bbd44a4
+index 0000000..7aabc03
--- /dev/null
+++ b/fs/gfs2/recovery.c
-@@ -0,0 +1,572 @@
+@@ -0,0 +1,575 @@
+/*
+ * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
@@ -36077,7 +36019,8 @@
+
+ if (lh.lh_header.mh_magic != GFS2_MAGIC ||
+ lh.lh_header.mh_type != GFS2_METATYPE_LH ||
-+ lh.lh_blkno != blk || lh.lh_hash != hash)
++ lh.lh_blkno != blk ||
++ lh.lh_hash != hash)
+ return 1;
+
+ *head = lh;
@@ -36405,9 +36348,11 @@
+
+ /* Acquire a shared hold on the transaction lock */
+
-+ error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED,
++ error = gfs2_glock_nq_init(sdp->sd_trans_gl,
++ LM_ST_SHARED,
+ LM_FLAG_NOEXP | LM_FLAG_PRIORITY |
-+ GL_NOCANCEL | GL_NOCACHE, &t_gh);
++ GL_NOCANCEL | GL_NOCACHE,
++ &t_gh);
+ if (error)
+ goto fail_gunlock_ji;
+
linux-2.6-gfs2-locking-exports.patch:
locking.c | 3 +++
1 files changed, 3 insertions(+)
Index: linux-2.6-gfs2-locking-exports.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-gfs2-locking-exports.patch,v
retrieving revision 1.1.10.1
retrieving revision 1.1.10.2
diff -u -r1.1.10.1 -r1.1.10.2
--- linux-2.6-gfs2-locking-exports.patch 11 Aug 2006 19:11:01 -0000 1.1.10.1
+++ linux-2.6-gfs2-locking-exports.patch 16 Aug 2006 20:42:35 -0000 1.1.10.2
@@ -1,10 +1,12 @@
---- linux-2.6.17.noarch/fs/gfs2/locking.c~ 2006-08-10 13:33:09.000000000 -0400
-+++ linux-2.6.17.noarch/fs/gfs2/locking.c 2006-08-10 13:33:23.000000000 -0400
-@@ -188,4 +188,6 @@ void __init gfs2_init_lmh(void)
-
- EXPORT_SYMBOL_GPL(gfs2_register_lockproto);
- EXPORT_SYMBOL_GPL(gfs2_unregister_lockproto);
--
-+EXPORT_SYMBOL_GPL(gfs2_withdraw_lockproto);
-+EXPORT_SYMBOL_GPL(gfs2_mount_lockproto);
-+EXPORT_SYMBOL_GPL(gfs2_unmount_lockproto);
+*** gfs2-2.6-18-rc2/fs/gfs2/locking.c 2006-07-20 10:44:33.000000000 -0500
+--- gfs2-devel/fs/gfs2/locking.c 2006-07-20 12:27:53.000000000 -0500
+*************** void __init gfs2_init_lmh(void)
+*** 188,191 ****
+--- 188,194 ----
+
+ EXPORT_SYMBOL_GPL(gfs_register_lockproto);
+ EXPORT_SYMBOL_GPL(gfs_unregister_lockproto);
++ EXPORT_SYMBOL_GPL(gfs2_withdraw_lockproto);
++ EXPORT_SYMBOL_GPL(gfs2_mount_lockproto);
++ EXPORT_SYMBOL_GPL(gfs2_unmount_lockproto);
+
linux-2.6-lockdep-fixes.patch:
a/net/ipv6/icmp.c | 13 ++++++++++
linux-2.6.17-mm6/include/net/sock.h | 33 +++++++++++++++++++++++---
linux-2.6.18-rc1/drivers/input/serio/libps2.c | 6 ++--
linux-2.6.18-rc1/include/linux/libps2.h | 12 ++++++++-
linux-2.6.18-rc1/net/socket.c | 8 +++++-
5 files changed, 64 insertions(+), 8 deletions(-)
Index: linux-2.6-lockdep-fixes.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-lockdep-fixes.patch,v
retrieving revision 1.16.4.1
retrieving revision 1.16.4.2
diff -u -r1.16.4.1 -r1.16.4.2
--- linux-2.6-lockdep-fixes.patch 11 Aug 2006 19:11:01 -0000 1.16.4.1
+++ linux-2.6-lockdep-fixes.patch 16 Aug 2006 20:42:35 -0000 1.16.4.2
@@ -387,81 +387,4 @@
/* Enough space for 2 64K ICMP packets, including
* sk_buff struct overhead.
-
---- a/kernel/lockdep.c~lockdep-print-kernel-version
-+++ a/kernel/lockdep.c
-@@ -36,6 +36,7 @@
- #include <linux/stacktrace.h>
- #include <linux/debug_locks.h>
- #include <linux/irqflags.h>
-+#include <linux/utsname.h>
-
- #include <asm/sections.h>
-
-@@ -508,6 +509,13 @@ print_circular_bug_entry(struct lock_lis
- return 0;
- }
-
-+static void print_kernel_version(void)
-+{
-+ printk("%s %.*s\n", system_utsname.release,
-+ (int)strcspn(system_utsname.version, " "),
-+ system_utsname.version);
-+}
-+
- /*
- * When a circular dependency is detected, print the
- * header first:
-@@ -524,6 +532,7 @@ print_circular_bug_header(struct lock_li
-
- printk("\n=======================================================\n");
- printk( "[ INFO: possible circular locking dependency detected ]\n");
-+ print_kernel_version();
- printk( "-------------------------------------------------------\n");
- printk("%s/%d is trying to acquire lock:\n",
- curr->comm, curr->pid);
-@@ -705,6 +714,7 @@ print_bad_irq_dependency(struct task_str
- printk("\n======================================================\n");
- printk( "[ INFO: %s-safe -> %s-unsafe lock order detected ]\n",
- irqclass, irqclass);
-+ print_kernel_version();
- printk( "------------------------------------------------------\n");
- printk("%s/%d [HC%u[%lu]:SC%u[%lu]:HE%u:SE%u] is trying to acquire:\n",
- curr->comm, curr->pid,
-@@ -786,6 +796,7 @@ print_deadlock_bug(struct task_struct *c
-
- printk("\n=============================================\n");
- printk( "[ INFO: possible recursive locking detected ]\n");
-+ print_kernel_version();
- printk( "---------------------------------------------\n");
- printk("%s/%d is trying to acquire lock:\n",
- curr->comm, curr->pid);
-@@ -1368,6 +1379,7 @@ print_irq_inversion_bug(struct task_stru
-
- printk("\n=========================================================\n");
- printk( "[ INFO: possible irq lock inversion dependency detected ]\n");
-+ print_kernel_version();
- printk( "---------------------------------------------------------\n");
- printk("%s/%d just changed the state of lock:\n",
- curr->comm, curr->pid);
-@@ -1462,6 +1474,7 @@ print_usage_bug(struct task_struct *curr
-
- printk("\n=================================\n");
- printk( "[ INFO: inconsistent lock state ]\n");
-+ print_kernel_version();
- printk( "---------------------------------\n");
-
- printk("inconsistent {%s} -> {%s} usage.\n",
_
-
---- linux-2.6.17.noarch/fs/exec.c~ 2006-08-10 21:49:38.000000000 -0400
-+++ linux-2.6.17.noarch/fs/exec.c 2006-08-10 21:50:36.000000000 -0400
-@@ -753,7 +753,7 @@ no_thread_group:
-
- write_lock_irq(&tasklist_lock);
- spin_lock(&oldsighand->siglock);
-- spin_lock(&newsighand->siglock);
-+ spin_lock_nested(&newsighand->siglock, SINGLE_DEPTH_NESTING);
-
- rcu_assign_pointer(current->sighand, newsighand);
- recalc_sigpending();
linux-2.6-utrace.patch:
Documentation/utrace.txt | 455 +++++++++
arch/alpha/kernel/asm-offsets.c | 2
arch/alpha/kernel/entry.S | 4
arch/arm/kernel/ptrace.c | 36
arch/arm26/kernel/ptrace.c | 32
arch/frv/kernel/ptrace.c | 15
arch/i386/kernel/entry.S | 7
arch/i386/kernel/i387.c | 143 +-
arch/i386/kernel/process.c | 3
arch/i386/kernel/ptrace.c | 839 +++++++++--------
arch/i386/kernel/signal.c | 39
arch/i386/kernel/vm86.c | 7
arch/ia64/ia32/sys_ia32.c | 2
arch/ia64/kernel/asm-offsets.c | 2
arch/ia64/kernel/fsys.S | 16
arch/ia64/kernel/mca.c | 2
arch/ia64/kernel/ptrace.c | 41
arch/mips/kernel/ptrace.c | 21
arch/mips/kernel/sysirix.c | 2
arch/powerpc/kernel/Makefile | 4
arch/powerpc/kernel/asm-offsets.c | 2
arch/powerpc/kernel/process.c | 5
arch/powerpc/kernel/ptrace-common.h | 161 ---
arch/powerpc/kernel/ptrace.c | 785 +++++++---------
arch/powerpc/kernel/ptrace32.c | 436 --------
arch/powerpc/kernel/signal_32.c | 56 +
arch/powerpc/kernel/signal_64.c | 4
arch/powerpc/kernel/sys_ppc32.c | 5
arch/powerpc/lib/sstep.c | 3
arch/powerpc/platforms/cell/spufs/run.c | 2
arch/ppc/kernel/asm-offsets.c | 2
arch/s390/kernel/compat_linux.c | 3
arch/s390/kernel/compat_signal.c | 5
arch/s390/kernel/process.c | 3
arch/s390/kernel/ptrace.c | 551 ++++++++++-
arch/s390/kernel/signal.c | 4
arch/s390/kernel/traps.c | 6
arch/sparc64/kernel/entry.S | 6
arch/sparc64/kernel/process.c | 3
arch/sparc64/kernel/ptrace.c | 650 +++++++++++--
arch/sparc64/kernel/signal.c | 2
arch/sparc64/kernel/signal32.c | 2
arch/sparc64/kernel/sys_sparc32.c | 3
arch/sparc64/kernel/systbls.S | 4
arch/x86_64/ia32/fpu32.c | 92 +
arch/x86_64/ia32/ia32_aout.c | 6
arch/x86_64/ia32/ia32_signal.c | 8
arch/x86_64/ia32/ia32entry.S | 2
arch/x86_64/ia32/ptrace32.c | 688 +++++++++-----
arch/x86_64/ia32/sys_ia32.c | 5
arch/x86_64/kernel/process.c | 5
arch/x86_64/kernel/ptrace.c | 619 +++++++-----
arch/x86_64/kernel/signal.c | 30
arch/x86_64/kernel/traps.c | 8
arch/x86_64/mm/fault.c | 4
drivers/connector/cn_proc.c | 4
fs/binfmt_aout.c | 6
fs/binfmt_elf.c | 6
fs/binfmt_elf_fdpic.c | 7
fs/binfmt_flat.c | 3
fs/binfmt_som.c | 2
fs/exec.c | 11
fs/proc/array.c | 7
fs/proc/base.c | 17
include/asm-i386/i387.h | 13
include/asm-i386/signal.h | 4
include/asm-i386/thread_info.h | 7
include/asm-i386/tracehook.h | 74 +
include/asm-powerpc/tracehook.h | 303 ++++++
include/asm-s390/tracehook.h | 105 ++
include/asm-sparc64/tracehook.h | 44
include/asm-x86_64/fpu32.h | 3
include/asm-x86_64/thread_info.h | 2
include/asm-x86_64/tracehook.h | 106 ++
include/linux/init_task.h | 3
include/linux/ptrace.h | 86 -
include/linux/sched.h | 25
include/linux/tracehook.h | 641 +++++++++++++
include/linux/utrace.h | 471 +++++++++
init/Kconfig | 29
kernel/Makefile | 1
kernel/exit.c | 259 +----
kernel/fork.c | 60 -
kernel/ptrace.c | 1562 +++++++++++++++++++++++++-------
kernel/signal.c | 211 ----
kernel/sys.c | 2
kernel/timer.c | 6
kernel/utrace.c | 1520 +++++++++++++++++++++++++++++++
security/selinux/hooks.c | 6
89 files changed, 8167 insertions(+), 3281 deletions(-)
Index: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-utrace.patch,v
retrieving revision 1.12.4.1
retrieving revision 1.12.4.2
diff -u -r1.12.4.1 -r1.12.4.2
--- linux-2.6-utrace.patch 11 Aug 2006 19:11:01 -0000 1.12.4.1
+++ linux-2.6-utrace.patch 16 Aug 2006 20:42:36 -0000 1.12.4.2
@@ -7,24 +7,22 @@
arch/i386/kernel/entry.S | 7
arch/i386/kernel/i387.c | 143 +--
arch/i386/kernel/process.c | 3
- arch/i386/kernel/ptrace.c | 839 +++++++++-------
+ arch/i386/kernel/ptrace.c | 839 +++++++++--------
arch/i386/kernel/signal.c | 39 -
arch/i386/kernel/vm86.c | 7
- arch/ia64/ia32/ia32_entry.S | 2
- arch/ia64/ia32/sys_ia32.c | 23
+ arch/ia64/ia32/sys_ia32.c | 2
arch/ia64/kernel/asm-offsets.c | 2
arch/ia64/kernel/fsys.S | 16
arch/ia64/kernel/mca.c | 2
arch/ia64/kernel/ptrace.c | 41 -
- arch/ia64/kernel/signal.c | 4
arch/mips/kernel/ptrace.c | 21
arch/mips/kernel/sysirix.c | 2
arch/powerpc/kernel/Makefile | 4
arch/powerpc/kernel/asm-offsets.c | 2
arch/powerpc/kernel/process.c | 5
arch/powerpc/kernel/ptrace-common.h | 161 ---
- arch/powerpc/kernel/ptrace.c | 785 +++++++--------
- arch/powerpc/kernel/ptrace32.c | 436 --------
+ arch/powerpc/kernel/ptrace.c | 785 +++++++---------
+ arch/powerpc/kernel/ptrace32.c | 436 ---------
arch/powerpc/kernel/signal_32.c | 56 +
arch/powerpc/kernel/signal_64.c | 4
arch/powerpc/kernel/sys_ppc32.c | 5
@@ -34,12 +32,12 @@
arch/s390/kernel/compat_linux.c | 3
arch/s390/kernel/compat_signal.c | 5
arch/s390/kernel/process.c | 3
- arch/s390/kernel/ptrace.c | 553 ++++++++++-
+ arch/s390/kernel/ptrace.c | 551 ++++++++++-
arch/s390/kernel/signal.c | 4
arch/s390/kernel/traps.c | 6
arch/sparc64/kernel/entry.S | 6
arch/sparc64/kernel/process.c | 3
- arch/sparc64/kernel/ptrace.c | 653 +++++++++++--
+ arch/sparc64/kernel/ptrace.c | 650 +++++++++++--
arch/sparc64/kernel/signal.c | 2
arch/sparc64/kernel/signal32.c | 2
arch/sparc64/kernel/sys_sparc32.c | 3
@@ -48,7 +46,7 @@
arch/x86_64/ia32/ia32_aout.c | 6
arch/x86_64/ia32/ia32_signal.c | 8
arch/x86_64/ia32/ia32entry.S | 2
- arch/x86_64/ia32/ptrace32.c | 690 +++++++++----
+ arch/x86_64/ia32/ptrace32.c | 690 +++++++++-----
arch/x86_64/ia32/sys_ia32.c | 5
arch/x86_64/kernel/process.c | 5
arch/x86_64/kernel/ptrace.c | 619 +++++++-----
@@ -62,13 +60,12 @@
fs/binfmt_flat.c | 3
fs/binfmt_som.c | 2
fs/exec.c | 11
- fs/proc/array.c | 14
+ fs/proc/array.c | 7
fs/proc/base.c | 17
include/asm-i386/i387.h | 13
include/asm-i386/signal.h | 4
include/asm-i386/thread_info.h | 7
include/asm-i386/tracehook.h | 74 +
- include/asm-ia64/tracehook.h | 67 +
include/asm-powerpc/tracehook.h | 303 ++++++
include/asm-s390/tracehook.h | 105 ++
include/asm-sparc64/tracehook.h | 44 +
@@ -76,27 +73,25 @@
include/asm-x86_64/thread_info.h | 2
include/asm-x86_64/tracehook.h | 106 ++
include/linux/init_task.h | 3
- include/linux/ptrace.h | 88 +-
+ include/linux/ptrace.h | 86 +-
include/linux/sched.h | 25
- include/linux/tracehook.h | 645 +++++++++++++
- include/linux/utrace.h | 481 +++++++++
+ include/linux/tracehook.h | 641 +++++++++++++
+ include/linux/utrace.h | 471 +++++++++
init/Kconfig | 29 +
kernel/Makefile | 1
- kernel/exit.c | 253 +----
- kernel/fork.c | 62 -
- kernel/ptrace.c | 1592 ++++++++++++++++++++++++-------
+ kernel/exit.c | 259 +----
+ kernel/fork.c | 60 -
+ kernel/ptrace.c | 1562 ++++++++++++++++++++++++-------
kernel/signal.c | 211 +---
kernel/sys.c | 2
kernel/timer.c | 6
- kernel/utrace.c | 1526 ++++++++++++++++++++++++++++++
- security/selinux/hooks.c | 54 +
- security/selinux/include/objsec.h | 1
- 93 files changed, 8332 insertions(+), 3321 deletions(-)
+ kernel/utrace.c | 1520 ++++++++++++++++++++++++++++++
+ security/selinux/hooks.c | 6
+ 89 files changed, 8168 insertions(+), 3282 deletions(-)
create mode 100644 Documentation/utrace.txt
delete arch/powerpc/kernel/ptrace-common.h
delete arch/powerpc/kernel/ptrace32.c
create mode 100644 include/asm-i386/tracehook.h
- create mode 100644 include/asm-ia64/tracehook.h
create mode 100644 include/asm-powerpc/tracehook.h
create mode 100644 include/asm-s390/tracehook.h
create mode 100644 include/asm-sparc64/tracehook.h
@@ -411,76 +406,6 @@
+
+
+#endif
---- linux-2.6/include/asm-ia64/tracehook.h.utrace-ptrace-compat
-+++ linux-2.6/include/asm-ia64/tracehook.h
-@@ -0,0 +1,67 @@
-+/*
-+ * Copyright (C)2006 Intel Co
-+ * Anil S Keshavamurthy <anil.s.keshavamurthy at intel.com>
-+ * and Bibo Mao <bibo.mao at intel.com> adapted from i386.
-+ *
-+ * Tracing hooks, ia64 CPU support
-+ */
-+
-+#ifndef _ASM_TRACEHOOK_H
-+#define _ASM_TRACEHOOK_H 1
-+
-+#include <linux/sched.h>
-+#include <asm/ptrace.h>
-+
-+/*
-+ * See linux/tracehook.h for the descriptions of what these need to do.
-+ */
-+
-+#define ARCH_HAS_SINGLE_STEP (1)
-+#define ARCH_HAS_BLOCK_STEP (1)
-+
-+static inline void tracehook_enable_single_step(struct task_struct *tsk)
-+{
-+ struct pt_regs *pt = task_pt_regs(tsk);
-+ ia64_psr(pt)->ss = 1;
-+}
-+
-+static inline void tracehook_disable_single_step(struct task_struct *tsk)
-+{
-+ struct pt_regs *pt = task_pt_regs(tsk);
-+ ia64_psr(pt)->ss = 0;
-+}
-+
-+static inline void tracehook_enable_block_step(struct task_struct *tsk)
-+{
-+ struct pt_regs *pt = task_pt_regs(tsk);
-+ ia64_psr(pt)->tb = 1;
-+}
-+
-+static inline void tracehook_disable_block_step(struct task_struct *tsk)
-+{
-+ struct pt_regs *pt = task_pt_regs(tsk);
-+ ia64_psr(pt)->tb = 0;
-+}
-+
-+static inline void tracehook_enable_syscall_trace(struct task_struct *tsk)
-+{
-+ set_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
-+}
-+
-+static inline void tracehook_disable_syscall_trace(struct task_struct *tsk)
-+{
-+ clear_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
-+}
-+
-+static inline int tracehook_single_step_enabled(struct task_struct *tsk)
-+{
-+ struct pt_regs *pt = task_pt_regs(tsk);
-+ return ia64_psr(pt)->ss;
-+}
-+
-+static inline void tracehook_abort_syscall(struct pt_regs *regs)
-+{
-+ regs->r15 = -1L;
-+}
-+
-+#endif
--- linux-2.6/include/asm-i386/i387.h.utrace-ptrace-compat
+++ linux-2.6/include/asm-i386/i387.h
@@ -126,17 +126,12 @@ extern int save_i387( struct _fpstate __
@@ -1008,7 +933,7 @@
extern int send_sig(int, struct task_struct *, int);
--- linux-2.6/include/linux/utrace.h.utrace-ptrace-compat
+++ linux-2.6/include/linux/utrace.h
-@@ -0,0 +1,481 @@
+@@ -0,0 +1,471 @@
+/*
+ * User Debugging Data & Event Rendezvous
+ *
@@ -1262,10 +1187,11 @@
+ /*
+ * Event reported for parent using CLONE_VFORK or vfork system call.
+ * The child has died or exec'd, so the vfork parent has unblocked
-+ * and is about to return child_pid.
++ * and is about to return child->pid.
+ */
+ u32 (*report_vfork_done)(struct utrace_attached_engine *engine,
-+ struct task_struct *parent, pid_t child_pid);
++ struct task_struct *parent,
++ struct task_struct *child);
+
+ /*
+ * Event reported after UTRACE_ACTION_QUIESCE is set, when the target
@@ -1383,22 +1309,11 @@
+ struct task_struct *target);
+
+ /*
-+ * Return the task_struct for the task using ptrace on this one, or
-+ * NULL. Always called with rcu_read_lock held to keep the
-+ * returned struct alive.
-+ *
-+ * At exec time, this may be called with task_lock(target) still
-+ * held from when unsafe_exec was just called. In that case it
-+ * must give results consistent with those unsafe_exec results,
-+ * i.e. non-NULL if any LSM_UNSAFE_PTRACE_* bits were set.
-+ *
-+ * The value is also used to display after "TracerPid:" in
-+ * /proc/PID/status, where it is called with only rcu_read_lock held.
-+ *
-+ * If this engine returns NULL, another engine may supply the result.
++ * Return the value to display after "TracerPid:" in /proc/PID/status.
++ * If this engine returns zero, another engine may supply the value.
+ */
-+ struct task_struct *(*tracer_task)(struct utrace_attached_engine *,
-+ struct task_struct *target);
++ pid_t (*tracer_pid)(struct utrace_attached_engine *engine,
++ struct task_struct *target);
+};
+
+
@@ -1477,13 +1392,13 @@
+int utrace_get_signal(struct task_struct *, struct pt_regs *,
+ siginfo_t *, struct k_sigaction *);
+void utrace_report_clone(unsigned long clone_flags, struct task_struct *child);
-+void utrace_report_vfork_done(pid_t child_pid);
++void utrace_report_vfork_done(struct task_struct *child);
+void utrace_report_exit(long *exit_code);
+void utrace_report_death(struct task_struct *);
+int utrace_report_jctl(int type);
+void utrace_report_exec(struct linux_binprm *bprm, struct pt_regs *regs);
+void utrace_report_syscall(struct pt_regs *regs, int is_exit);
-+struct task_struct *utrace_tracer_task(struct task_struct *);
++pid_t utrace_tracer_pid(struct task_struct *);
+int utrace_allow_access_process_vm(struct task_struct *);
+int utrace_unsafe_exec(struct task_struct *);
+void utrace_signal_handler_singlestep(struct task_struct *, struct pt_regs *);
@@ -1492,7 +1407,7 @@
+#endif /* linux/utrace.h */
--- linux-2.6/include/linux/ptrace.h.utrace-ptrace-compat
+++ linux-2.6/include/linux/ptrace.h
-@@ -49,66 +49,44 @@
+@@ -49,66 +49,42 @@
#include <asm/ptrace.h>
#ifdef __KERNEL__
@@ -1570,8 +1485,6 @@
+ * This reports any ptrace-child that is ready as do_wait would a normal child.
+ * If there are no ptrace children, returns -ECHILD.
+ * If there are some ptrace children but none reporting now, returns 0.
-+ * In those cases the tasklist_lock is still held so next_thread(tsk) works.
-+ * For any other return value, tasklist_lock is released before return.
+ */
+int ptrace_do_wait(struct task_struct *tsk,
+ pid_t pid, int options, struct siginfo __user *infop,
@@ -1606,7 +1519,7 @@
.sibling = LIST_HEAD_INIT(tsk.sibling), \
--- linux-2.6/include/linux/tracehook.h.utrace-ptrace-compat
+++ linux-2.6/include/linux/tracehook.h
-@@ -0,0 +1,645 @@
+@@ -0,0 +1,641 @@
+/*
+ * Tracing hooks
+ *
@@ -1798,10 +1711,8 @@
+ void **kbuf, void __user **ubuf,
+ const void *data, int start_pos, int end_pos)
+{
-+ if (*count == 0)
-+ return 0;
+ BUG_ON(*pos < start_pos);
-+ if (end_pos < 0 || *pos < end_pos) {
++ if (*count > 0 && (end_pos < 0 || *pos < end_pos)) {
+ unsigned int copy = (end_pos < 0 ? *count
+ : min(*count, end_pos - *pos));
+ data += *pos - start_pos;
@@ -1824,10 +1735,8 @@
+ const void **kbuf, const void __user **ubuf,
+ void *data, int start_pos, int end_pos)
+{
-+ if (*count == 0)
-+ return 0;
+ BUG_ON(*pos < start_pos);
-+ if (end_pos < 0 || *pos < end_pos) {
++ if (*count > 0 && (end_pos < 0 || *pos < end_pos)) {
+ unsigned int copy = (end_pos < 0 ? *count
+ : min(*count, end_pos - *pos));
+ data += *pos - start_pos;
@@ -1860,6 +1769,18 @@
+#include <linux/utrace.h>
+#endif
+
++/*
++ * Return the value to display after "TracerPid:" in /proc/PID/status.
++ * Called without locks.
++ */
++static inline pid_t tracehook_tracer_pid(struct task_struct *p)
++{
++#ifdef CONFIG_UTRACE
++ if (p->utrace_flags)
++ return utrace_tracer_pid(p);
++#endif
++ return 0;
++}
+
+/*
+ * Called in copy_process when setting up the copied task_struct,
@@ -2079,22 +2000,13 @@
+}
+
+/*
-+ * Return the task_struct for the task using ptrace on this one, or NULL.
-+ * Must be called with rcu_read_lock held to keep the returned struct alive.
-+ *
-+ * At exec time, this may be called with task_lock(p) still held from when
-+ * tracehook_unsafe_exec was just called.
-+ *
-+ * The value is also used to display after "TracerPid:" in /proc/PID/status,
-+ * where it is called with only rcu_read_lock held.
++ * Return nonzero if the task is being traced so security checks should apply.
++ * Called with task_lock(tsk) held.
+ */
-+static inline struct task_struct *tracehook_tracer_task(struct task_struct *p)
++static inline int tracehook_security_ptrace(struct task_struct *tsk)
+{
-+#ifdef CONFIG_UTRACE
-+ if (p->utrace_flags)
-+ return utrace_tracer_task(p);
-+#endif
-+ return NULL;
++ return 0;
++ // return (p->ptrace & PT_PTRACED);
+}
+
+/*
@@ -2200,15 +2112,12 @@
+/*
+ * Called after a CLONE_VFORK parent has waited for the child to complete.
+ * The clone/vfork system call will return immediately after this.
-+ * The child pointer may be invalid if a self-reaping child died and
-+ * tracehook_report_clone took no action to prevent it from self-reaping.
+ */
-+static inline void tracehook_report_vfork_done(struct task_struct *child,
-+ pid_t child_pid)
++static inline void tracehook_report_vfork_done(struct task_struct *child)
+{
+#ifdef CONFIG_UTRACE
+ if (current->utrace_flags & UTRACE_EVENT(VFORK_DONE))
-+ utrace_report_vfork_done(child_pid);
++ utrace_report_vfork_done(child);
+#endif
+}
+
@@ -2710,16 +2619,6 @@
+value. It says to push the signal back on the thread's queue, with
+the signal number and details possibly changed in info. When the
+thread is allowed to resume, it will dequeue and report it again.
---- linux-2.6/security/selinux/include/objsec.h.utrace-ptrace-compat
-+++ linux-2.6/security/selinux/include/objsec.h
-@@ -34,7 +34,6 @@ struct task_security_struct {
- u32 create_sid; /* fscreate SID */
- u32 keycreate_sid; /* keycreate SID */
- u32 sockcreate_sid; /* fscreate SID */
-- u32 ptrace_sid; /* SID of ptrace parent */
- };
-
- struct inode_security_struct {
--- linux-2.6/security/selinux/hooks.c.utrace-ptrace-compat
+++ linux-2.6/security/selinux/hooks.c
@@ -21,7 +21,7 @@
@@ -2731,115 +2630,24 @@
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/security.h>
-@@ -159,7 +159,7 @@ static int task_alloc_security(struct ta
- return -ENOMEM;
-
- tsec->task = task;
-- tsec->osid = tsec->sid = tsec->ptrace_sid = SECINITSID_UNLABELED;
-+ tsec->osid = tsec->sid = SECINITSID_UNLABELED;
- task->security = tsec;
+@@ -1397,7 +1397,7 @@ static int selinux_ptrace(struct task_st
- return 0;
-@@ -1387,19 +1387,13 @@ static int inode_security_set_sid(struct
-
- static int selinux_ptrace(struct task_struct *parent, struct task_struct *child)
- {
-- struct task_security_struct *psec = parent->security;
-- struct task_security_struct *csec = child->security;
- int rc;
-
- rc = secondary_ops->ptrace(parent,child);
- if (rc)
- return rc;
-
-- rc = task_has_perm(parent, child, PROCESS__PTRACE);
-- /* Save the SID of the tracing process for later use in apply_creds. */
+ rc = task_has_perm(parent, child, PROCESS__PTRACE);
+ /* Save the SID of the tracing process for later use in apply_creds. */
- if (!(child->ptrace & PT_PTRACED) && !rc)
-- csec->ptrace_sid = psec->sid;
-- return rc;
-+ return task_has_perm(parent, child, PROCESS__PTRACE);
- }
-
- static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
-@@ -1821,12 +1815,24 @@ static void selinux_bprm_apply_creds(str
- /* Check for ptracing, and update the task SID if ok.
- Otherwise, leave SID unchanged and kill. */
- if (unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) {
-- rc = avc_has_perm(tsec->ptrace_sid, sid,
-- SECCLASS_PROCESS, PROCESS__PTRACE,
-- NULL);
-- if (rc) {
-- bsec->unsafe = 1;
-- return;
-+ struct task_struct *t;
-+
-+ rcu_read_lock();
-+ t = tracehook_tracer_task(current);
-+ if (unlikely(t == NULL))
-+ rcu_read_unlock();
-+ else {
-+ struct task_security_struct *sec = t->security;
-+ u32 ptsid = sec->sid;
-+ rcu_read_unlock();
-+
-+ rc = avc_has_perm(ptsid, sid,
-+ SECCLASS_PROCESS,
-+ PROCESS__PTRACE, NULL);
-+ if (rc) {
-+ bsec->unsafe = 1;
-+ return;
-+ }
- }
- }
- tsec->sid = sid;
-@@ -2684,11 +2690,6 @@ static int selinux_task_alloc_security(s
- tsec2->keycreate_sid = tsec1->keycreate_sid;
- tsec2->sockcreate_sid = tsec1->sockcreate_sid;
-
-- /* Retain ptracer SID across fork, if any.
-- This will be reset by the ptrace hook upon any
-- subsequent ptrace_attach operations. */
-- tsec2->ptrace_sid = tsec1->ptrace_sid;
--
- return 0;
++ if (/* XXX !(child->ptrace & PT_PTRACED) && */ !rc)
+ csec->ptrace_sid = psec->sid;
+ return rc;
}
-
-@@ -4293,6 +4294,7 @@ static int selinux_setprocattr(struct ta
- char *name, void *value, size_t size)
- {
- struct task_security_struct *tsec;
-+ struct task_struct *tracer;
- u32 sid = 0;
- int error;
- char *str = value;
-@@ -4381,18 +4383,24 @@ static int selinux_setprocattr(struct ta
+@@ -4385,7 +4385,7 @@ static int selinux_setprocattr(struct ta
/* Check for ptracing, and update the task SID if ok.
Otherwise, leave SID unchanged and fail. */
task_lock(p);
- if (p->ptrace & PT_PTRACED) {
-- error = avc_has_perm_noaudit(tsec->ptrace_sid, sid,
-+ rcu_read_lock();
-+ tracer = tracehook_tracer_task(p);
-+ if (tracer != NULL) {
-+ struct task_security_struct *ptsec = tracer->security;
-+ u32 ptsid = ptsec->sid;
-+ rcu_read_unlock();
-+ error = avc_has_perm_noaudit(ptsid, sid,
++ if (tracehook_security_ptrace(p)) {
+ error = avc_has_perm_noaudit(tsec->ptrace_sid, sid,
SECCLASS_PROCESS,
PROCESS__PTRACE, &avd);
- if (!error)
- tsec->sid = sid;
- task_unlock(p);
-- avc_audit(tsec->ptrace_sid, sid, SECCLASS_PROCESS,
-+ avc_audit(ptsid, sid, SECCLASS_PROCESS,
- PROCESS__PTRACE, &avd, error, NULL);
- if (error)
- return error;
- } else {
-+ rcu_read_unlock();
- tsec->sid = sid;
- task_unlock(p);
- }
--- linux-2.6/kernel/fork.c.utrace-ptrace-compat
+++ linux-2.6/kernel/fork.c
@@ -36,7 +36,7 @@
@@ -2979,7 +2787,7 @@
wait_for_completion(&vfork);
- if (unlikely (current->ptrace & PT_TRACE_VFORK_DONE))
- ptrace_notify ((PTRACE_EVENT_VFORK_DONE << 8) | SIGTRAP);
-+ tracehook_report_vfork_done(p, nr);
++ tracehook_report_vfork_done(p);
}
} else {
free_pid(pid);
@@ -3041,7 +2849,7 @@
/*
* Handle magic process-wide effects of stop/continue signals.
-@@ -896,7 +893,7 @@ __group_complete_signal(int sig, struct
+@@ -887,7 +884,7 @@ __group_complete_signal(int sig, struct
*/
if (sig_fatal(p, sig) && !(p->signal->flags & SIGNAL_GROUP_EXIT) &&
!sigismember(&t->real_blocked, sig) &&
@@ -3050,7 +2858,7 @@
/*
* This signal will be fatal to the whole group.
*/
-@@ -1438,8 +1435,7 @@ void do_notify_parent(struct task_struct
+@@ -1429,8 +1426,7 @@ void do_notify_parent(struct task_struct
/* do_notify_parent_cldstop should have been called instead. */
BUG_ON(tsk->state & (TASK_STOPPED|TASK_TRACED));
@@ -3060,7 +2868,7 @@
info.si_signo = sig;
info.si_errno = 0;
-@@ -1464,7 +1460,7 @@ void do_notify_parent(struct task_struct
+@@ -1455,7 +1451,7 @@ void do_notify_parent(struct task_struct
psig = tsk->parent->sighand;
spin_lock_irqsave(&psig->siglock, flags);
@@ -3069,7 +2877,7 @@
(psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
(psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
/*
-@@ -1492,20 +1488,13 @@ void do_notify_parent(struct task_struct
+@@ -1483,20 +1479,13 @@ void do_notify_parent(struct task_struct
spin_unlock_irqrestore(&psig->siglock, flags);
}
@@ -3091,7 +2899,7 @@
info.si_signo = SIGCHLD;
info.si_errno = 0;
info.si_pid = tsk->pid;
-@@ -1530,6 +1519,15 @@ static void do_notify_parent_cldstop(str
+@@ -1521,6 +1510,15 @@ static void do_notify_parent_cldstop(str
BUG();
}
@@ -3107,7 +2915,7 @@
sighand = parent->sighand;
spin_lock_irqsave(&sighand->siglock, flags);
if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
-@@ -1542,110 +1540,6 @@ static void do_notify_parent_cldstop(str
+@@ -1533,110 +1531,6 @@ static void do_notify_parent_cldstop(str
spin_unlock_irqrestore(&sighand->siglock, flags);
}
@@ -3218,7 +3026,7 @@
static void
finish_stop(int stop_count)
{
-@@ -1654,7 +1548,7 @@ finish_stop(int stop_count)
+@@ -1645,7 +1539,7 @@ finish_stop(int stop_count)
* a group stop in progress and we are the last to stop,
* report to the parent. When ptraced, every thread reports itself.
*/
@@ -3227,7 +3035,7 @@
read_lock(&tasklist_lock);
do_notify_parent_cldstop(current, CLD_STOPPED);
read_unlock(&tasklist_lock);
-@@ -1779,44 +1673,24 @@ relock:
+@@ -1770,44 +1664,24 @@ relock:
handle_group_stop())
goto relock;
@@ -3288,7 +3096,7 @@
if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */
continue;
if (ka->sa.sa_handler != SIG_DFL) {
-@@ -1861,7 +1735,7 @@ relock:
+@@ -1852,7 +1726,7 @@ relock:
spin_lock_irq(¤t->sighand->siglock);
}
@@ -3297,7 +3105,7 @@
/* It released the siglock. */
goto relock;
}
-@@ -1888,13 +1762,13 @@ relock:
+@@ -1879,13 +1753,13 @@ relock:
* first and our do_group_exit call below will use
* that value and ignore the one we pass it.
*/
@@ -3313,7 +3121,7 @@
/* NOTREACHED */
}
spin_unlock_irq(¤t->sighand->siglock);
-@@ -1907,7 +1781,6 @@ EXPORT_SYMBOL(flush_signals);
+@@ -1898,7 +1772,6 @@ EXPORT_SYMBOL(flush_signals);
EXPORT_SYMBOL(force_sig);
EXPORT_SYMBOL(kill_pg);
EXPORT_SYMBOL(kill_proc);
@@ -3323,7 +3131,7 @@
EXPORT_SYMBOL(sigprocmask);
--- linux-2.6/kernel/utrace.c.utrace-ptrace-compat
+++ linux-2.6/kernel/utrace.c
-@@ -0,0 +1,1526 @@
+@@ -0,0 +1,1520 @@
+#include <linux/utrace.h>
+#include <linux/tracehook.h>
+#include <linux/err.h>
@@ -4262,7 +4070,7 @@
+ * Called iff UTRACE_EVENT(VFORK_DONE) flag is set.
+ */
+void
-+utrace_report_vfork_done(pid_t child_pid)
++utrace_report_vfork_done(struct task_struct *child)
+{
+ struct task_struct *tsk = current;
+ struct utrace *utrace = tsk->utrace;
@@ -4275,7 +4083,7 @@
+ list_for_each_safe_rcu(pos, next, &utrace->engines) {
+ engine = list_entry(pos, struct utrace_attached_engine, entry);
+ if (engine->flags & UTRACE_EVENT(VFORK_DONE))
-+ REPORT(report_vfork_done, child_pid);
++ REPORT(report_vfork_done, child);
+ if (action & UTRACE_ACTION_HIDE)
+ break;
+ }
@@ -4760,23 +4568,16 @@
+
+
+/*
-+ * Return the task_struct for the task using ptrace on this one, or NULL.
-+ * Must be called with rcu_read_lock held to keep the returned struct alive.
-+ *
-+ * At exec time, this may be called with task_lock(p) still held from when
-+ * tracehook_unsafe_exec was just called. In that case it must give
-+ * results consistent with those unsafe_exec results, i.e. non-NULL if
-+ * any LSM_UNSAFE_PTRACE_* bits were set.
-+ *
-+ * The value is also used to display after "TracerPid:" in /proc/PID/status,
-+ * where it is called with only rcu_read_lock held.
++ * Return the value to display after "TracerPid:" in /proc/PID/status.
++ * Called without locks.
+ */
-+struct task_struct *
-+utrace_tracer_task(struct task_struct *target)
++pid_t
++utrace_tracer_pid(struct task_struct *target)
+{
+ struct utrace *utrace;
-+ struct task_struct *tracer = NULL;
++ pid_t pid = 0;
+
++ rcu_read_lock();
+ utrace = rcu_dereference(target->utrace);
+ if (utrace != NULL) {
+ struct list_head *pos, *next;
@@ -4786,15 +4587,16 @@
+ engine = list_entry(pos, struct utrace_attached_engine,
+ entry);
+ ops = rcu_dereference(engine->ops);
-+ if (ops->tracer_task) {
-+ tracer = (*ops->tracer_task)(engine, target);
-+ if (tracer != NULL)
++ if (ops->tracer_pid) {
++ pid = (*ops->tracer_pid)(engine, target);
++ if (pid)
+ break;
+ }
+ }
+ }
++ rcu_read_unlock();
+
-+ return tracer;
++ return pid;
+}
+
+int
@@ -5252,7 +5054,23 @@
static long do_wait(pid_t pid, int options, struct siginfo __user *infop,
int __user *stat_addr, struct rusage __user *ru)
{
-@@ -1465,26 +1332,17 @@ repeat:
+@@ -1449,13 +1316,14 @@ repeat:
+ */
+ flag = 0;
+ current->state = TASK_INTERRUPTIBLE;
+- read_lock(&tasklist_lock);
+ tsk = current;
++ rcu_read_lock();
+ do {
+ struct task_struct *p;
+ struct list_head *_p;
+ int ret;
+
++ read_lock(&tasklist_lock);
+ list_for_each(_p,&tsk->children) {
+ p = list_entry(_p, struct task_struct, sibling);
+
+@@ -1465,26 +1333,17 @@ repeat:
switch (p->state) {
case TASK_TRACED:
@@ -5283,7 +5101,7 @@
continue;
retval = wait_task_stopped(p, ret == 2,
(options & WNOWAIT),
-@@ -1509,6 +1367,10 @@ repeat:
+@@ -1509,6 +1368,10 @@ repeat:
goto check_continued;
if (!likely(options & WEXITED))
continue;
@@ -5294,7 +5112,7 @@
retval = wait_task_zombie(
p, (options & WNOWAIT),
infop, stat_addr, ru);
-@@ -1525,6 +1387,8 @@ check_continued:
+@@ -1525,6 +1388,8 @@ check_continued:
flag = 1;
if (!unlikely(options & WCONTINUED))
continue;
@@ -5303,7 +5121,7 @@
retval = wait_task_continued(
p, (options & WNOWAIT),
infop, stat_addr, ru);
-@@ -1533,16 +1397,15 @@ check_continued:
+@@ -1533,23 +1398,25 @@ check_continued:
break;
}
}
@@ -5315,20 +5133,30 @@
- continue;
- flag = 1;
- break;
-- }
++ read_unlock(&tasklist_lock);
+
+ retval = ptrace_do_wait(tsk, pid, options,
+ infop, stat_addr, ru);
+ if (retval != -ECHILD) {
+ flag = 1;
-+ if (retval != 0) /* He released the lock. */
++ if (retval) {
++ rcu_read_unlock();
+ goto end;
+ }
}
+
if (options & __WNOTHREAD)
break;
tsk = next_thread(tsk);
-@@ -1566,7 +1429,7 @@ end:
+ BUG_ON(tsk->signal != current->signal);
+ } while (tsk != current);
++ rcu_read_unlock();
+
+- read_unlock(&tasklist_lock);
+ if (flag) {
+ retval = 0;
+ if (options & WNOHANG)
+@@ -1566,7 +1433,7 @@ end:
remove_wait_queue(¤t->signal->wait_chldexit,&wait);
if (infop) {
if (retval > 0)
@@ -5579,7 +5407,7 @@
/*
* Access another process' address space.
* Source/target buffer must be kernel space,
-@@ -295,249 +125,1341 @@ int access_process_vm(struct task_struct
+@@ -295,249 +125,1303 @@ int access_process_vm(struct task_struct
return buf - old_buf;
}
@@ -5784,9 +5612,7 @@
+ retval = -EPERM;
+ }
+ else {
-+ task_lock(current);
+ retval = security_ptrace(current->parent, current);
-+ task_unlock(current);
+ if (!retval)
+ retval = ptrace_setup(current, engine,
+ current->parent, 0, 0);
@@ -5855,7 +5681,7 @@
+ struct ptrace_state *state = (struct ptrace_state *) engine->data;
+ /*
+ * Clearing ->data before detach makes sure an unrelated task
-+ * calling into ptrace_tracer_task won't try to touch stale state.
++ * calling into ptrace_tracer_pid won't try to touch stale state.
+ */
+ rcu_assign_pointer(engine->data, 0UL);
+ utrace_detach(task, engine);
@@ -5892,7 +5718,8 @@
+ list_for_each_entry_rcu(state, &tsk->ptracees, entry) {
+ rcu_assign_pointer(state->engine->data, 0UL);
+ utrace_detach(state->task, state->engine);
-+ }
+ }
+- spin_unlock_irq(&child->sighand->siglock);
+
+ /*
+ * Now clear out our list and clean up our data structures.
@@ -5902,8 +5729,7 @@
+ list_for_each_entry_safe(state, next, &tsk->ptracees, entry) {
+ list_del_rcu(&state->entry);
+ ptrace_done(state);
- }
-- spin_unlock_irq(&child->sighand->siglock);
++ }
+ task_unlock(tsk);
}
- read_unlock(&tasklist_lock);
@@ -5965,7 +5791,7 @@
+
+ return utrace_inject_signal(target, engine,
+ UTRACE_ACTION_RESUME, info, NULL);
-+ }
+ }
+
+ return 0;
+}
@@ -5994,7 +5820,7 @@
+ return -EINVAL;
+ pos = (addr - regset->bias) * regset->size;
+ n = 1;
- }
++ }
+ else
+ n = nregs == 0 ? regset->n : nregs;
+
@@ -6153,21 +5979,6 @@
+ utrace_set_flags(child, engine,
+ engine->flags | UTRACE_ACTION_QUIESCE);
+ }
-+
-+ /*
-+ * We do this for all requests to match traditional ptrace behavior.
-+ * If the machine state synchronization done at context switch time
-+ * includes e.g. writing back to user memory, we want to make sure
-+ * that has finished before a PTRACE_PEEKDATA can fetch the results.
-+ * On most machines, only regset data is affected by context switch
-+ * and calling utrace_regset later on will take care of that, so
-+ * this is superfluous.
-+ *
-+ * To do this purely in utrace terms, we could do:
-+ * (void) utrace_regset(child, engine, utrace_native_view(child), 0);
-+ */
-+ wait_task_inactive(child);
-+
+ if (child->exit_state)
+ goto out_tsk;
+
@@ -6534,20 +6345,15 @@
return ret;
}
+#endif
-+
-/**
- * ptrace_traceme -- helper for PTRACE_TRACEME
- *
- * Performs checks and sets PT_PTRACED.
- * Should be used by all ptrace implementations for PTRACE_TRACEME.
-+/*
-+ * We're called with tasklist_lock held for reading.
-+ * If we return -ECHILD or zero, next_thread(tsk) must still be valid to use.
-+ * If we return another error code, or a successful PID value, we
-+ * release tasklist_lock first.
- */
+- */
-int ptrace_traceme(void)
++
+int
+ptrace_do_wait(struct task_struct *tsk,
+ pid_t pid, int options, struct siginfo __user *infop,
@@ -6624,16 +6430,6 @@
+ why = CLD_TRAPPED;
+ status = (p->exit_code << 8) | 0x7f;
+ }
-
- /*
-- * Are we already being traced?
-+ * At this point we are committed to a successful return
-+ * or a user error return. Release the tasklist_lock.
- */
-- task_lock(current);
-- if (!(current->ptrace & PT_PTRACED)) {
-- ret = security_ptrace(current->parent, current);
-+ read_unlock(&tasklist_lock);
+
+ if (rusagep)
+ err = getrusage(p, RUSAGE_BOTH, rusagep);
@@ -6658,7 +6454,13 @@
+ struct utrace *utrace;
+
+ err = p->pid;
-+
+
+- /*
+- * Are we already being traced?
+- */
+- task_lock(current);
+- if (!(current->ptrace & PT_PTRACED)) {
+- ret = security_ptrace(current->parent, current);
/*
- * Set the ptrace bit in the process ptrace flags.
+ * If this was a non-death report, the child might now be
@@ -6744,7 +6546,10 @@
*/
- if (pid == 1)
- return ERR_PTR(-EPERM);
--
++ wake_up_interruptible_sync(&parent->signal->wait_chldexit);
++ spin_unlock_irqrestore(&sighand->siglock, flags);
++}
+
- read_lock(&tasklist_lock);
- child = find_task_by_pid(pid);
- if (child)
@@ -6753,18 +6558,10 @@
- if (!child)
- return ERR_PTR(-ESRCH);
- return child;
-+ wake_up_interruptible_sync(&parent->signal->wait_chldexit);
-+ spin_unlock_irqrestore(&sighand->siglock, flags);
- }
-
--#ifndef __ARCH_SYS_PTRACE
--asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
+static u32
+ptrace_report(struct utrace_attached_engine *engine, struct task_struct *tsk,
+ int code)
- {
-- struct task_struct *child;
-- long ret;
++{
+ struct ptrace_state *state = (struct ptrace_state *) engine->data;
+
+#ifdef PTRACE_DEBUG
@@ -6779,21 +6576,6 @@
+ }
+#endif
+
-+ BUG_ON(state->u.live.stopped);
-
- /*
-- * This lock_kernel fixes a subtle race with suid exec
-+ * Set our QUIESCE flag right now, before notifying the tracer.
-+ * We do this before setting state->u.live.stopped rather than
-+ * by using UTRACE_ACTION_NEWSTATE in our return value, to
-+ * ensure that the tracer can't get the notification and then
-+ * try to resume us with PTRACE_CONT before we set the flag.
- */
-- lock_kernel();
-- if (request == PTRACE_TRACEME) {
-- ret = ptrace_traceme();
-+ utrace_set_flags(tsk, engine, engine->flags | UTRACE_ACTION_QUIESCE);
-+
+ state->u.live.stopped = 1;
+ state->u.live.reported = 0;
+ tsk->exit_code = code;
@@ -6804,18 +6586,29 @@
+ current->pid, current->exit_code);
+#endif
+
-+ return UTRACE_ACTION_RESUME;
-+}
-+
++ return (UTRACE_ACTION_NEWSTATE
++ | UTRACE_ACTION_QUIESCE | UTRACE_ACTION_NOREAP);
+ }
+
+-#ifndef __ARCH_SYS_PTRACE
+-asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
+static inline u32
+ptrace_event(struct utrace_attached_engine *engine, struct task_struct *tsk,
+ int event)
-+{
+ {
+- struct task_struct *child;
+- long ret;
+ struct ptrace_state *state = (struct ptrace_state *) engine->data;
+ state->u.live.syscall = 0;
+ return ptrace_report(engine, tsk, (event << 8) | SIGTRAP);
+}
-+
+
+- /*
+- * This lock_kernel fixes a subtle race with suid exec
+- */
+- lock_kernel();
+- if (request == PTRACE_TRACEME) {
+- ret = ptrace_traceme();
+
+static u32
+ptrace_report_death(struct utrace_attached_engine *engine,
@@ -6925,11 +6718,8 @@
- return ret;
+static u32
+ptrace_report_vfork_done(struct utrace_attached_engine *engine,
-+ struct task_struct *parent, pid_t child_pid)
++ struct task_struct *parent, struct task_struct *child)
+{
-+ struct ptrace_state *state = (struct ptrace_state *) engine->data;
-+ state->u.live.have_eventmsg = 1;
-+ state->u.live.u.eventmsg = child_pid;
+ return ptrace_event(engine, parent, PTRACE_EVENT_VFORK_DONE);
+}
+
@@ -6954,8 +6744,7 @@
+ struct task_struct *tsk, int type)
+{
+ return UTRACE_ACTION_RESUME; /* XXX */
- }
--#endif /* __ARCH_SYS_PTRACE */
++}
+
+static u32
+ptrace_report_exec(struct utrace_attached_engine *engine,
@@ -6998,7 +6787,8 @@
+ struct task_struct *tsk, struct pt_regs *regs)
+{
+ return ptrace_report_syscall(engine, tsk, regs, 0);
-+}
+ }
+-#endif /* __ARCH_SYS_PTRACE */
+
+static u32
+ptrace_report_exit(struct utrace_attached_engine *engine,
@@ -7021,20 +6811,24 @@
+ return unsafe;
+}
+
-+static struct task_struct *
-+ptrace_tracer_task(struct utrace_attached_engine *engine,
-+ struct task_struct *target)
++static pid_t
++ptrace_tracer_pid(struct utrace_attached_engine *engine,
++ struct task_struct *target)
+{
+ struct ptrace_state *state;
++ pid_t pid;
+
+ /*
+ * This call is not necessarily made by the target task,
+ * so ptrace might be getting detached while we run here.
+ * The state pointer will be NULL if that happens.
+ */
++ rcu_read_lock();
+ state = rcu_dereference((struct ptrace_state *) engine->data);
++ pid = state == NULL ? 0 : state->parent->pid;
++ rcu_read_unlock();
+
-+ return state == NULL ? NULL : state->parent;
++ return pid;
+}
+
+static int
@@ -7074,7 +6868,7 @@
+ .report_exit = ptrace_report_exit,
+ .report_death = ptrace_report_death,
+ .unsafe_exec = ptrace_unsafe_exec,
-+ .tracer_task = ptrace_tracer_task,
++ .tracer_pid = ptrace_tracer_pid,
+ .allow_access_process_vm = ptrace_allow_access_process_vm,
+};
+
@@ -7180,36 +6974,18 @@
#include <linux/rcupdate.h>
#include <linux/delayacct.h>
-@@ -158,10 +159,17 @@ static inline const char * get_task_stat
-
- static inline char * task_state(struct task_struct *p, char *buffer)
- {
-+ struct task_struct *tracer;
-+ pid_t tracer_pid;
- struct group_info *group_info;
- int g;
- struct fdtable *fdt = NULL;
-
-+ rcu_read_lock();
-+ tracer = tracehook_tracer_task(p);
-+ tracer_pid = tracer == NULL ? 0 : tracer->pid;
-+ rcu_read_unlock();
-+
- read_lock(&tasklist_lock);
- buffer += sprintf(buffer,
- "State:\t%s\n"
-@@ -175,8 +183,8 @@ static inline char * task_state(struct t
+@@ -175,8 +176,8 @@ static inline char * task_state(struct t
get_task_state(p),
(p->sleep_avg/1024)*100/(1020000000/1024),
p->tgid,
- p->pid, pid_alive(p) ? p->group_leader->real_parent->tgid : 0,
- pid_alive(p) && p->ptrace ? p->parent->pid : 0,
+ p->pid, pid_alive(p) ? p->group_leader->parent->tgid : 0,
-+ tracer_pid,
++ tracehook_tracer_pid(p),
p->uid, p->euid, p->suid, p->fsuid,
p->gid, p->egid, p->sgid, p->fsgid);
read_unlock(&tasklist_lock);
-@@ -386,7 +394,7 @@ static int do_task_stat(struct task_stru
+@@ -386,7 +387,7 @@ static int do_task_stat(struct task_stru
stime = cputime_add(stime, task->signal->stime);
}
}
@@ -10577,7 +10353,7 @@
* Copyright (C) 1997 Jakub Jelinek (jj at sunsite.mff.cuni.cz)
*
* Based upon code written by Ross Biro, Linus Torvalds, Bob Manson,
-@@ -11,103 +11,598 @@
+@@ -11,103 +11,597 @@
*/
#include <linux/kernel.h>
@@ -10607,13 +10383,7 @@
#include <asm/page.h>
#include <asm/cpudata.h>
+#include <asm/psrcompat.h>
-
--/* Returning from ptrace is a bit tricky because the syscall return
-- * low level code assumes any value returned which is negative and
-- * is a valid errno will mean setting the condition codes to indicate
-- * an error return. This doesn't work, so we have this hook.
-- */
--static inline void pt_error_return(struct pt_regs *regs, unsigned long error)
++
+#define GENREG_G0 0
+#define GENREG_O0 8
+#define GENREG_L0 16
@@ -10629,11 +10399,7 @@
+ const struct utrace_regset *regset,
+ unsigned int pos, unsigned int count,
+ void *kbuf, void __user *ubuf)
- {
-- regs->u_regs[UREG_I0] = error;
-- regs->tstate |= (TSTATE_ICARRY | TSTATE_XCARRY);
-- regs->tpc = regs->tnpc;
-- regs->tnpc += 4;
++{
+ struct pt_regs *regs = task_pt_regs(target);
+ int err;
+
@@ -10683,12 +10449,16 @@
+ }
+
+ return err;
- }
++}
--static inline void pt_succ_return(struct pt_regs *regs, unsigned long value)
+-/* Returning from ptrace is a bit tricky because the syscall return
+- * low level code assumes any value returned which is negative and
+- * is a valid errno will mean setting the condition codes to indicate
+- * an error return. This doesn't work, so we have this hook.
+/* Consistent with signal handling, we only allow userspace to
+ * modify the %asi, %icc, and %xcc fields of the %tstate register.
-+ */
+ */
+-static inline void pt_error_return(struct pt_regs *regs, unsigned long error)
+#define TSTATE_DEBUGCHANGE (TSTATE_ASI | TSTATE_ICC | TSTATE_XCC)
+
+static int genregs_set(struct task_struct *target,
@@ -10696,8 +10466,8 @@
+ unsigned int pos, unsigned int count,
+ const void *kbuf, const void __user *ubuf)
{
-- regs->u_regs[UREG_I0] = value;
-- regs->tstate &= ~(TSTATE_ICARRY | TSTATE_XCARRY);
+- regs->u_regs[UREG_I0] = error;
+- regs->tstate |= (TSTATE_ICARRY | TSTATE_XCARRY);
- regs->tpc = regs->tnpc;
- regs->tnpc += 4;
+ struct pt_regs *regs = task_pt_regs(target);
@@ -10762,8 +10532,7 @@
+ return err;
}
--static inline void
--pt_succ_return_linux(struct pt_regs *regs, unsigned long value, void __user *addr)
+-static inline void pt_succ_return(struct pt_regs *regs, unsigned long value)
+#define FPREG_F0 0
+#define FPREG_FSR 32
+#define FPREG_GSR 33
@@ -10776,16 +10545,10 @@
+ unsigned int pos, unsigned int count,
+ void *kbuf, void __user *ubuf)
{
-- if (test_thread_flag(TIF_32BIT)) {
-- if (put_user(value, (unsigned int __user *) addr)) {
-- pt_error_return(regs, EFAULT);
-- return;
-- }
-- } else {
-- if (put_user(value, (long __user *) addr)) {
-- pt_error_return(regs, EFAULT);
-- return;
-- }
+- regs->u_regs[UREG_I0] = value;
+- regs->tstate &= ~(TSTATE_ICARRY | TSTATE_XCARRY);
+- regs->tpc = regs->tnpc;
+- regs->tnpc += 4;
+ struct thread_info *t = task_thread_info(target);
+ int err;
+
@@ -10809,26 +10572,27 @@
+ *(unsigned long *) kbuf = regs->fprs;
+ else if (put_user(regs->fprs, (unsigned long __user *) ubuf))
+ return -EFAULT;
- }
-- regs->u_regs[UREG_I0] = 0;
-- regs->tstate &= ~(TSTATE_ICARRY | TSTATE_XCARRY);
-- regs->tpc = regs->tnpc;
-- regs->tnpc += 4;
++ }
+
+ return err;
}
--static void
--pt_os_succ_return (struct pt_regs *regs, unsigned long val, void __user *addr)
+-static inline void
+-pt_succ_return_linux(struct pt_regs *regs, unsigned long value, void __user *addr)
+static int fpregs_set(struct task_struct *target,
+ const struct utrace_regset *regset,
+ unsigned int pos, unsigned int count,
+ const void *kbuf, const void __user *ubuf)
{
-- if (current->personality == PER_SUNOS)
-- pt_succ_return (regs, val);
-- else
-- pt_succ_return_linux (regs, val, addr);
+- if (test_thread_flag(TIF_32BIT)) {
+- if (put_user(value, (unsigned int __user *) addr)) {
+- pt_error_return(regs, EFAULT);
+- return;
+- }
+- } else {
+- if (put_user(value, (long __user *) addr)) {
+- pt_error_return(regs, EFAULT);
+- return;
+ struct thread_info *t = task_thread_info(target);
+ int err;
+
@@ -10855,10 +10619,8 @@
+ }
+
+ return err;
- }
-
--/* #define ALLOW_INIT_TRACING */
--/* #define DEBUG_PTRACE */
++}
++
+static const struct utrace_regset native_regsets[] = {
+ {
+ .n = SPARC64_NGREGS,
@@ -10871,21 +10633,12 @@
+ .get = fpregs_get, .set = fpregs_set
+ },
+};
-
--#ifdef DEBUG_PTRACE
--char *pt_rq [] = {
-- /* 0 */ "TRACEME", "PEEKTEXT", "PEEKDATA", "PEEKUSR",
-- /* 4 */ "POKETEXT", "POKEDATA", "POKEUSR", "CONT",
-- /* 8 */ "KILL", "SINGLESTEP", "SUNATTACH", "SUNDETACH",
-- /* 12 */ "GETREGS", "SETREGS", "GETFPREGS", "SETFPREGS",
-- /* 16 */ "READDATA", "WRITEDATA", "READTEXT", "WRITETEXT",
-- /* 20 */ "GETFPAREGS", "SETFPAREGS", "unknown", "unknown",
-- /* 24 */ "SYSCALL", ""
++
+const struct utrace_regset_view utrace_sparc64_native_view = {
+ .name = UTS_MACHINE, .e_machine = ELF_ARCH,
+ .regsets = native_regsets,
+ .n = sizeof native_regsets / sizeof native_regsets[0],
- };
++};
+EXPORT_SYMBOL_GPL(utrace_sparc64_native_view);
+
+#ifdef CONFIG_COMPAT
@@ -10969,8 +10722,12 @@
+ ubuf += sizeof(u32);
+ pos += sizeof(u32);
+ count -= sizeof(u32);
-+ }
-+ }
+ }
+ }
+- regs->u_regs[UREG_I0] = 0;
+- regs->tstate &= ~(TSTATE_ICARRY | TSTATE_XCARRY);
+- regs->tpc = regs->tnpc;
+- regs->tnpc += 4;
+
+ if (count > 0 && pos == (GENREG32_PSR * 4)) {
+ u32 psr = tstate_to_psr(regs->tstate);
@@ -11034,13 +10791,19 @@
+ }
+
+ return 0;
-+}
-+
+ }
+
+-static void
+-pt_os_succ_return (struct pt_regs *regs, unsigned long val, void __user *addr)
+static int genregs32_set(struct task_struct *target,
+ const struct utrace_regset *regset,
+ unsigned int pos, unsigned int count,
+ const void *kbuf, const void __user *ubuf)
-+{
+ {
+- if (current->personality == PER_SUNOS)
+- pt_succ_return (regs, val);
+- else
+- pt_succ_return_linux (regs, val, addr);
+ struct pt_regs *regs = task_pt_regs(target);
+
+ while (count > 0 && pos < (GENREG32_L0 * 4)) {
@@ -11154,8 +10917,25 @@
+ /* Ignore WIM and TBR */
+
+ return 0;
-+}
- #endif
+ }
+
+-/* #define ALLOW_INIT_TRACING */
+-/* #define DEBUG_PTRACE */
++#define FPREG32_F0 0
++#define FPREG32_FSR 32
+
+-#ifdef DEBUG_PTRACE
+-char *pt_rq [] = {
+- /* 0 */ "TRACEME", "PEEKTEXT", "PEEKDATA", "PEEKUSR",
+- /* 4 */ "POKETEXT", "POKEDATA", "POKEUSR", "CONT",
+- /* 8 */ "KILL", "SINGLESTEP", "SUNATTACH", "SUNDETACH",
+- /* 12 */ "GETREGS", "SETREGS", "GETFPREGS", "SETFPREGS",
+- /* 16 */ "READDATA", "WRITEDATA", "READTEXT", "WRITETEXT",
+- /* 20 */ "GETFPAREGS", "SETFPAREGS", "unknown", "unknown",
+- /* 24 */ "SYSCALL", ""
+-};
+-#endif
++#define SPARC32_NFPREGS 33
-/*
- * Called by kernel/ptrace.c when detaching..
@@ -11163,11 +10943,6 @@
- * Make sure single step bits etc are not set.
- */
-void ptrace_disable(struct task_struct *child)
-+#define FPREG32_F0 0
-+#define FPREG32_FSR 32
-+
-+#define SPARC32_NFPREGS 33
-+
+static int fpregs32_get(struct task_struct *target,
+ const struct utrace_regset *regset,
+ unsigned int pos, unsigned int count,
@@ -11240,20 +11015,7 @@
/* To get the necessary page struct, access_process_vm() first calls
* get_user_pages(). This has done a flush_dcache_page() on the
* accessed page. Then our caller (copy_{to,from}_user_page()) did
-@@ -167,6 +662,7 @@ void flush_ptrace_access(struct vm_area_
- }
- }
-
-+#if 0 /* XXX */
- asmlinkage void do_ptrace(struct pt_regs *regs)
- {
- int request = regs->u_regs[UREG_I0];
-@@ -640,11 +1136,13 @@ out_tsk:
- out:
- unlock_kernel();
- }
-+#endif
-
+@@ -644,7 +1138,8 @@ out:
asmlinkage void syscall_trace(struct pt_regs *regs, int syscall_exit_p)
{
/* do the secure computing check first */
@@ -11263,21 +11025,21 @@
if (unlikely(current->audit_context) && syscall_exit_p) {
unsigned long tstate = regs->tstate;
-@@ -656,26 +1154,9 @@ asmlinkage void syscall_trace(struct pt_
+@@ -656,26 +1151,9 @@ asmlinkage void syscall_trace(struct pt_
audit_syscall_exit(result, regs->u_regs[UREG_I0]);
}
- if (!(current->ptrace & PT_PTRACED))
- goto out;
--
++ if (test_thread_flag(TIF_SYSCALL_TRACE))
++ tracehook_report_syscall(regs, syscall_exit_p);
+
- if (!test_thread_flag(TIF_SYSCALL_TRACE))
- goto out;
-
- ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
- ? 0x80 : 0));
-+ if (test_thread_flag(TIF_SYSCALL_TRACE))
-+ tracehook_report_syscall(regs, syscall_exit_p);
-
+-
- /*
- * this isn't the same as continuing with a signal, but it will do
- * for normal use. strace only continues with a signal if the
@@ -11372,26 +11134,6 @@
INIT_LIST_HEAD(&p->children);
INIT_LIST_HEAD(&p->sibling);
strncpy(p->comm, type, sizeof(p->comm)-1);
---- linux-2.6/arch/ia64/kernel/signal.c.utrace-ptrace-compat
-+++ linux-2.6/arch/ia64/kernel/signal.c
-@@ -10,7 +10,7 @@
- #include <linux/errno.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
--#include <linux/ptrace.h>
-+#include <linux/tracehook.h>
- #include <linux/sched.h>
- #include <linux/signal.h>
- #include <linux/smp.h>
-@@ -471,6 +471,8 @@ handle_signal (unsigned long sig, struct
- sigaddset(¤t->blocked, sig);
- recalc_sigpending();
- spin_unlock_irq(¤t->sighand->siglock);
-+
-+ tracehook_report_handle_signal(sig, ka, oldset, &scr->pt);
- return 1;
- }
-
--- linux-2.6/arch/ia64/kernel/fsys.S.utrace-ptrace-compat
+++ linux-2.6/arch/ia64/kernel/fsys.S
@@ -83,29 +83,29 @@ ENTRY(fsys_getppid)
@@ -11533,54 +11275,9 @@
DEFINE(IA64_TASK_SIGHAND_OFFSET,offsetof (struct task_struct, sighand));
DEFINE(IA64_TASK_SIGNAL_OFFSET,offsetof (struct task_struct, signal));
DEFINE(IA64_TASK_TGID_OFFSET, offsetof (struct task_struct, tgid));
---- linux-2.6/arch/ia64/ia32/ia32_entry.S.utrace-ptrace-compat
-+++ linux-2.6/arch/ia64/ia32/ia32_entry.S
-@@ -236,7 +236,7 @@ ia32_syscall_table:
- data8 sys_setuid /* 16-bit version */
- data8 sys_getuid /* 16-bit version */
- data8 compat_sys_stime /* 25 */
-- data8 sys32_ptrace
-+ data8 compat_sys_ptrace
- data8 sys32_alarm
- data8 sys_ni_syscall
- data8 sys32_pause
--- linux-2.6/arch/ia64/ia32/sys_ia32.c.utrace-ptrace-compat
+++ linux-2.6/arch/ia64/ia32/sys_ia32.c
-@@ -1419,25 +1419,6 @@ sys32_waitpid (int pid, unsigned int *st
- return compat_sys_wait4(pid, stat_addr, options, NULL);
- }
-
--static unsigned int
--ia32_peek (struct task_struct *child, unsigned long addr, unsigned int *val)
--{
-- size_t copied;
-- unsigned int ret;
--
-- copied = access_process_vm(child, addr, val, sizeof(*val), 0);
-- return (copied != sizeof(ret)) ? -EIO : 0;
--}
--
--static unsigned int
--ia32_poke (struct task_struct *child, unsigned long addr, unsigned int val)
--{
--
-- if (access_process_vm(child, addr, &val, sizeof(val), 1) != sizeof(val))
-- return -EIO;
-- return 0;
--}
--
- /*
- * The order in which registers are stored in the ptrace regs structure
- */
-@@ -1735,6 +1716,7 @@ restore_ia32_fpxstate (struct task_struc
- return 0;
- }
-
-+#if 0 /* XXX */
- asmlinkage long
- sys32_ptrace (int request, pid_t pid, unsigned int addr, unsigned int data)
- {
-@@ -1842,9 +1824,11 @@ sys32_ptrace (int request, pid_t pid, un
+@@ -1842,9 +1842,11 @@ sys32_ptrace (int request, pid_t pid, un
compat_ptr(data));
break;
@@ -11592,14 +11289,6 @@
case PTRACE_SYSCALL: /* continue, stop after next syscall */
case PTRACE_CONT: /* restart after signal. */
-@@ -1865,6 +1849,7 @@ sys32_ptrace (int request, pid_t pid, un
- unlock_kernel();
- return ret;
- }
-+#endif
-
- typedef struct {
- unsigned int ss_sp;
--- linux-2.6/arch/ppc/kernel/asm-offsets.c.utrace-ptrace-compat
+++ linux-2.6/arch/ppc/kernel/asm-offsets.c
@@ -37,7 +37,6 @@ main(void)
@@ -11732,7 +11421,7 @@
#ifdef CONFIG_COMPAT
#include "compat_ptrace.h"
-@@ -87,31 +91,499 @@ FixPerRegisters(struct task_struct *task
+@@ -87,31 +91,497 @@ FixPerRegisters(struct task_struct *task
}
void
@@ -11741,7 +11430,6 @@
{
task->thread.per_info.single_step = 1;
FixPerRegisters(task);
-+ set_tsk_thread_flag(task, TIF_SINGLE_STEP);
}
void
@@ -11750,7 +11438,6 @@
{
task->thread.per_info.single_step = 0;
FixPerRegisters(task);
-+ clear_tsk_thread_flag(task, TIF_SINGLE_STEP);
}
+int
@@ -12241,7 +11928,7 @@
#ifndef CONFIG_64BIT
# define __ADDR_MASK 3
#else
-@@ -593,6 +1065,7 @@ do_ptrace_emu31(struct task_struct *chil
+@@ -593,6 +1063,7 @@ do_ptrace_emu31(struct task_struct *chil
copied += sizeof(unsigned int);
}
return 0;
@@ -12249,7 +11936,7 @@
case PTRACE_GETEVENTMSG:
return put_user((__u32) child->ptrace_message,
(unsigned int __user *) data);
-@@ -606,6 +1079,7 @@ do_ptrace_emu31(struct task_struct *chil
+@@ -606,6 +1077,7 @@ do_ptrace_emu31(struct task_struct *chil
return -EINVAL;
return copy_siginfo_from_user32(child->last_siginfo,
(compat_siginfo_t __user *) data);
@@ -12257,7 +11944,7 @@
}
return ptrace_request(child, request, addr, data);
}
-@@ -656,7 +1130,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -656,7 +1128,7 @@ do_ptrace(struct task_struct *child, lon
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
child->exit_code = data;
/* make sure the single step bit is not set. */
@@ -12266,7 +11953,7 @@
wake_up_process(child);
return 0;
-@@ -670,7 +1144,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -670,7 +1142,7 @@ do_ptrace(struct task_struct *child, lon
return 0;
child->exit_code = SIGKILL;
/* make sure the single step bit is not set. */
@@ -12275,7 +11962,7 @@
wake_up_process(child);
return 0;
-@@ -683,7 +1157,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -683,7 +1155,7 @@ do_ptrace(struct task_struct *child, lon
if (data)
set_tsk_thread_flag(child, TIF_SINGLE_STEP);
else
@@ -12284,7 +11971,7 @@
/* give it a chance to run. */
wake_up_process(child);
return 0;
-@@ -704,31 +1178,9 @@ do_ptrace(struct task_struct *child, lon
+@@ -704,31 +1176,9 @@ do_ptrace(struct task_struct *child, lon
/* Not reached. */
return -EIO;
}
@@ -12317,7 +12004,7 @@
asmlinkage void
syscall_trace(struct pt_regs *regs, int entryexit)
-@@ -736,30 +1188,17 @@ syscall_trace(struct pt_regs *regs, int
+@@ -736,30 +1186,17 @@ syscall_trace(struct pt_regs *regs, int
if (unlikely(current->audit_context) && entryexit)
audit_syscall_exit(AUDITSC_RESULT(regs->gprs[2]), regs->gprs[2]);
linux-2.6-xen.patch:
arch/i386/Kconfig | 86
arch/i386/Kconfig.cpu | 4
arch/i386/Kconfig.debug | 2
arch/i386/Makefile | 24
arch/i386/boot-xen/Makefile | 21
arch/i386/kernel/Makefile | 21
arch/i386/kernel/acpi/Makefile | 4
arch/i386/kernel/acpi/boot-xen.c | 1168 ++++++++
arch/i386/kernel/alternative.c | 4
arch/i386/kernel/apic-xen.c | 160 +
arch/i386/kernel/asm-offsets.c | 7
arch/i386/kernel/cpu/Makefile | 5
arch/i386/kernel/cpu/common-xen.c | 740 +++++
arch/i386/kernel/cpu/mtrr/Makefile | 7
arch/i386/kernel/cpu/mtrr/main-xen.c | 197 +
arch/i386/kernel/early_printk-xen.c | 2
arch/i386/kernel/entry-xen.S | 1188 ++++++++
arch/i386/kernel/entry.S | 6
arch/i386/kernel/fixup.c | 93
arch/i386/kernel/head-xen.S | 180 +
arch/i386/kernel/init_task-xen.c | 51
arch/i386/kernel/io_apic-xen.c | 2772 ++++++++++++++++++++
arch/i386/kernel/ioport-xen.c | 121
arch/i386/kernel/irq-xen.c | 324 ++
arch/i386/kernel/ldt-xen.c | 269 +
arch/i386/kernel/microcode-xen.c | 147 +
arch/i386/kernel/mpparse-xen.c | 1186 ++++++++
arch/i386/kernel/pci-dma-xen.c | 378 ++
arch/i386/kernel/process-xen.c | 815 +++++
arch/i386/kernel/quirks-xen.c | 48
arch/i386/kernel/setup-xen.c | 1827 +++++++++++++
arch/i386/kernel/smp-xen.c | 624 ++++
arch/i386/kernel/swiotlb.c | 672 ++++
arch/i386/kernel/sysenter.c | 22
arch/i386/kernel/time-xen.c | 1103 +++++++
arch/i386/kernel/traps-xen.c | 1182 ++++++++
arch/i386/kernel/traps.c | 9
arch/i386/kernel/tsc.c | 2
arch/i386/kernel/vm86.c | 12
arch/i386/kernel/vsyscall-note-xen.S | 32
arch/i386/lib/delay.c | 3
arch/i386/mach-xen/Makefile | 5
arch/i386/mach-xen/setup.c | 154 +
arch/i386/mm/Makefile | 8
arch/i386/mm/fault-xen.c | 770 +++++
arch/i386/mm/highmem-xen.c | 133
arch/i386/mm/hypervisor.c | 458 +++
arch/i386/mm/init-xen.c | 852 ++++++
arch/i386/mm/ioremap-xen.c | 476 +++
arch/i386/mm/pageattr.c | 2
arch/i386/mm/pgtable-xen.c | 693 +++++
arch/i386/mm/pgtable.c | 12
arch/i386/oprofile/Makefile | 4
arch/i386/oprofile/xenoprof.c | 555 ++++
arch/i386/pci/Makefile | 9
arch/i386/pci/irq-xen.c | 1204 ++++++++
arch/i386/pci/pcifront.c | 55
arch/i386/power/Makefile | 4
arch/ia64/Kconfig | 58
arch/ia64/Makefile | 16
arch/ia64/hp/sim/Makefile | 2
arch/ia64/kernel/asm-offsets.c | 25
arch/ia64/kernel/entry.S | 32
arch/ia64/kernel/gate.S | 1
arch/ia64/kernel/gate.lds.S | 1
arch/ia64/kernel/head.S | 6
arch/ia64/kernel/iosapic.c | 65
arch/ia64/kernel/irq_ia64.c | 208 +
arch/ia64/kernel/pal.S | 5
arch/ia64/kernel/setup.c | 60
arch/ia64/mm/ioremap.c | 3
arch/ia64/xen/Makefile | 8
arch/ia64/xen/drivers/README | 2
arch/ia64/xen/hypercall.S | 353 ++
arch/ia64/xen/hypervisor.c | 799 +++++
arch/ia64/xen/util.c | 130
arch/ia64/xen/xenentry.S | 869 ++++++
arch/ia64/xen/xenhpski.c | 19
arch/ia64/xen/xenivt.S | 2171 +++++++++++++++
arch/ia64/xen/xenminstate.h | 369 ++
arch/ia64/xen/xenpal.S | 76
arch/ia64/xen/xensetup.S | 35
arch/um/kernel/physmem.c | 4
arch/x86_64/Kconfig | 63
arch/x86_64/Kconfig.debug | 1
arch/x86_64/Makefile | 20
arch/x86_64/ia32/Makefile | 20
arch/x86_64/ia32/ia32entry-xen.S | 743 +++++
arch/x86_64/ia32/syscall32-xen.c | 128
arch/x86_64/ia32/syscall32_syscall-xen.S | 28
arch/x86_64/ia32/vsyscall-int80.S | 58
arch/x86_64/ia32/vsyscall-sigreturn.S | 2
arch/x86_64/kernel/Makefile | 18
arch/x86_64/kernel/acpi/Makefile | 1
arch/x86_64/kernel/apic-xen.c | 197 +
arch/x86_64/kernel/asm-offsets.c | 2
arch/x86_64/kernel/e820-xen.c | 752 +++++
arch/x86_64/kernel/early_printk-xen.c | 304 ++
arch/x86_64/kernel/entry-xen.S | 1209 ++++++++
arch/x86_64/kernel/genapic-xen.c | 143 +
arch/x86_64/kernel/genapic_xen.c | 176 +
arch/x86_64/kernel/head-xen.S | 176 +
arch/x86_64/kernel/head64-xen.c | 161 +
arch/x86_64/kernel/init_task.c | 3
arch/x86_64/kernel/io_apic-xen.c | 2263 ++++++++++++++++
arch/x86_64/kernel/ioport-xen.c | 99
arch/x86_64/kernel/irq-xen.c | 198 +
arch/x86_64/kernel/ldt-xen.c | 282 ++
arch/x86_64/kernel/mpparse-xen.c | 1012 +++++++
arch/x86_64/kernel/pci-swiotlb-xen.c | 54
arch/x86_64/kernel/process-xen.c | 793 +++++
arch/x86_64/kernel/setup-xen.c | 1640 +++++++++++
arch/x86_64/kernel/setup64-xen.c | 360 ++
arch/x86_64/kernel/smp-xen.c | 600 ++++
arch/x86_64/kernel/traps-xen.c | 1166 ++++++++
arch/x86_64/kernel/vsyscall-xen.c | 239 +
arch/x86_64/kernel/xen_entry.S | 40
arch/x86_64/mm/Makefile | 10
arch/x86_64/mm/fault-xen.c | 723 +++++
arch/x86_64/mm/init-xen.c | 1201 ++++++++
arch/x86_64/mm/pageattr-xen.c | 396 ++
arch/x86_64/oprofile/Makefile | 5
arch/x86_64/pci/Makefile | 12
drivers/Makefile | 1
drivers/acpi/Kconfig | 3
drivers/char/hangcheck-timer.c | 2
drivers/char/mem.c | 6
drivers/char/tpm/Kconfig | 12
drivers/char/tpm/Makefile | 2
drivers/char/tpm/tpm.c | 55
drivers/char/tpm/tpm.h | 7
drivers/char/tpm/tpm_vtpm.c | 547 +++
drivers/char/tpm/tpm_vtpm.h | 68
drivers/char/tpm/tpm_xen.c | 758 +++++
drivers/char/tty_io.c | 7
drivers/firmware/Kconfig | 2
drivers/ide/ide-lib.c | 8
drivers/oprofile/buffer_sync.c | 66
drivers/oprofile/cpu_buffer.c | 51
drivers/oprofile/cpu_buffer.h | 9
drivers/oprofile/event_buffer.h | 7
drivers/oprofile/oprof.c | 32
drivers/oprofile/oprof.h | 3
drivers/oprofile/oprofile_files.c | 207 +
drivers/pci/Kconfig | 1
drivers/scsi/scsi_error.c | 1
drivers/scsi/scsi_priv.h | 1
drivers/serial/Kconfig | 1
drivers/xen/Kconfig | 260 +
drivers/xen/Makefile | 17
drivers/xen/balloon/Makefile | 2
drivers/xen/balloon/balloon.c | 608 ++++
drivers/xen/blkback/Makefile | 3
drivers/xen/blkback/blkback.c | 569 ++++
drivers/xen/blkback/common.h | 134
drivers/xen/blkback/interface.c | 177 +
drivers/xen/blkback/vbd.c | 119
drivers/xen/blkback/xenbus.c | 460 +++
drivers/xen/blkfront/Kconfig | 6
drivers/xen/blkfront/Makefile | 5
drivers/xen/blkfront/blkfront.c | 841 ++++++
drivers/xen/blkfront/block.h | 155 +
drivers/xen/blkfront/vbd.c | 318 ++
drivers/xen/blktap/Makefile | 3
drivers/xen/blktap/blktap.c | 1438 ++++++++++
drivers/xen/blktap/common.h | 120
drivers/xen/blktap/interface.c | 165 +
drivers/xen/blktap/xenbus.c | 354 ++
drivers/xen/char/Makefile | 2
drivers/xen/char/mem.c | 181 +
drivers/xen/console/Makefile | 2
drivers/xen/console/console.c | 647 ++++
drivers/xen/console/xencons_ring.c | 141 +
drivers/xen/core/Makefile | 13
drivers/xen/core/cpu_hotplug.c | 188 +
drivers/xen/core/evtchn.c | 870 ++++++
drivers/xen/core/features.c | 30
drivers/xen/core/gnttab.c | 442 +++
drivers/xen/core/hypervisor_sysfs.c | 60
drivers/xen/core/reboot.c | 364 ++
drivers/xen/core/skbuff.c | 141 +
drivers/xen/core/smpboot.c | 427 +++
drivers/xen/core/xen_proc.c | 19
drivers/xen/core/xen_sysfs.c | 379 ++
drivers/xen/evtchn/Makefile | 2
drivers/xen/evtchn/evtchn.c | 457 +++
drivers/xen/netback/Makefile | 5
drivers/xen/netback/common.h | 125
drivers/xen/netback/interface.c | 315 ++
drivers/xen/netback/loopback.c | 261 +
drivers/xen/netback/netback.c | 1122 ++++++++
drivers/xen/netback/xenbus.c | 405 ++
drivers/xen/netfront/Kconfig | 6
drivers/xen/netfront/Makefile | 4
drivers/xen/netfront/netfront.c | 1606 +++++++++++
drivers/xen/pciback/Makefile | 13
drivers/xen/pciback/conf_space.c | 403 ++
drivers/xen/pciback/conf_space.h | 123
drivers/xen/pciback/conf_space_capability.c | 71
drivers/xen/pciback/conf_space_capability.h | 23
drivers/xen/pciback/conf_space_capability_pm.c | 113
drivers/xen/pciback/conf_space_capability_vpd.c | 42
drivers/xen/pciback/conf_space_header.c | 299 ++
drivers/xen/pciback/passthrough.c | 157 +
drivers/xen/pciback/pci_stub.c | 690 ++++
drivers/xen/pciback/pciback.h | 91
drivers/xen/pciback/pciback_ops.c | 95
drivers/xen/pciback/vpci.c | 204 +
drivers/xen/pciback/xenbus.c | 454 +++
drivers/xen/pcifront/Makefile | 7
drivers/xen/pcifront/pci.c | 46
drivers/xen/pcifront/pci_op.c | 272 +
drivers/xen/pcifront/pcifront.h | 40
drivers/xen/pcifront/xenbus.c | 294 ++
drivers/xen/privcmd/Makefile | 2
drivers/xen/privcmd/privcmd.c | 285 ++
drivers/xen/tpmback/Makefile | 4
drivers/xen/tpmback/common.h | 85
drivers/xen/tpmback/interface.c | 177 +
drivers/xen/tpmback/tpmback.c | 983 +++++++
drivers/xen/tpmback/xenbus.c | 291 ++
drivers/xen/util.c | 70
drivers/xen/xenbus/Makefile | 12
drivers/xen/xenbus/xenbus_backend_client.c | 135
drivers/xen/xenbus/xenbus_client.c | 278 ++
drivers/xen/xenbus/xenbus_comms.c | 208 +
drivers/xen/xenbus/xenbus_comms.h | 43
drivers/xen/xenbus/xenbus_dev.c | 245 +
drivers/xen/xenbus/xenbus_probe.c | 1086 +++++++
drivers/xen/xenbus/xenbus_xs.c | 843 ++++++
fs/Kconfig | 1
include/asm-i386/apic.h | 2
include/asm-i386/fixmap.h | 4
include/asm-i386/mach-default/mach_traps.h | 12
include/asm-i386/mach-xen/asm/agp.h | 37
include/asm-i386/mach-xen/asm/desc.h | 164 +
include/asm-i386/mach-xen/asm/dma-mapping.h | 152 +
include/asm-i386/mach-xen/asm/fixmap.h | 156 +
include/asm-i386/mach-xen/asm/floppy.h | 147 +
include/asm-i386/mach-xen/asm/highmem.h | 80
include/asm-i386/mach-xen/asm/hypercall.h | 372 ++
include/asm-i386/mach-xen/asm/hypervisor.h | 226 +
include/asm-i386/mach-xen/asm/io.h | 389 ++
include/asm-i386/mach-xen/asm/kmap_types.h | 31
include/asm-i386/mach-xen/asm/mmu.h | 26
include/asm-i386/mach-xen/asm/mmu_context.h | 107
include/asm-i386/mach-xen/asm/page.h | 337 ++
include/asm-i386/mach-xen/asm/param.h | 23
include/asm-i386/mach-xen/asm/pci.h | 153 +
include/asm-i386/mach-xen/asm/pgalloc.h | 63
include/asm-i386/mach-xen/asm/pgtable-2level-defs.h | 21
include/asm-i386/mach-xen/asm/pgtable-2level.h | 88
include/asm-i386/mach-xen/asm/pgtable-3level-defs.h | 25
include/asm-i386/mach-xen/asm/pgtable-3level.h | 197 +
include/asm-i386/mach-xen/asm/pgtable.h | 509 +++
include/asm-i386/mach-xen/asm/processor.h | 741 +++++
include/asm-i386/mach-xen/asm/ptrace.h | 90
include/asm-i386/mach-xen/asm/scatterlist.h | 22
include/asm-i386/mach-xen/asm/segment.h | 117
include/asm-i386/mach-xen/asm/setup.h | 79
include/asm-i386/mach-xen/asm/smp.h | 103
include/asm-i386/mach-xen/asm/spinlock.h | 199 +
include/asm-i386/mach-xen/asm/swiotlb.h | 43
include/asm-i386/mach-xen/asm/synch_bitops.h | 143 +
include/asm-i386/mach-xen/asm/system.h | 575 ++++
include/asm-i386/mach-xen/asm/timer.h | 70
include/asm-i386/mach-xen/asm/tlbflush.h | 101
include/asm-i386/mach-xen/asm/vga.h | 20
include/asm-i386/mach-xen/irq_vectors.h | 125
include/asm-i386/mach-xen/mach_traps.h | 33
include/asm-i386/mach-xen/setup_arch.h | 6
include/asm-i386/page.h | 2
include/asm-i386/pgtable-2level-defs.h | 2
include/asm-i386/pgtable-3level-defs.h | 2
include/asm-ia64/agp.h | 31
include/asm-ia64/dma-mapping.h | 72
include/asm-ia64/fixmap.h | 2
include/asm-ia64/gcc_intrin.h | 60
include/asm-ia64/hw_irq.h | 10
include/asm-ia64/hypercall.h | 533 +++
include/asm-ia64/hypervisor.h | 207 +
include/asm-ia64/intel_intrin.h | 68
include/asm-ia64/io.h | 34
include/asm-ia64/iosapic.h | 2
include/asm-ia64/irq.h | 31
include/asm-ia64/machvec.h | 15
include/asm-ia64/meminit.h | 5
include/asm-ia64/page.h | 124
include/asm-ia64/pal.h | 1
include/asm-ia64/pgalloc.h | 2
include/asm-ia64/privop.h | 59
include/asm-ia64/processor.h | 1
include/asm-ia64/synch_bitops.h | 63
include/asm-ia64/system.h | 4
include/asm-ia64/xen/privop.h | 302 ++
include/asm-um/page.h | 2
include/asm-x86_64/apic.h | 2
include/asm-x86_64/mach-xen/asm/arch_hooks.h | 27
include/asm-x86_64/mach-xen/asm/bootsetup.h | 42
include/asm-x86_64/mach-xen/asm/desc.h | 263 +
include/asm-x86_64/mach-xen/asm/dma-mapping.h | 208 +
include/asm-x86_64/mach-xen/asm/dmi.h | 29
include/asm-x86_64/mach-xen/asm/e820.h | 64
include/asm-x86_64/mach-xen/asm/fixmap.h | 113
include/asm-x86_64/mach-xen/asm/floppy.h | 206 +
include/asm-x86_64/mach-xen/asm/hw_irq.h | 137
include/asm-x86_64/mach-xen/asm/hypercall.h | 372 ++
include/asm-x86_64/mach-xen/asm/hypervisor.h | 2
include/asm-x86_64/mach-xen/asm/io.h | 327 ++
include/asm-x86_64/mach-xen/asm/irq.h | 39
include/asm-x86_64/mach-xen/asm/mmu.h | 37
include/asm-x86_64/mach-xen/asm/mmu_context.h | 135
include/asm-x86_64/mach-xen/asm/msr.h | 399 ++
include/asm-x86_64/mach-xen/asm/nmi.h | 93
include/asm-x86_64/mach-xen/asm/page.h | 327 ++
include/asm-x86_64/mach-xen/asm/param.h | 22
include/asm-x86_64/mach-xen/asm/pci.h | 173 +
include/asm-x86_64/mach-xen/asm/pgalloc.h | 226 +
include/asm-x86_64/mach-xen/asm/pgtable.h | 560 ++++
include/asm-x86_64/mach-xen/asm/processor.h | 499 +++
include/asm-x86_64/mach-xen/asm/ptrace.h | 125
include/asm-x86_64/mach-xen/asm/smp.h | 150 +
include/asm-x86_64/mach-xen/asm/synch_bitops.h | 2
include/asm-x86_64/mach-xen/asm/system.h | 346 ++
include/asm-x86_64/mach-xen/asm/timer.h | 67
include/asm-x86_64/mach-xen/asm/tlbflush.h | 103
include/asm-x86_64/mach-xen/asm/vga.h | 20
include/asm-x86_64/mach-xen/asm/xor.h | 328 ++
include/asm-x86_64/mach-xen/irq_vectors.h | 123
include/asm-x86_64/mach-xen/mach_time.h | 111
include/asm-x86_64/mach-xen/mach_timer.h | 48
include/asm-x86_64/mach-xen/setup_arch_post.h | 58
include/asm-x86_64/mach-xen/setup_arch_pre.h | 5
include/linux/gfp.h | 6
include/linux/highmem.h | 6
include/linux/interrupt.h | 6
include/linux/mm.h | 10
include/linux/oprofile.h | 11
include/linux/skbuff.h | 15
include/scsi/scsi_eh.h | 1
include/xen/balloon.h | 63
include/xen/cpu_hotplug.h | 44
include/xen/driver_util.h | 16
include/xen/evtchn.h | 114
include/xen/features.h | 20
include/xen/foreign_page.h | 30
include/xen/gnttab.h | 151 +
include/xen/hypervisor_sysfs.h | 32
include/xen/interface/acm.h | 188 +
include/xen/interface/acm_ops.h | 103
include/xen/interface/arch-ia64.h | 433 +++
include/xen/interface/arch-powerpc.h | 119
include/xen/interface/arch-x86_32.h | 233 +
include/xen/interface/arch-x86_64.h | 299 ++
include/xen/interface/callback.h | 74
include/xen/interface/dom0_ops.h | 598 ++++
include/xen/interface/event_channel.h | 233 +
include/xen/interface/features.h | 53
include/xen/interface/grant_table.h | 317 ++
include/xen/interface/hvm/hvm_info_table.h | 24
include/xen/interface/hvm/ioreq.h | 93
include/xen/interface/hvm/vmx_assist.h | 98
include/xen/interface/io/blkif.h | 87
include/xen/interface/io/console.h | 33
include/xen/interface/io/netif.h | 157 +
include/xen/interface/io/pciif.h | 55
include/xen/interface/io/ring.h | 273 +
include/xen/interface/io/tpmif.h | 59
include/xen/interface/io/xenbus.h | 45
include/xen/interface/io/xs_wire.h | 97
include/xen/interface/memory.h | 243 +
include/xen/interface/nmi.h | 60
include/xen/interface/physdev.h | 149 +
include/xen/interface/sched.h | 103
include/xen/interface/sched_ctl.h | 69
include/xen/interface/trace.h | 87
include/xen/interface/vcpu.h | 121
include/xen/interface/version.h | 70
include/xen/interface/xen-compat.h | 47
include/xen/interface/xen.h | 507 +++
include/xen/interface/xencomm.h | 37
include/xen/interface/xenoprof.h | 103
include/xen/pcifront.h | 39
include/xen/public/evtchn.h | 91
include/xen/public/privcmd.h | 79
include/xen/xen_proc.h | 13
include/xen/xenbus.h | 299 ++
include/xen/xencons.h | 14
kernel/Kconfig.preempt | 1
kernel/fork.c | 3
kernel/irq/manage.c | 1
kernel/timer.c | 16
lib/Kconfig.debug | 2
lib/Makefile | 3
mm/Kconfig | 3
mm/highmem.c | 11
mm/memory.c | 119
mm/mmap.c | 4
mm/page_alloc.c | 6
net/core/dev.c | 63
net/core/pktgen.c | 2
net/core/skbuff.c | 42
net/ipv4/netfilter/ip_nat_proto_tcp.c | 7
net/ipv4/netfilter/ip_nat_proto_udp.c | 7
net/ipv4/xfrm4_output.c | 6
net/ipv6/addrconf.c | 2
scripts/Makefile.xen | 14
407 files changed, 85185 insertions(+), 201 deletions(-)
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.49.4.1 -r 1.49.4.2 linux-2.6-xen.patch
Index: linux-2.6-xen.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/linux-2.6-xen.patch,v
retrieving revision 1.49.4.1
retrieving revision 1.49.4.2
diff -u -r1.49.4.1 -r1.49.4.2
--- linux-2.6-xen.patch 11 Aug 2006 19:11:01 -0000 1.49.4.1
+++ linux-2.6-xen.patch 16 Aug 2006 20:42:37 -0000 1.49.4.2
@@ -1,6 +1,6 @@
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/boot-xen/Makefile linux-2.6-xen-fedora/arch/i386/boot-xen/Makefile
--- linux-2.6/arch/i386/boot-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/boot-xen/Makefile 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/boot-xen/Makefile 2006-07-18 03:27:59.000000000 +0200
@@ -0,0 +1,21 @@
+
+OBJCOPYFLAGS := -g --strip-unneeded
@@ -24,8 +24,8 @@
+ install -m0664 System.map $(INSTALL_ROOT)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
+ ln -f -s vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) $(INSTALL_ROOT)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL)$(XENGUEST)$(INSTALL_SUFFIX)
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/Kconfig linux-2.6-xen-fedora/arch/i386/Kconfig
---- linux-2.6/arch/i386/Kconfig 2006-08-01 06:44:38.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/Kconfig 2006-08-02 18:15:29.000000000 +0200
+--- linux-2.6/arch/i386/Kconfig 2006-07-13 00:51:19.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/Kconfig 2006-07-26 17:11:03.000000000 +0200
@@ -16,10 +16,12 @@ config X86_32
config GENERIC_TIME
@@ -149,7 +149,7 @@
---help---
On Intel P6 family processors (Pentium Pro, Pentium II and later)
the Memory Type Range Registers (MTRRs) may be used to control
-@@ -673,7 +694,7 @@ config MTRR
+@@ -694,7 +694,7 @@ config MTRR
config EFI
bool "Boot from EFI support"
@@ -313,7 +313,7 @@
default y
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/Kconfig.cpu linux-2.6-xen-fedora/arch/i386/Kconfig.cpu
--- linux-2.6/arch/i386/Kconfig.cpu 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/Kconfig.cpu 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/Kconfig.cpu 2006-07-18 03:27:59.000000000 +0200
@@ -251,7 +251,7 @@ config X86_PPRO_FENCE
config X86_F00F_BUG
@@ -332,7 +332,7 @@
default y
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/Kconfig.debug linux-2.6-xen-fedora/arch/i386/Kconfig.debug
--- linux-2.6/arch/i386/Kconfig.debug 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/Kconfig.debug 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/Kconfig.debug 2006-07-22 20:37:34.000000000 +0200
@@ -2,6 +2,7 @@ menu "Kernel hacking"
config TRACE_IRQFLAGS_SUPPORT
@@ -351,7 +351,7 @@
would otherwise cause a system to silently reboot. Disabling this
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/acpi/boot-xen.c linux-2.6-xen-fedora/arch/i386/kernel/acpi/boot-xen.c
--- linux-2.6/arch/i386/kernel/acpi/boot-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/acpi/boot-xen.c 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/acpi/boot-xen.c 2006-07-22 20:37:34.000000000 +0200
@@ -0,0 +1,1168 @@
+/*
+ * boot.c - Architecture-Specific Low-Level ACPI Boot Support
@@ -1523,7 +1523,7 @@
+}
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/acpi/Makefile linux-2.6-xen-fedora/arch/i386/kernel/acpi/Makefile
--- linux-2.6/arch/i386/kernel/acpi/Makefile 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/acpi/Makefile 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/acpi/Makefile 2006-07-18 03:27:59.000000000 +0200
@@ -6,3 +6,7 @@ ifneq ($(CONFIG_ACPI_PROCESSOR),)
obj-y += cstate.o processor.o
endif
@@ -1534,7 +1534,7 @@
+endif
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/alternative.c linux-2.6-xen-fedora/arch/i386/kernel/alternative.c
--- linux-2.6/arch/i386/kernel/alternative.c 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/alternative.c 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/alternative.c 2006-07-22 20:37:34.000000000 +0200
@@ -4,7 +4,11 @@
#include <asm/alternative.h>
#include <asm/sections.h>
@@ -1549,7 +1549,7 @@
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/apic-xen.c linux-2.6-xen-fedora/arch/i386/kernel/apic-xen.c
--- linux-2.6/arch/i386/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/apic-xen.c 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/apic-xen.c 2006-07-22 20:37:34.000000000 +0200
@@ -0,0 +1,160 @@
+/*
+ * Local APIC handling, local APIC timers
@@ -1713,7 +1713,7 @@
+}
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/asm-offsets.c linux-2.6-xen-fedora/arch/i386/kernel/asm-offsets.c
--- linux-2.6/arch/i386/kernel/asm-offsets.c 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/asm-offsets.c 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/asm-offsets.c 2006-07-22 21:45:45.000000000 +0200
@@ -66,9 +66,14 @@ void foo(void)
OFFSET(pbe_orig_address, pbe, orig_address);
OFFSET(pbe_next, pbe, next);
@@ -1732,7 +1732,7 @@
DEFINE(VDSO_PRELINK, VDSO_PRELINK);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/cpu/common-xen.c linux-2.6-xen-fedora/arch/i386/kernel/cpu/common-xen.c
--- linux-2.6/arch/i386/kernel/cpu/common-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/common-xen.c 2006-08-03 22:52:02.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/common-xen.c 2006-07-18 03:27:59.000000000 +0200
@@ -0,0 +1,740 @@
+#include <linux/init.h>
+#include <linux/string.h>
@@ -2476,7 +2476,7 @@
+#endif
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/cpu/Makefile linux-2.6-xen-fedora/arch/i386/kernel/cpu/Makefile
--- linux-2.6/arch/i386/kernel/cpu/Makefile 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/Makefile 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/Makefile 2006-07-18 03:27:59.000000000 +0200
@@ -17,3 +17,8 @@ obj-$(CONFIG_X86_MCE) += mcheck/
obj-$(CONFIG_MTRR) += mtrr/
@@ -2488,7 +2488,7 @@
+endif
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/main-xen.c
--- linux-2.6/arch/i386/kernel/cpu/mtrr/main-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/main-xen.c 2006-08-01 02:31:00.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/main-xen.c 2006-07-18 03:27:59.000000000 +0200
@@ -0,0 +1,197 @@
+#include <linux/init.h>
+#include <linux/proc_fs.h>
@@ -2689,7 +2689,7 @@
+subsys_initcall(mtrr_init);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/Makefile
--- linux-2.6/arch/i386/kernel/cpu/mtrr/Makefile 2006-07-13 00:51:19.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/Makefile 2006-08-01 02:30:59.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/cpu/mtrr/Makefile 2006-07-18 03:27:59.000000000 +0200
@@ -3,3 +3,10 @@ obj-y += amd.o
obj-y += cyrix.o
obj-y += centaur.o
@@ -2703,13 +2703,13 @@
+endif
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/early_printk-xen.c linux-2.6-xen-fedora/arch/i386/kernel/early_printk-xen.c
--- linux-2.6/arch/i386/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/early_printk-xen.c 2006-08-01 02:31:00.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/early_printk-xen.c 2006-07-18 03:27:59.000000000 +0200
@@ -0,0 +1,2 @@
+
+#include "../../x86_64/kernel/early_printk-xen.c"
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/entry.S linux-2.6-xen-fedora/arch/i386/kernel/entry.S
---- linux-2.6/arch/i386/kernel/entry.S 2006-08-01 06:44:38.000000000 +0200
-+++ linux-2.6-xen-fedora/arch/i386/kernel/entry.S 2006-08-02 18:15:29.000000000 +0200
+--- linux-2.6/arch/i386/kernel/entry.S 2006-07-13 00:51:19.000000000 +0200
++++ linux-2.6-xen-fedora/arch/i386/kernel/entry.S 2006-07-22 21:45:45.000000000 +0200
@@ -265,7 +265,7 @@ ENTRY(sysenter_entry)
CFI_STARTPROC simple
CFI_DEF_CFA esp, 0
@@ -2739,13 +2739,13 @@
pushl $sysenter_past_esp
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/arch/i386/kernel/entry-xen.S linux-2.6-xen-fedora/arch/i386/kernel/entry-xen.S
--- linux-2.6/arch/i386/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/arch/i386/kernel/entry-xen.S 2006-08-02 18:15:29.000000000 +0200
-@@ -0,0 +1,1209 @@
++++ linux-2.6-xen-fedora/arch/i386/kernel/entry-xen.S 2006-07-22 21:45:45.000000000 +0200
+@@ -0,0 +1,1188 @@
+/*
+ * linux/arch/i386/entry.S
+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
++ * Copyright (C) 1991, 1992 Linus Torvalds
++*/
+
+/*
+ * entry.S contains the system-call and fault low-level handling routines.
@@ -2977,7 +2977,7 @@
+ENTRY(ret_from_fork)
+ CFI_STARTPROC
+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
++ CFI_ADJUST_CFA_OFFSET -4
+ call schedule_tail
+ GET_THREAD_INFO(%ebp)
+ popl %eax
@@ -3109,10 +3109,8 @@
+14: __DISABLE_INTERRUPTS
+sysexit_ecrit: /**** END OF SYSEXIT CRITICAL REGION ****/
+ push %esp
-+ CFI_ADJUST_CFA_OFFSET 4
+ call evtchn_do_upcall
+ add $4,%esp
-+ CFI_ADJUST_CFA_OFFSET -4
+ jmp ret_from_intr
+#else
+ sti
@@ -3160,6 +3158,7 @@
+ movb CS(%esp), %al
+ andl $(VM_MASK | (4 << 8) | 3), %eax
+ cmpl $((4 << 8) | 3), %eax
++ CFI_REMEMBER_STATE
+ je ldt_ss # returning to user-space with LDT SS
+restore_nocheck:
+#else
@@ -3174,7 +3173,6 @@
+ jnz restore_all_enable_events # != 0 => enable event delivery
[...6130 lines suppressed...]
@@ -89510,7 +88467,7 @@
+#endif /* _XEN_XENBUS_H */
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/include/xen/xencons.h linux-2.6-xen-fedora/include/xen/xencons.h
--- linux-2.6/include/xen/xencons.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/include/xen/xencons.h 2006-08-01 02:31:26.000000000 +0200
++++ linux-2.6-xen-fedora/include/xen/xencons.h 2006-07-18 03:28:32.000000000 +0200
@@ -0,0 +1,14 @@
+#ifndef __ASM_XENCONS_H__
+#define __ASM_XENCONS_H__
@@ -89528,7 +88485,7 @@
+#endif /* __ASM_XENCONS_H__ */
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/include/xen/xen_proc.h linux-2.6-xen-fedora/include/xen/xen_proc.h
--- linux-2.6/include/xen/xen_proc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/include/xen/xen_proc.h 2006-08-01 02:31:26.000000000 +0200
++++ linux-2.6-xen-fedora/include/xen/xen_proc.h 2006-07-18 03:28:32.000000000 +0200
@@ -0,0 +1,13 @@
+
+#ifndef __ASM_XEN_PROC_H__
@@ -89545,7 +88502,7 @@
+#endif /* __ASM_XEN_PROC_H__ */
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/kernel/fork.c linux-2.6-xen-fedora/kernel/fork.c
--- linux-2.6/kernel/fork.c 2006-07-16 19:14:09.000000000 +0200
-+++ linux-2.6-xen-fedora/kernel/fork.c 2006-08-01 02:31:26.000000000 +0200
++++ linux-2.6-xen-fedora/kernel/fork.c 2006-07-22 20:37:56.000000000 +0200
@@ -275,6 +275,9 @@ static inline int dup_mmap(struct mm_str
if (retval)
goto out;
@@ -89557,9 +88514,9 @@
out:
up_write(&mm->mmap_sem);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/kernel/irq/manage.c linux-2.6-xen-fedora/kernel/irq/manage.c
---- linux-2.6/kernel/irq/manage.c 2006-08-01 06:44:39.000000000 +0200
-+++ linux-2.6-xen-fedora/kernel/irq/manage.c 2006-08-02 18:15:29.000000000 +0200
-@@ -350,7 +350,6 @@ void free_irq(unsigned int irq, void *de
+--- linux-2.6/kernel/irq/manage.c 2006-07-13 00:51:41.000000000 +0200
++++ linux-2.6-xen-fedora/kernel/irq/manage.c 2006-07-22 20:37:56.000000000 +0200
+@@ -326,7 +326,6 @@ void free_irq(unsigned int irq, void *de
struct irqaction **p;
unsigned long flags;
@@ -89569,7 +88526,7 @@
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/kernel/Kconfig.preempt linux-2.6-xen-fedora/kernel/Kconfig.preempt
--- linux-2.6/kernel/Kconfig.preempt 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/kernel/Kconfig.preempt 2006-08-01 02:31:26.000000000 +0200
++++ linux-2.6-xen-fedora/kernel/Kconfig.preempt 2006-07-18 03:28:32.000000000 +0200
@@ -35,6 +35,7 @@ config PREEMPT_VOLUNTARY
config PREEMPT
@@ -89579,8 +88536,8 @@
This option reduces the latency of the kernel by making
all kernel code (that is not executing in a critical section)
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/kernel/timer.c linux-2.6-xen-fedora/kernel/timer.c
---- linux-2.6/kernel/timer.c 2006-08-01 06:44:39.000000000 +0200
-+++ linux-2.6-xen-fedora/kernel/timer.c 2006-08-02 18:15:30.000000000 +0200
+--- linux-2.6/kernel/timer.c 2006-07-16 19:14:09.000000000 +0200
++++ linux-2.6-xen-fedora/kernel/timer.c 2006-07-22 20:37:56.000000000 +0200
@@ -554,6 +554,22 @@ found:
if (time_before(expires, jiffies))
return jiffies;
@@ -89606,19 +88563,19 @@
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/lib/Kconfig.debug linux-2.6-xen-fedora/lib/Kconfig.debug
--- linux-2.6/lib/Kconfig.debug 2006-07-16 19:14:09.000000000 +0200
-+++ linux-2.6-xen-fedora/lib/Kconfig.debug 2006-08-02 18:15:30.000000000 +0200
++++ linux-2.6-xen-fedora/lib/Kconfig.debug 2006-07-22 20:37:56.000000000 +0200
@@ -325,7 +325,7 @@ config FRAME_POINTER
config UNWIND_INFO
bool "Compile the kernel with frame unwind information"
- depends on !IA64 && !PARISC
-+ depends on !IA64 && !PARISC && !X86_64_XEN
++ depends on !IA64 && !PARISC && !XEN
depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
help
If you say Y here the resulting kernel image will be slightly larger
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/lib/Makefile linux-2.6-xen-fedora/lib/Makefile
--- linux-2.6/lib/Makefile 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/lib/Makefile 2006-08-01 02:31:26.000000000 +0200
++++ linux-2.6-xen-fedora/lib/Makefile 2006-07-22 20:37:56.000000000 +0200
@@ -51,6 +51,9 @@ obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o
obj-$(CONFIG_SMP) += percpu_counter.o
@@ -89631,7 +88588,7 @@
clean-files := crc32table.h
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/mm/highmem.c linux-2.6-xen-fedora/mm/highmem.c
--- linux-2.6/mm/highmem.c 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/mm/highmem.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/mm/highmem.c 2006-07-22 20:37:56.000000000 +0200
@@ -142,6 +142,17 @@ start:
return vaddr;
}
@@ -89652,7 +88609,7 @@
unsigned long vaddr;
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/mm/Kconfig linux-2.6-xen-fedora/mm/Kconfig
--- linux-2.6/mm/Kconfig 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/mm/Kconfig 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/mm/Kconfig 2006-07-22 20:37:56.000000000 +0200
@@ -127,11 +127,14 @@ comment "Memory hotplug is currently inc
# Default to 4 for wider testing, though 8 might be more appropriate.
# ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
@@ -89670,7 +88627,7 @@
#
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/mm/memory.c linux-2.6-xen-fedora/mm/memory.c
--- linux-2.6/mm/memory.c 2006-07-16 19:14:09.000000000 +0200
-+++ linux-2.6-xen-fedora/mm/memory.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/mm/memory.c 2006-07-22 20:37:57.000000000 +0200
@@ -403,7 +403,8 @@ struct page *vm_normal_page(struct vm_ar
* and that the resulting page looks ok.
*/
@@ -89813,7 +88770,7 @@
* which was read non-atomically. Before making any commitment, on
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/mm/mmap.c linux-2.6-xen-fedora/mm/mmap.c
--- linux-2.6/mm/mmap.c 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/mm/mmap.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/mm/mmap.c 2006-07-22 20:37:57.000000000 +0200
@@ -1950,6 +1950,10 @@ void exit_mmap(struct mm_struct *mm)
unsigned long nr_accounted = 0;
unsigned long end;
@@ -89827,7 +88784,7 @@
tlb = tlb_gather_mmu(mm, 1);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/mm/page_alloc.c linux-2.6-xen-fedora/mm/page_alloc.c
--- linux-2.6/mm/page_alloc.c 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/mm/page_alloc.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/mm/page_alloc.c 2006-07-22 20:37:57.000000000 +0200
@@ -443,7 +443,8 @@ static void __free_pages_ok(struct page
int i;
int reserved = 0;
@@ -89850,7 +88807,7 @@
page->mapping = NULL;
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/core/dev.c linux-2.6-xen-fedora/net/core/dev.c
--- linux-2.6/net/core/dev.c 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/net/core/dev.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/net/core/dev.c 2006-07-23 03:42:00.000000000 +0200
@@ -117,6 +117,12 @@
#include <linux/dmaengine.h>
#include <linux/err.h>
@@ -89951,7 +88908,7 @@
EXPORT_SYMBOL(br_handle_frame_hook);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/core/pktgen.c linux-2.6-xen-fedora/net/core/pktgen.c
--- linux-2.6/net/core/pktgen.c 2006-07-13 00:51:41.000000000 +0200
-+++ linux-2.6-xen-fedora/net/core/pktgen.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/net/core/pktgen.c 2006-07-22 20:37:57.000000000 +0200
@@ -6,7 +6,7 @@
*
* Alexey Kuznetsov <kuznet at ms2.inr.ac.ru>
@@ -89963,7 +88920,7 @@
* modify it under the terms of the GNU General Public License
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/core/skbuff.c linux-2.6-xen-fedora/net/core/skbuff.c
--- linux-2.6/net/core/skbuff.c 2006-07-16 19:14:09.000000000 +0200
-+++ linux-2.6-xen-fedora/net/core/skbuff.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/net/core/skbuff.c 2006-07-22 20:37:57.000000000 +0200
@@ -146,6 +146,7 @@ EXPORT_SYMBOL(skb_truesize_bug);
* Buffers may only be allocated from interrupts using a @gfp_mask of
* %GFP_ATOMIC.
@@ -90052,7 +89009,7 @@
C(priority);
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/ipv4/netfilter/ip_nat_proto_tcp.c linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_tcp.c
--- linux-2.6/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-07-13 00:51:42.000000000 +0200
-+++ linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-07-18 03:28:34.000000000 +0200
@@ -129,7 +129,12 @@ tcp_manip_pkt(struct sk_buff **pskb,
if (hdrsize < sizeof(*hdr))
return 1;
@@ -90069,7 +89026,7 @@
hdr->check));
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/ipv4/netfilter/ip_nat_proto_udp.c linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_udp.c
--- linux-2.6/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-07-13 00:51:42.000000000 +0200
-+++ linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-08-01 02:31:27.000000000 +0200
++++ linux-2.6-xen-fedora/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-07-22 20:37:58.000000000 +0200
@@ -114,7 +114,12 @@ udp_manip_pkt(struct sk_buff **pskb,
portptr = &hdr->dest;
}
@@ -90086,7 +89043,7 @@
hdr->check));
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/ipv4/xfrm4_output.c linux-2.6-xen-fedora/net/ipv4/xfrm4_output.c
--- linux-2.6/net/ipv4/xfrm4_output.c 2006-07-13 00:51:42.000000000 +0200
-+++ linux-2.6-xen-fedora/net/ipv4/xfrm4_output.c 2006-08-01 02:31:28.000000000 +0200
++++ linux-2.6-xen-fedora/net/ipv4/xfrm4_output.c 2006-07-22 20:37:58.000000000 +0200
@@ -18,6 +18,8 @@
#include <net/xfrm.h>
#include <net/icmp.h>
@@ -90109,7 +89066,7 @@
if (err)
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/net/ipv6/addrconf.c linux-2.6-xen-fedora/net/ipv6/addrconf.c
--- linux-2.6/net/ipv6/addrconf.c 2006-07-16 19:14:10.000000000 +0200
-+++ linux-2.6-xen-fedora/net/ipv6/addrconf.c 2006-08-01 02:31:28.000000000 +0200
++++ linux-2.6-xen-fedora/net/ipv6/addrconf.c 2006-07-22 20:37:58.000000000 +0200
@@ -2488,6 +2488,7 @@ static void addrconf_dad_start(struct in
spin_lock_bh(&ifp->lock);
@@ -90128,7 +89085,7 @@
diff -urNp --exclude=TAGS --exclude='.hg*' linux-2.6/scripts/Makefile.xen linux-2.6-xen-fedora/scripts/Makefile.xen
--- linux-2.6/scripts/Makefile.xen 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6-xen-fedora/scripts/Makefile.xen 2006-08-01 02:31:28.000000000 +0200
++++ linux-2.6-xen-fedora/scripts/Makefile.xen 2006-07-18 03:28:35.000000000 +0200
@@ -0,0 +1,14 @@
+
+# cherrypickxen($1 = allobj)
Index: sources
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/sources,v
retrieving revision 1.468.4.1
retrieving revision 1.468.4.2
diff -u -r1.468.4.1 -r1.468.4.2
--- sources 11 Aug 2006 19:11:07 -0000 1.468.4.1
+++ sources 16 Aug 2006 20:43:05 -0000 1.468.4.2
@@ -1,4 +1,4 @@
37ddefe96625502161f075b9d907f21e linux-2.6.17.tar.bz2
-32a856cececcc35cb834cfaccc3c2523 xen-10924.tar.bz2
+4ae2c95631b54820475437c206c3a4c2 xen-10730.tar.bz2
ba31b754aaf80aa388858f86c34c4d01 patch-2.6.18-rc3.bz2
2b8d22d3832b97c2bbd87e75755b36c9 patch-2.6.18-rc3-git3.bz2
--- linux-2.6-xen-unbreak-oprofile.patch DELETED ---
More information about the fedora-cvs-commits
mailing list