ACE, is an acronym for Atomic Code Execution and provides
spin_lock_irqsave and spin_lock_irqrestore semantics in
user space.

Signed-off-by: Wink Saville <[EMAIL PROTECTED]>
---
  Documentation/ace.txt |  100 +++++++++++++++++++++++++++++++++++++++++++++++++
  1 files changed, 100 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/ace.txt

Index: linux-2.6/Documentation/ace.txt
===================================================================
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/Documentation/ace.txt     2007-04-29 21:52:04.000000000 -0700
@@ -0,0 +1,100 @@
+Title  : Atomic Code Execution (ACE)
+Authors        : Wink Saville <[EMAIL PROTECTED]>
+
+CONTENTS
+
+1. Concepts
+2. Architectures Supported
+3. Configuring
+4. API Reference
+5. TODO
+
+
+1. Concepts
+
+Atomic Code Execution (ACE) allows code to execute as if it was
+surrounded by spin_lock_irqsave and spin_unlock_irqrestore without
+requiring actual access to the processor flags register. Thus code
+executing within the ACE area can also be executed from user space or
+kernel space. This is accomplished by using spin locks when executing
+within the ACE area and changes to arch/x86_64/kernel/entry.S such that
+when an interrupt occurs while executing code in the ACE area that code
+will be completed before the interrupt is dispatched.
+
+The modifications to entry.S starts at the label ace_common plus the
+macro HANDLE_ACE immediately following. HANDLE_ACE invokes ace_common
+at the beginning of each interrupt, if it finds that code in the ACE
+area was interrupted it causes the ACE code to resume execution prior
+to handling the interrupt.
+
+The code for the ACE area is in the file arch/x86_64/kernel/ace.S. This
+file contains all of the code that maybe executed by the kernel or
+user-space. To be able to share this code with user space the code is
+also compiled by user space, but this is only to generate the jump
+table. Other techniques are possible, but this is the current
+implementation and can be seen in the directory test/ace.
+
+The implementation of the code in the ACE area must be coordinated with
+how the code in HANDLE_ACE is implemented and will be specific to each
+architecture. The primary requirement is that it must be easy for the
+ISR code to continue execution and it must be easy for both user and
+kernel code to execute it. To make it simple to continue execution the
+ISR code alters the ACE code return address.
+
+This is done by having the ACE code always return to the non-ACE code
+via register r11. This allows the HANDLE_ACE code to swap the contents
+of r11 with the interrupted address and thus compete the ACE code which
+will release the spinlock and the original caller will be returned to
+when the ISR completes. Thus giving us the semantic that ACE area code
+was executed as if it was surrounded by a spin_lock_irqsave and a
+spin_unlock_irqrestore.
+
+To allow the above algorithm to work under all circumstances the ACE
+area code must appear in every user and kernel thread, this is
+accomplished by allocting the ACE area using kshmem_alloc_at.
+
+The ACE area is initialized by calling
+drivers/ace/ace_device.c/ace_init() from init/main.c/start_kernel().
+
+
+2. Architectures Supported
+
+- X86_64
+
+
+3. Configuring
+
+In "Processor type and features" select "Atomic Code Execution (ACE)".
+
+
+4. ACE area API Reference
+
+ACE supports the following API:
+
+uint64_t ace_inc_counter(void)
+
+  Increment the counter
+
+
+uint64_t ace_inc_timer_counter(void)
+
+  Increment the timer counter
+
+
+void ace_get_counters(uint64_t *counter, uint64_t *timer_counter)
+
+  Return the counter and timer counter
+
+
+5. ACE device driver API Reference
+
+The ACE driver must be opened before accessing any of the ACE are API
+routines and close upon exiting. The driver name is /dev/ace.
+Currently there is an ioctl routine but no operations are defined.
+
+
+5. TODO
+
+a. Decide how to handle page faults while executing ACE.
+b. Decide upon the actual code needed in ACE.
+


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to