public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Nigel Cunningham <ncunningham@cyclades.com>
To: Nigel Cunningham <nigel@suspend2.net>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] [19/48] Suspend2 2.1.9.8 for 2.6.12: 510-version-specific-mac.patch
Date: Wed, 06 Jul 2005 13:49:22 +1000	[thread overview]
Message-ID: <1120621762.4860.16.camel@localhost> (raw)
In-Reply-To: <11206164411926@foobar.com>

Hi.

This patch came from Hu Gang.

Regards,

Nigel

On Wed, 2005-07-06 at 12:20, Nigel Cunningham wrote:
> diff -ruNp 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/asm-offsets.c 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/asm-offsets.c
> --- 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/asm-offsets.c	2005-06-20 11:46:49.000000000 +1000
> +++ 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/asm-offsets.c	2005-07-04 23:14:19.000000000 +1000
> @@ -62,8 +62,10 @@ int main(void)
>  	       offsetof (struct rt_sigframe32, uc.uc_mcontext));
>  	BLANK();
>  #endif
> +#ifdef CONFIG_PM
>  	DEFINE(pbe_address, offsetof(struct pbe, address));
>  	DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
>  	DEFINE(pbe_next, offsetof(struct pbe, next));
> +#endif
>  	return 0;
>  }
> diff -ruNp 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/Makefile 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/Makefile
> --- 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/Makefile	2005-06-20 11:46:49.000000000 +1000
> +++ 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/Makefile	2005-07-04 23:14:19.000000000 +1000
> @@ -22,6 +22,7 @@ obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o m
>  		genapic.o genapic_cluster.o genapic_flat.o
>  obj-$(CONFIG_PM)		+= suspend.o
>  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend_asm.o
> +obj-$(CONFIG_SUSPEND2)		+= suspend2.o
>  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
>  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
>  obj-$(CONFIG_GART_IOMMU)	+= pci-gart.o aperture.o
> diff -ruNp 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/suspend.c 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/suspend.c
> --- 520-version-specific-x86_64.patch-old/arch/x86_64/kernel/suspend.c	2004-11-03 21:53:44.000000000 +1100
> +++ 520-version-specific-x86_64.patch-new/arch/x86_64/kernel/suspend.c	2005-07-04 23:14:19.000000000 +1000
> @@ -26,6 +26,7 @@
>  #include <asm/tlbflush.h>
>  #include <asm/io.h>
>  #include <asm/proto.h>
> +#include <asm/i387.h>
>  
>  struct saved_context saved_context;
>  
> @@ -35,6 +36,8 @@ unsigned long saved_context_r08, saved_c
>  unsigned long saved_context_r12, saved_context_r13, saved_context_r14, saved_context_r15;
>  unsigned long saved_context_eflags;
>  
> +void fix_processor_context(void);
> +
>  void __save_processor_state(struct saved_context *ctxt)
>  {
>  	kernel_fpu_begin();
> diff -ruNp 520-version-specific-x86_64.patch-old/arch/x86_64/mm/init.c 520-version-specific-x86_64.patch-new/arch/x86_64/mm/init.c
> --- 520-version-specific-x86_64.patch-old/arch/x86_64/mm/init.c	2005-06-20 11:46:49.000000000 +1000
> +++ 520-version-specific-x86_64.patch-new/arch/x86_64/mm/init.c	2005-07-04 23:14:19.000000000 +1000
> @@ -618,3 +618,22 @@ int in_gate_area_no_task(unsigned long a
>  {
>  	return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
>  }
> +
> +#if defined(CONFIG_PM_DISK) || defined(CONFIG_SOFTWARE_SUSPEND) || defined(CONFIG_SUSPEND2)
> +/*
> + * Software suspend & friends need this for resume because things like the intel-agp
> + * driver might have split up a kernel 4MB mapping.
> + */
> +char __nosavedata swsusp_pg_dir[PAGE_SIZE]
> +	__attribute__ ((aligned (PAGE_SIZE)));
> +
> +static inline void save_pg_dir(void)
> +{
> +	memcpy(swsusp_pg_dir, swapper_pg_dir, PAGE_SIZE);
> +}
> +#else
> +static inline void save_pg_dir(void)
> +{
> +}
> +#endif
> +
> diff -ruNp 520-version-specific-x86_64.patch-old/include/asm-x86_64/suspend2.h 520-version-specific-x86_64.patch-new/include/asm-x86_64/suspend2.h
> --- 520-version-specific-x86_64.patch-old/include/asm-x86_64/suspend2.h	1970-01-01 10:00:00.000000000 +1000
> +++ 520-version-specific-x86_64.patch-new/include/asm-x86_64/suspend2.h	2005-07-05 23:56:15.000000000 +1000
> @@ -0,0 +1,432 @@
> + /*
> +  * Copyright 2005 Nigel Cunningham <nigel@suspend2.net>
> +  * Based on code
> +  * Copyright 2001-2002 Pavel Machek <pavel@suse.cz>
> +  * Based on code
> +  * Copyright 2001 Patrick Mochel <mochel@osdl.org>
> +  */
> +#include <linux/irq.h>
> +#include <asm/desc.h>
> +#include <asm/i387.h>
> +#include <asm/tlbflush.h>
> +#include <asm/desc.h>
> +#include <asm/suspend.h>
> +#undef inline
> +#define inline	__inline__ __attribute__((always_inline))
> +
> +/* image of the saved processor states */
> +struct suspend2_saved_context {
> +	unsigned long eax, ebx, ecx, edx;
> +	unsigned long esp, ebp, esi, edi;
> +	unsigned long r8, r9, r10, r11;
> +	unsigned long r12, r13, r14, r15;
> +
> +#if 0
> +	u16 es, fs, gs, ss;
> +	u32 cr0, cr2, cr3, cr4;
> +	u16 gdt_pad;
> +	u16 gdt_limit;
> +	u32 gdt_base;
> +	u16 idt_pad;
> +	u16 idt_limit;
> +	u32 idt_base;
> +	u16 ldt;
> +	u16 tss;
> +	u32 tr;
> +	u32 safety;
> +	u32 return_address;
> +#endif
> +	unsigned long eflags;
> +} __attribute__((packed));
> +
> +extern struct suspend2_saved_context suspend2_saved_context;	/* temporary storage */
> +
> +#ifdef CONFIG_MTRR
> +/* MTRR functions */
> +extern int mtrr_save(void);
> +extern int mtrr_restore_one_cpu(void);
> +extern void mtrr_restore_finish(void);
> +#else
> +#define mtrr_save() do { } while(0)
> +#define mtrr_restore_one_cpu() do { } while(0)
> +#define mtrr_restore_finish() do { } while(0)
> +#endif
> +		  
> +#ifndef CONFIG_SMP
> +#undef cpu_clear
> +#define cpu_clear(a, b) do { } while(0)
> +#endif
> +
> +extern struct suspend2_saved_context suspend2_saved_context;	/* temporary storage */
> +
> +/*
> + * save_processor_context
> + * 
> + * Save the state of the processor before we go to sleep.
> + *
> + * return_stack is the value of the stack pointer (%esp) as the caller sees it.
> + * A good way could not be found to obtain it from here (don't want to make _too_
> + * many assumptions about the layout of the stack this far down.) Also, the 
> + * handy little __builtin_frame_pointer(level) where level > 0, is blatantly 
> + * buggy - it returns the value of the stack at the proper location, not the 
> + * location, like it should (as of gcc 2.91.66)
> + * 
> + * Note that the context and timing of this function is pretty critical.
> + * With a minimal amount of things going on in the caller and in here, gcc
> + * does a good job of being just a dumb compiler.  Watch the assembly output
> + * if anything changes, though, and make sure everything is going in the right
> + * place. 
> + */
> +static inline void suspend2_save_processor_context(void)
> +{
> +	/*
> +	 * save the general registers.
> +	 * note that gcc has constructs to specify output of certain registers,
> +	 * but they're not used here, because it assumes that you want to modify
> +	 * those registers, so it tries to be smart and save them beforehand.
> +	 * It's really not necessary, and kinda fishy (check the assembly output),
> +	 * so it's avoided. 
> +	 */
> +	asm volatile ("movl %%rsp, (%0)" : "=m" (suspend2_saved_context.esp));
> +	asm volatile ("movl %%rax, (%0)" : "=m" (suspend2_saved_context.eax));
> +	asm volatile ("movl %%rbx, (%0)" : "=m" (suspend2_saved_context.ebx));
> +	asm volatile ("movl %%rcx, (%0)" : "=m" (suspend2_saved_context.ecx));
> +	asm volatile ("movl %%rdx, (%0)" : "=m" (suspend2_saved_context.edx));
> +	asm volatile ("movl %%rbp, (%0)" : "=m" (suspend2_saved_context.ebp));
> +	asm volatile ("movl %%rsi, (%0)" : "=m" (suspend2_saved_context.esi));
> +	asm volatile ("movl %%rdi, (%0)" : "=m" (suspend2_saved_context.edi));
> +	asm volatile ("movl %%r8, (%0)" : "=m" (suspend2_saved_context.r8));
> +	asm volatile ("movl %%r9, (%0)" : "=m" (suspend2_saved_context.r9));
> +	asm volatile ("movl %%r10, (%0)" : "=m" (suspend2_saved_context.r10));
> +	asm volatile ("movl %%r11, (%0)" : "=m" (suspend2_saved_context.r11));
> +	asm volatile ("movl %%r12, (%0)" : "=m" (suspend2_saved_context.r12));
> +	asm volatile ("movl %%r13, (%0)" : "=m" (suspend2_saved_context.r13));
> +	asm volatile ("movl %%r14, (%0)" : "=m" (suspend2_saved_context.r14));
> +	asm volatile ("movl %%r15, (%0)" : "=m" (suspend2_saved_context.r15));
> +
> +	/*
> +	 * eflags
> +	 */
> +	asm volatile ("pushfl ; popl (%0)" : "=m" (suspend2_saved_context.eflags));
> +
> +	kernel_fpu_begin();
> +
> +	/*
> +	 * descriptor tables
> +	 */
> +	asm volatile ("sgdt (%0)" : "=m" (suspend2_saved_context.gdt_limit));
> +	asm volatile ("sidt (%0)" : "=m" (suspend2_saved_context.idt_limit));
> +	asm volatile ("sldt (%0)" : "=m" (suspend2_saved_context.ldt));
> +	asm volatile ("str (%0)"  : "=m" (suspend2_saved_context.tr));
> +
> +	/*
> +	 * segment registers
> +	 */
> +	asm volatile ("movw %%ds, %0" : "=r" (suspend2_saved_context.ds));
> +	asm volatile ("movw %%es, %0" : "=r" (suspend2_saved_context.es));
> +	asm volatile ("movw %%fs, %0" : "=r" (suspend2_saved_context.fs));
> +	asm volatile ("movw %%gs, %0" : "=r" (suspend2_saved_context.gs));
> +	asm volatile ("movw %%ss, %0" : "=r" (suspend2_saved_context.ss));
> +
> +	rdmsrl(MSR_FS_BASE, suspend2_saved_context.fs_base);
> +	rdmsrl(MSR_GS_BASE, suspend2_saved_context.gs_base);
> +	rdmsrl(MSR_KERNEL_GS_BASE, suspend2_saved_context.gs_kernel_base);
> +
> +	/*
> +	 * control registers 
> +	 */
> +	asm volatile ("movl %%cr0, %0" : "=r" (suspend2_saved_context.cr0));
> +	asm volatile ("movl %%cr2, %0" : "=r" (suspend2_saved_context.cr2));
> +	asm volatile ("movl %%cr3, %0" : "=r" (suspend2_saved_context.cr3));
> +	asm volatile ("movl %%cr4, %0" : "=r" (suspend2_saved_context.cr4));
> +
> +}
> +
> +static void fix_processor_context(void)
> +{
> +	int nr = _smp_processor_id();
> +	struct tss_struct * t = &per_cpu(init_tss,nr);
> +
> +	set_tss_desc(nr,t);	/* This just modifies memory; should not be neccessary. But... This is neccessary, because 386 hardware has concept of busy tsc or some similar stupidity. */
> +	cpu_gdt_table[nr][GDT_ENTRY_TSS].type = 9;
> +
> +	syscall_init();                         /* This sets MSR_*STAR and related */
> +	load_TR_desc();
> +	load_LDT(&current->active_mm->context);	/* This does lldt */
> +
> +	/*
> +	 * Now maybe reload the debug registers
> +	 */
> +	if (current->thread.debugreg7){
> +                loaddebug(&current->thread, 0);
> +                loaddebug(&current->thread, 1);
> +                loaddebug(&current->thread, 2);
> +                loaddebug(&current->thread, 3);
> +                /* no 4 and 5 */
> +                loaddebug(&current->thread, 6);
> +                loaddebug(&current->thread, 7);
> +	}
> +}
> +
> +static void do_fpu_end(void)
> +{
> +        /* restore FPU regs if necessary */
> +	/* Do it out of line so that gcc does not move cr0 load to some stupid place */
> +        kernel_fpu_end();
> +	mxcsr_feature_mask_init();
> +}
> +
> +/*
> + * restore_processor_context
> + * 
> + * Restore the processor context as it was before we went to sleep
> + * - descriptor tables
> + * - control registers
> + * - segment registers
> + * - flags
> + * 
> + * Note that it is critical that this function is declared inline.  
> + * It was separated out from restore_state to make that function
> + * a little clearer, but it needs to be inlined because we won't have a
> + * stack when we get here (so we can't push a return address).
> + */
> +static inline void restore_processor_context(void)
> +{
> +	/*
> +	 * first restore %ds, so we can access our data properly
> +	 */
> +	//asm volatile ("movw %0, %%ds" :: "r" ((u16)__KERNEL_DS));
> +	
> +	__flush_tlb_global(); /* INLINE? */
> +
> +	asm volatile ("movl	$24, %eax");
> +	asm volatile ("movl	%eax, %ds");
> +
> +	/*
> +	 * the other general registers
> +	 *
> +	 * note that even though gcc has constructs to specify memory 
> +	 * input into certain registers, it will try to be too smart
> +	 * and save them at the beginning of the function.  This is esp.
> +	 * bad since we don't have a stack set up when we enter, and we 
> +	 * want to preserve the values on exit. So, we set them manually.
> +	 */
> +	asm volatile ("movl %0, %%rsp" :: "m" (suspend2_saved_context.esp));
> +	asm volatile ("movl %0, %%rbp" :: "m" (suspend2_saved_context.ebp));
> +	//asm volatile ("movl %0, %%eax" :: "m" (suspend2_saved_context.eax));
> +	asm volatile ("movl %0, %%rbx" :: "m" (suspend2_saved_context.ebx));
> +	asm volatile ("movl %0, %%rcx" :: "m" (suspend2_saved_context.ecx));
> +	asm volatile ("movl %0, %%rdx" :: "m" (suspend2_saved_context.edx));
> +	asm volatile ("movl %0, %%rsi" :: "m" (suspend2_saved_context.esi));
> +	asm volatile ("movl %0, %%rdi" :: "m" (suspend2_saved_context.edi));
> +	asm volatile ("movl %0, %%r8" :: "m" (suspend2_saved_context.r8));
> +	asm volatile ("movl %0, %%r9" :: "m" (suspend2_saved_context.r9));
> +	asm volatile ("movl %0, %%r10" :: "m" (suspend2_saved_context.r10));
> +	asm volatile ("movl %0, %%r11" :: "m" (suspend2_saved_context.r11));
> +	asm volatile ("movl %0, %%r12" :: "m" (suspend2_saved_context.r12));
> +	asm volatile ("movl %0, %%r13" :: "m" (suspend2_saved_context.r13));
> +	asm volatile ("movl %0, %%r14" :: "m" (suspend2_saved_context.r14));
> +	asm volatile ("movl %0, %%r15" :: "m" (suspend2_saved_context.r15));
> +
> +	/*
> +	 * the flags
> +	 */
> +	asm volatile ("pushl %0 ; popfl" :: "m" (suspend2_saved_context.eflags));
> +	
> +	asm volatile ("xorq	%rax, %rax");
> +
> +	/*
> +	 * control registers
> +	 */
> +	asm volatile ("movl %0, %%cr4" :: "r" (suspend2_saved_context.cr4));
> +	asm volatile ("movl %0, %%cr3" :: "r" (suspend2_saved_context.cr3));
> +	asm volatile ("movl %0, %%cr2" :: "r" (suspend2_saved_context.cr2));
> +	asm volatile ("movl %0, %%cr0" :: "r" (suspend2_saved_context.cr0));
> +
> +	/*
> +	 * segment registers
> +	 */
> +	asm volatile ("movw %0, %%ds" :: "r" (suspend2_saved_context.ds));
> +	asm volatile ("movw %0, %%es" :: "r" (suspend2_saved_context.es));
> +	asm volatile ("movw %0, %%fs" :: "r" (suspend2_saved_context.fs));
> +	load_gs_index(suspend2_saved_context.gs);
> +	asm volatile ("movw %0, %%ss" :: "r" (suspend2_saved_context.ss));
> +
> +	wrmsrl(MSR_FS_BASE, suspend2_saved_context.fs_base);
> +	wrmsrl(MSR_GS_BASE, suspend2_saved_context.gs_base);
> +	wrmsrl(MSR_KERNEL_GS_BASE, suspend2_saved_context.gs_kernel_base);
> +
> +	/*
> +	 * now restore the descriptor tables to their proper values
> +	 * ltr is done in fix_processor_context().
> +	 */
> +
> +	asm volatile ("lgdt (%0)" :: "m" (suspend2_saved_context.gdt_limit));
> +	asm volatile ("lidt (%0)" :: "m" (suspend2_saved_context.idt_limit));
> +	asm volatile ("lldt (%0)" :: "m" (suspend2_saved_context.ldt));
> +
> +	fix_processor_context();
> +
> +	do_fpu_end();
> +}
> +
> +#if defined(CONFIG_SUSPEND2) || defined(CONFIG_SMP)
> +extern atomic_t suspend_cpu_counter __nosavedata;
> +extern unsigned char * my_saved_context __nosavedata;
> +static unsigned long c_loops_per_jiffy_ref[NR_CPUS] __nosavedata;
> +#endif
> +
> +#ifdef CONFIG_SUSPEND2
> +#ifndef CONFIG_SMP
> +extern unsigned long loops_per_jiffy;
> +volatile static unsigned long cpu_khz_ref __nosavedata = 0;
> +#endif
> +
> +/* 
> + * APIC support: These routines save the APIC
> + * configuration for the CPU on which they are
> + * being executed
> + */
> +extern void suspend_apic_save_state(void);
> +extern void suspend_apic_reload_state(void);
> +
> +#ifdef CONFIG_SMP
> +/* ------------------------------------------------
> + * BEGIN Irq affinity code, based on code from LKCD.
> + *
> + * IRQ affinity support:
> + * Save and restore IRQ affinities, and set them
> + * all to CPU 0.
> + *
> + * Section between dashes taken from LKCD code.
> + * Perhaps we should be working toward a shared library
> + * of such routines for kexec, lkcd, software suspend
> + * and whatever other similar projects there are?
> + */
> +
> +extern irq_desc_t irq_desc[];
> +extern cpumask_t irq_affinity[];
> +extern cpumask_t saved_affinity[NR_IRQS];
> +
> +/*
> + * Routine to save the old irq affinities and change affinities of all irqs to
> + * the dumping cpu.
> + */
> +static void save_and_set_irq_affinity(void)
> +{
> +	int i;
> +	int cpu = _smp_processor_id();
> +
> +	memcpy(saved_affinity, irq_affinity, NR_IRQS * sizeof(cpumask_t));
> +	for (i = 0; i < NR_IRQS; i++) {
> +		if (irq_desc[i].handler == NULL)
> +			continue;
> +		irq_affinity[i] = cpumask_of_cpu(cpu);
> +		if (irq_desc[i].handler->set_affinity != NULL)
> +			irq_desc[i].handler->set_affinity(i, irq_affinity[i]);
> +	}
> +}
> +
> +/*
> + * Restore old irq affinities.
> + */
> +static void reset_irq_affinity(void)
> +{
> +	int i;
> +
> +	memcpy(irq_affinity, saved_affinity, NR_IRQS * sizeof(cpumask_t));
> +	for (i = 0; i < NR_IRQS; i++) {
> +		if (irq_desc[i].handler == NULL)
> +			continue;
> +		if (irq_desc[i].handler->set_affinity != NULL)
> +			irq_desc[i].handler->set_affinity(i, irq_affinity[i]);
> +	}
> +}
> +
> +/*
> + * END of IRQ affinity code, based on LKCD code.
> + * -----------------------------------------------------------------
> + */
> +#else
> +#define save_and_set_irq_affinity() do { } while(0)
> +#define reset_irq_affinity() do { } while(0)
> +#endif
> +
> +static inline void suspend2_pre_copy(void)
> +{
> +	/*
> +	 * Save the irq affinities before we freeze the
> +	 * other processors!
> +	 */
> +	save_and_set_irq_affinity();
> +	mtrr_save();
> +}
> +
> +static inline void suspend2_post_copy(void)
> +{
> +}
> +
> +static inline void suspend2_pre_copyback(void)
> +{
> +
> +	/* Send all IRQs to CPU 0. We will replace the saved affinities
> +	 * with the suspend-time ones when we copy the original kernel
> +	 * back in place
> +	 */
> +	save_and_set_irq_affinity();
> +	
> +	c_loops_per_jiffy_ref[_smp_processor_id()] = current_cpu_data.loops_per_jiffy;
> +#ifndef CONFIG_SMP
> +	cpu_khz_ref = cpu_khz;
> +	c_loops_per_jiffy_ref[_smp_processor_id()] = loops_per_jiffy;
> +#endif
> +	
> +	/* We want to run from swsusp_pg_dir, since swsusp_pg_dir is stored in constant
> +	 * place in memory 
> +	 */
> +
> +        __asm__( "movl %%ecx,%%cr3\n" ::"c"(__pa(swsusp_pg_dir)));
> +	__asm__( "leaq	init_level4_pgt(%rip),%rax");
> +	__asm__( "subq	$__START_KERNEL_map,%rax");
> +	__asm__( "movq	%rax,%cr3");
> +}
> +
> +static inline void suspend2_restore_processor_context(void)
> +{
> +	restore_processor_context();
> +}
> +	
> +static inline void suspend2_flush_caches(void)
> +{
> +	cpu_clear(_smp_processor_id(), per_cpu(cpu_tlbstate, _smp_processor_id()).active_mm->cpu_vm_mask);
> +	wbinvd();
> +	__flush_tlb_all();
> +	
> +}
> +
> +static inline void suspend2_post_copyback(void)
> +{
> +	mtrr_restore_one_cpu();
> +
> +	/* Get other CPUs to restore their contexts and flush their tlbs. */
> +	clear_suspend_state(SUSPEND_FREEZE_SMP);
> +	
> +	do {
> +		cpu_relax();
> +		barrier();
> +	} while (atomic_read(&suspend_cpu_counter));
> +	mtrr_restore_finish();
> +	
> +	BUG_ON(!irqs_disabled());
> +
> +	/* put the irq affinity tables back */
> +	reset_irq_affinity();
> +	
> +	current_cpu_data.loops_per_jiffy = c_loops_per_jiffy_ref[_smp_processor_id()];
> +#ifndef CONFIG_SMP
> +	loops_per_jiffy = c_loops_per_jiffy_ref[_smp_processor_id()];
> +	cpu_khz = cpu_khz_ref;
> +#endif
> +}
> +
> +#endif
> diff -ruNp 520-version-specific-x86_64.patch-old/include/asm-x86_64/suspend.h 520-version-specific-x86_64.patch-new/include/asm-x86_64/suspend.h
> --- 520-version-specific-x86_64.patch-old/include/asm-x86_64/suspend.h	2005-06-20 11:47:28.000000000 +1000
> +++ 520-version-specific-x86_64.patch-new/include/asm-x86_64/suspend.h	2005-07-04 23:14:19.000000000 +1000
> @@ -43,7 +43,7 @@ extern unsigned long saved_context_eflag
>                         : /* no output */ \
>                         :"r" ((thread)->debugreg##register))
>  
> -extern void fix_processor_context(void);
> +/* extern void fix_processor_context(void); */
>  
>  #ifdef CONFIG_ACPI_SLEEP
>  extern unsigned long saved_eip;
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
-- 
Evolution.
Enumerate the requirements.
Consider the interdependencies.
Calculate the probabilities.
Be amazed that people believe it happened. 


  reply	other threads:[~2005-07-06  5:38 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-06  2:20 [0/48] Suspend2 2.1.9.8 for 2.6.12 Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [3/48] Suspend2 2.1.9.8 for 2.6.12: 301-proc-acpi-sleep-activate-hook.patch Nigel Cunningham
2005-07-10 23:03   ` Christoph Hellwig
2005-07-12  6:45     ` Nigel Cunningham
     [not found]       ` <E1DsHMp-00062f-00@chiark.greenend.org.uk>
2005-07-12 10:07         ` Nigel Cunningham
2005-07-12 10:22           ` Matthew Garrett
2005-07-12 10:34             ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [4/48] Suspend2 2.1.9.8 for 2.6.12: 302-init-hooks.patch Nigel Cunningham
2005-07-06  8:38   ` Shaohua Li
2005-07-06  8:35     ` Nigel Cunningham
2005-07-06 15:38     ` Bernard Blackham
2005-07-06  2:20 ` [PATCH] [1/48] Suspend2 2.1.9.8 for 2.6.12: submit_intro Nigel Cunningham
2005-07-06  6:37   ` Pekka Enberg
2005-07-06  8:12   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [2/48] Suspend2 2.1.9.8 for 2.6.12: 300-reboot-handler-hook.patch Nigel Cunningham
2005-07-06 10:08   ` Pekka Enberg
2005-07-06 10:18     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [5/48] Suspend2 2.1.9.8 for 2.6.12: 350-workthreads.patch Nigel Cunningham
2005-07-10 23:04   ` Christoph Hellwig
2005-07-12  6:40     ` Nigel Cunningham
2005-07-12 10:57       ` Pavel Machek
2005-07-12 11:07         ` Nigel Cunningham
2005-07-12 11:15           ` Pavel Machek
2005-07-12 11:25             ` Nigel Cunningham
2005-07-12 11:25               ` Pavel Machek
2005-07-12 11:45                 ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [6/48] Suspend2 2.1.9.8 for 2.6.12: 351-syncthreads.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [12/48] Suspend2 2.1.9.8 for 2.6.12: 402-mtrr-remove-sysdev.patch Nigel Cunningham
2005-07-10 23:07   ` Christoph Hellwig
2005-07-12  6:33     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [14/48] Suspend2 2.1.9.8 for 2.6.12: 404-check-mounts-support.patch Nigel Cunningham
2005-07-06  8:15   ` Pavel Machek
2005-07-06  8:30     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [9/48] Suspend2 2.1.9.8 for 2.6.12: 354-disable-mce-checking-during-suspend-avoid-smp-deadlock.patch Nigel Cunningham
2005-07-09 11:49   ` Pavel Machek
2005-07-09 12:02     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [10/48] Suspend2 2.1.9.8 for 2.6.12: 360-reset-kswapd-max-order-after-resume.patch Nigel Cunningham
2005-07-10 23:09   ` Christoph Hellwig
2005-07-12  9:05     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [11/48] Suspend2 2.1.9.8 for 2.6.12: 401-e820-table-support.patch Nigel Cunningham
2005-07-06  3:35   ` Zwane Mwaikambo
2005-07-06  3:44     ` Nigel Cunningham
2005-07-06  8:04       ` Pavel Machek
2005-07-06 13:29       ` Zwane Mwaikambo
2005-07-06  2:20 ` [PATCH] [13/48] Suspend2 2.1.9.8 for 2.6.12: 403-debug-pagealloc-support.patch Nigel Cunningham
2005-07-10 23:02   ` Christoph Hellwig
2005-07-12  6:48     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [8/48] Suspend2 2.1.9.8 for 2.6.12: 353-disable-highmem-tlb-flush-for-copyback.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [7/48] Suspend2 2.1.9.8 for 2.6.12: 352-disable-pdflush-during-suspend.patch Nigel Cunningham
2005-07-06  3:34   ` Zwane Mwaikambo
2005-07-06  3:43     ` Nigel Cunningham
2005-07-06 13:27       ` Zwane Mwaikambo
2005-07-06  8:08   ` Pavel Machek
2005-07-06  9:52   ` Russell King
2005-07-10 23:07   ` Christoph Hellwig
2005-07-06  2:20 ` [PATCH] [15/48] Suspend2 2.1.9.8 for 2.6.12: 405-clear-swapfile-bdev-in-swapoff.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [21/48] Suspend2 2.1.9.8 for 2.6.12: 550-documentation.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [23/48] Suspend2 2.1.9.8 for 2.6.12: 600-suspend-header.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [17/48] Suspend2 2.1.9.8 for 2.6.12: 500-version-specific-i386.patch Nigel Cunningham
2005-07-06  3:43   ` YOSHIFUJI Hideaki / 吉藤英明
2005-07-06  2:20 ` [PATCH] [22/48] Suspend2 2.1.9.8 for 2.6.12: 560-Kconfig-and-Makefile-for-suspend2.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [18/48] Suspend2 2.1.9.8 for 2.6.12: 501-tlb-flushing-functions.patch Nigel Cunningham
2005-07-09 11:52   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [16/48] Suspend2 2.1.9.8 for 2.6.12: 406-dynamic-pageflags.patch Nigel Cunningham
2005-07-06  7:46   ` Shaohua Li
2005-07-06  8:13     ` Nigel Cunningham
2005-07-06  8:30       ` Shaohua Li
2005-07-06  2:20 ` [PATCH] [19/48] Suspend2 2.1.9.8 for 2.6.12: 510-version-specific-mac.patch Nigel Cunningham
2005-07-06  3:49   ` Nigel Cunningham [this message]
2005-07-06  5:30     ` hugang
2005-07-06  6:03       ` Nigel Cunningham
2005-07-06  3:53   ` Zwane Mwaikambo
2005-07-06  3:59     ` Nigel Cunningham
2005-07-06 13:40       ` Zwane Mwaikambo
2005-07-06  5:58   ` Pekka Enberg
2005-07-06  6:21     ` Nigel Cunningham
2005-07-06 10:04     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [20/48] Suspend2 2.1.9.8 for 2.6.12: 520-version-specific-x86_64.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [28/48] Suspend2 2.1.9.8 for 2.6.12: 605-kernel_power_suspend.patch Nigel Cunningham
2005-07-10 17:58   ` Pavel Machek
2005-07-12  8:39     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [24/48] Suspend2 2.1.9.8 for 2.6.12: 601-kernel_power_power-header.patch Nigel Cunningham
2005-07-06  3:42   ` Zwane Mwaikambo
2005-07-06  3:45     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [29/48] Suspend2 2.1.9.8 for 2.6.12: 606-all-settings.patch Nigel Cunningham
2005-07-10 18:03   ` Pavel Machek
2005-07-11  9:38     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [30/48] Suspend2 2.1.9.8 for 2.6.12: 607-atomic-copy.patch Nigel Cunningham
2005-07-10 18:01   ` Pavel Machek
2005-07-11  8:58     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [26/48] Suspend2 2.1.9.8 for 2.6.12: 603-suspend2_common-headers.patch Nigel Cunningham
2005-07-06 10:22   ` Pekka Enberg
2005-07-06 11:41     ` Nigel Cunningham
2005-07-06 11:52       ` Pekka J Enberg
2005-07-06 11:58     ` [PATCH] [26/48] " Nigel Cunningham
2005-07-09 11:53   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [27/48] Suspend2 2.1.9.8 for 2.6.12: 604-utility.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [25/48] Suspend2 2.1.9.8 for 2.6.12: 602-smp.patch Nigel Cunningham
2005-07-06 12:03   ` Pekka Enberg
2005-07-06 13:21     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [32/48] Suspend2 2.1.9.8 for 2.6.12: 609-driver-model.patch Nigel Cunningham
2005-07-06 10:10   ` Pekka Enberg
2005-07-06 12:05     ` Nigel Cunningham
2005-07-06 12:14     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [31/48] Suspend2 2.1.9.8 for 2.6.12: 608-compression.patch Nigel Cunningham
2005-07-09 11:55   ` Pavel Machek
2005-07-09 12:15     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [38/48] Suspend2 2.1.9.8 for 2.6.12: 614-plugins.patch Nigel Cunningham
2005-07-10 18:08   ` Pavel Machek
2005-07-11 10:05     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [40/48] Suspend2 2.1.9.8 for 2.6.12: 616-prepare_image.patch Nigel Cunningham
2005-07-10 18:13   ` Pavel Machek
2005-07-12  8:34     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [39/48] Suspend2 2.1.9.8 for 2.6.12: 615-poweroff.patch Nigel Cunningham
2005-07-10 18:18   ` Pavel Machek
2005-07-12  8:31     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [35/48] Suspend2 2.1.9.8 for 2.6.12: 611-io.patch Nigel Cunningham
2005-07-10 18:12   ` Pavel Machek
2005-07-12  8:38     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [36/48] Suspend2 2.1.9.8 for 2.6.12: 612-pagedir.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [41/48] Suspend2 2.1.9.8 for 2.6.12: 617-proc.patch Nigel Cunningham
2005-07-06 10:03   ` Pekka Enberg
2005-07-06  2:20 ` [PATCH] [34/48] Suspend2 2.1.9.8 for 2.6.12: 610-extent.patch Nigel Cunningham
2005-07-06 10:14   ` Pekka Enberg
2005-07-06  2:20 ` [PATCH] [33/48] Suspend2 2.1.9.8 for 2.6.12: 610-encryption.patch Nigel Cunningham
2005-07-10 18:15   ` Pavel Machek
2005-07-12  8:34     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [37/48] Suspend2 2.1.9.8 for 2.6.12: 613-pageflags.patch Nigel Cunningham
2005-07-06 12:01   ` Pekka Enberg
2005-07-07  9:30     ` Nigel Cunningham
2005-07-09 12:16   ` Pavel Machek
2005-07-09 12:32     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [48/48] Suspend2 2.1.9.8 for 2.6.12: 624-filewriter.patch Nigel Cunningham
2005-07-06 10:07   ` Pekka Enberg
2005-07-06 10:13     ` Nigel Cunningham
2005-07-06 10:17       ` Pekka J Enberg
2005-07-09 12:10   ` [PATCH] [48/48] " Pavel Machek
2005-07-09 12:18     ` Nigel Cunningham
2005-07-10 23:14   ` Christoph Hellwig
2005-07-12  6:30     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [45/48] Suspend2 2.1.9.8 for 2.6.12: 621-swsusp-tidy.patch Nigel Cunningham
2005-07-06  9:55   ` Pekka Enberg
2005-07-06  2:20 ` [PATCH] [42/48] Suspend2 2.1.9.8 for 2.6.12: 618-core.patch Nigel Cunningham
2005-07-10 18:21   ` Pavel Machek
2005-07-12  6:59     ` Nigel Cunningham
2005-07-12  7:56       ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [46/48] Suspend2 2.1.9.8 for 2.6.12: 622-swapwriter.patch Nigel Cunningham
2005-07-06  6:33   ` Pekka Enberg
2005-07-07 12:40     ` Nigel Cunningham
2005-07-07 13:05       ` Pekka J Enberg
2005-07-08 13:41         ` Nigel Cunningham
2005-07-07 13:32   ` [PATCH] [46/48] " Pekka Enberg
2005-07-07 21:16     ` Nigel Cunningham
2005-07-07 21:26       ` nickpiggin
2005-07-08 13:42         ` Nigel Cunningham
2005-07-08  5:49       ` Pekka J Enberg
2005-07-08  5:53       ` Pekka J Enberg
2005-07-06  2:20 ` [PATCH] [44/48] Suspend2 2.1.9.8 for 2.6.12: 620-userui.patch Nigel Cunningham
2005-07-10 18:22   ` Pavel Machek
2005-07-12  6:58     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [43/48] Suspend2 2.1.9.8 for 2.6.12: 619-userspace-nofreeze.patch Nigel Cunningham
2005-07-06  6:18   ` Pekka Enberg
2005-07-10 23:15   ` Christoph Hellwig
2005-07-12  6:29     ` Nigel Cunningham
2005-07-12 14:21       ` Christoph Hellwig
2005-07-06  2:20 ` [PATCH] [47/48] Suspend2 2.1.9.8 for 2.6.12: 623-generic-block-io.patch Nigel Cunningham
2005-07-10 18:24   ` Pavel Machek
2005-07-06  6:40 ` [0/48] Suspend2 2.1.9.8 for 2.6.12 Pekka Enberg
2005-07-07 12:19   ` Nigel Cunningham
2005-07-06  8:21 ` Pavel Machek
2005-07-06  8:22 ` Pavel Machek
2005-07-06  8:33   ` Nigel Cunningham
2005-07-07  0:27   ` Nigel Cunningham
2005-07-07 12:04     ` Matthew Garrett
2005-07-07 12:15       ` Nigel Cunningham
2005-07-07 12:49         ` Matthew Garrett
2005-07-07 12:56           ` Nigel Cunningham
2005-07-07 18:54           ` Rafael J. Wysocki
2005-07-07 21:21             ` Nigel Cunningham
2005-07-08 13:30           ` Stefan Seyfried
2005-07-08 22:27             ` Nigel Cunningham
2005-07-07 19:19     ` Pavel Machek
2005-07-10 23:06 ` Christoph Hellwig
2005-07-12  6:36   ` Nigel Cunningham
2005-07-12  6:41     ` Andrew Morton
2005-07-12  6:57       ` Nigel Cunningham
2005-07-12 10:25       ` Nigel Cunningham

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1120621762.4860.16.camel@localhost \
    --to=ncunningham@cyclades.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nigel@suspend2.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox