All of lore.kernel.org
 help / color / mirror / Atom feed
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/

             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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.