From: Wink Saville <wink-hKg/bvL8yClBDgjK7y7TUQ@public.gmane.org>
To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: [PATCH 1/4] ACE documentation
Date: Sat, 05 May 2007 18:54:27 -0700 [thread overview]
Message-ID: <463D3553.1040403@saville.com> (raw)
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 <wink-hKg/bvL8yClBDgjK7y7TUQ@public.gmane.org>
---
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 <wink-hKg/bvL8yClBDgjK7y7TUQ@public.gmane.org>
+
+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/
next reply other threads:[~2007-05-06 1:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-06 1:54 Wink Saville [this message]
[not found] ` <463D3553.1040403-hKg/bvL8yClBDgjK7y7TUQ@public.gmane.org>
2007-05-06 14:49 ` [PATCH 1/4] ACE documentation Arnd Bergmann
[not found] ` <200705061649.38252.arnd-r2nGTMty4D4@public.gmane.org>
2007-05-06 17:59 ` Wink Saville
[not found] ` <d4cf37a60705061059t282a70d8j572447f27ceb5f10-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-05-06 23:04 ` Arnd Bergmann
[not found] ` <200705070104.56130.arnd-r2nGTMty4D4@public.gmane.org>
2007-05-07 2:14 ` Wink Saville
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=463D3553.1040403@saville.com \
--to=wink-hkg/bvl8yclbdgjk7y7tuq@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
/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