[PATCH]Documentation: Chinese translation ofDocumentation/arm/kernel_user_helpers.txt

From: Tekkaman Ninja
Date: Tue Oct 30 2012 - 12:20:08 EST


This is a Chinese translated version of
Documentation/arm/kernel_user_helpers.txt

Signed-off-by: Fu Wei <tekkamanninja@xxxxxxxxx>

---
Documentation/zh_CN/arm/kernel_user_helpers.txt | 285 +++++++++++++++++++++++
1 file changed, 285 insertions(+)
create mode 100644 Documentation/zh_CN/arm/kernel_user_helpers.txt

diff --git a/Documentation/zh_CN/arm/kernel_user_helpers.txt b/Documentation/zh_CN/arm/kernel_user_helpers.txt
new file mode 100644
index 0000000..5ec5c6b
--- /dev/null
+++ b/Documentation/zh_CN/arm/kernel_user_helpers.txt
@@ -0,0 +1,285 @@
+Chinese translated version of Documentation/arm/kernel_user_helpers.txt
+
+If you have any comment or update to the content, please contact the
+original document maintainer directly. However, if you have a problem
+communicating in English you can also ask the Chinese maintainer for
+help. Contact the Chinese maintainer if this translation is outdated
+or if there is a problem with the translation.
+
+Maintainer: Nicolas Pitre <nicolas.pitre@xxxxxxxxxx>
+ Dave Martin <dave.martin@xxxxxxxxxx>
+Chinese maintainer: Fu Wei <tekkamanninja@xxxxxxxxx>
+---------------------------------------------------------------------
+Documentation/arm/kernel_user_helpers.txt çäæçè
+
+åææèèæææææçååïèçæèçåææççæèãåæääçèæ
+äææåéçèïäåäåäæççæèæåãåææçèææäåææèç
+èååééïèèçäæççæèã
+èæççæèï Nicolas Pitre <nicolas.pitre@xxxxxxxxxx>
+ Dave Martin <dave.martin@xxxxxxxxxx>
+äæççæèï åç Fu Wei <tekkamanninja@xxxxxxxxx>
+äæççèèï åç Fu Wei <tekkamanninja@xxxxxxxxx>
+äæçæèèï åç Fu Wei <tekkamanninja@xxxxxxxxx>
+
+
+äääææ
+---------------------------------------------------------------------
+åææäççæçéèåäç
+======================
+
+ååæååçéçåååååæääçæäçåäçæçéèéççåææä
+çäçæãåçäåçæçéæäååèå ARM CPU äæåçççæå/æ
+æäèéåææäååçæäæäãèääççæåçææåäæèçæææ
+ääèåæäçæçïäéääåæèæåèçèäçåçéååèççäç
+æååçãäåäïæäççèåèåäåçCPUèåïèååäåäççæ
+äéæåæåä SMP ççãæåèèïåæäçåääåèåçæåäææ
+éèææèääççæåãåæææææèçååçååçææäèçåäå
+çã
+
+èäååæçç VDSO åçäåïääæéçææåïïè VDSO åéææ
+äæçæåïéèåéååéääçæçéæèèïãäçäéääçæåè
+åçæäçåääçåéçäçåæïåää VDSO éæèèèçåéåäå
+èæçççæääååääåæéçåéã
+
+ååéäææåæåçææçæååçåçäçèèäåæïçæçéæåç
+èèäèåäçåååèåæäåçèäæäïæèæéèçèååäçäç
+ææçïèæääååæèçåççäéåïïèäååäåçååäççä
+çæåæäèåèäèåçæåäææ ARM åçäååçæåäæäçèä
+èåäçãäåæèïåæäçèçäçääääåäççäçæçæäïå
+äèäääääçèäåæèåäçèåèäèåçåææåææåçåäè
+èã
+
+æçèåäçåèéçæéçæçèååïæäæåæäçæäèåäçåæ
+åæäåèäååãåæïçååéååèåääçåèåäçèçæååç
+äåïææ __kuser_helper_version çåïèäæïãçææåäï
+èçææåååèçååææèäæïåæååæçæäæäæéèåäçç
+ææïåèèçååæäææèã
+
+kuser_helper_version
+--------------------
+
+äç: 0xffff0ffc
+
+åèåæ:
+
+ extern int32_t __kuser_helper_version;
+
+åä:
+
+ èäååååäååèèåæåççèåäççæåãçæçéåäéèè
+ åæçæåäçåçåçèåäçæåååã
+
+äçèä:
+
+#define __kuser_helper_version (*(int32_t *)0xffff0ffc)
+
+void check_kuser_version(void)
+{
+ if (__kuser_helper_version < 2) {
+ fprintf(stderr, "can't do atomic operations, kernel too old\n");
+ abort();
+ }
+}
+
+ææ:
+
+ çæçéåäåèèäåçåääåääåäèçççåæåæåãäå
+ æèïèäååääååçåååéææèçååéæèåäæã
+
+kuser_get_tls
+-------------
+
+äç: 0xffff0fe0
+
+åèåå:
+
+ void * __kuser_get_tls(void);
+
+èå:
+
+ lr = èååå
+
+èå:
+
+ r0 = TLS å
+
+èçæçååå:
+
+ æ
+
+åä:
+
+ éè __ARM_NR_set_tls ççèçèåäåèçç TLS åã
+
+äçèä:
+
+typedef void * (__kuser_get_tls_t)(void);
+#define __kuser_get_tls (*(__kuser_get_tls_t *)0xffff0fe0)
+
+void foo()
+{
+ void *tls = __kuser_get_tls();
+ printf("TLS = %p\n", tls);
+}
+
+ææ:
+
+ - äå __kuser_helper_version >= 1 æïæèåäçåå
+ ïäåæçæ 2.6.12 ååïã
+
+kuser_cmpxchg
+-------------
+
+äç: 0xffff0fc0
+
+åèåå:
+
+ int __kuser_cmpxchg(int32_t oldval, int32_t newval, volatile int32_t *ptr);
+
+èå:
+
+ r0 = oldval
+ r1 = newval
+ r2 = ptr
+ lr = èååå
+
+èå:
+
+ r0 = æåäç (éæéé)
+ C flag = åæ r0 == 0 åç 1ïåæ r0 != 0 åæéã
+
+èçæçååå:
+
+ r3, ip, flags
+
+åä:
+
+ äå *ptr ä oldval æèåäå newval ä *ptr äã
+ åæ *ptr èæåïåèååäéïååäééåã
+ åæ *ptr èæåïå C flag ääèç1ïäåçèçäçäçæç
+ äåã
+
+äçèä:
+
+typedef int (__kuser_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
+#define __kuser_cmpxchg (*(__kuser_cmpxchg_t *)0xffff0fc0)
+
+int atomic_add(volatile int *ptr, int val)
+{
+ int old, new;
+
+ do {
+ old = *ptr;
+ new = old + val;
+ } while(__kuser_cmpxchg(old, new, ptr));
+
+ return new;
+}
+
+ææ:
+
+ - èääçåææéèååäåååéã
+
+ - äå __kuser_helper_version >= 2 æïæèåäçåå
+ ïäåæçæ 2.6.12 ååïã
+
+kuser_memory_barrier
+--------------------
+
+äç: 0xffff0fa0
+
+åèåå:
+
+ void __kuser_memory_barrier(void);
+
+èå:
+
+ lr = èååå
+
+èå:
+
+ æ
+
+èçæçååå:
+
+ æ
+
+åä:
+
+ åçäääéèåååéäéææåææäæåæçäèæééäå
+ __kuser_cmpxchg äã
+
+äçèä:
+
+typedef void (__kuser_dmb_t)(void);
+#define __kuser_dmb (*(__kuser_dmb_t *)0xffff0fa0)
+
+ææ:
+
+ - äå __kuser_helper_version >= 3 æïæèåäçåå
+ ïäåæçæ 2.6.15 ååïã
+
+kuser_cmpxchg64
+---------------
+
+äç: 0xffff0f60
+
+åèåå:
+
+ int __kuser_cmpxchg64(const int64_t *oldval,
+ const int64_t *newval,
+ volatile int64_t *ptr);
+
+èå:
+
+ r0 = æå oldval
+ r1 = æå newval
+ r2 = æåçæå
+ lr = èååå
+
+èå:
+
+ r0 = æåäç (éæéé)
+ C flag = åæ r0 == 0 åç 1ïåæ r0 != 0 åæéã
+
+èçæçååå:
+
+ r3, lr, flags
+
+åä:
+
+ äå *ptr çä *oldval æåç 64 äåæïèåäå *newval
+ æåç 64 äåä *ptr äãåæ *ptr èæåïåèååäéï
+ ååäééåã
+
+ åæ *ptr èæåïå C flag ääèç1ïäåçèçäçäçæç
+ äåã
+
+äçèä:
+
+typedef int (__kuser_cmpxchg64_t)(const int64_t *oldval,
+ const int64_t *newval,
+ volatile int64_t *ptr);
+#define __kuser_cmpxchg64 (*(__kuser_cmpxchg64_t *)0xffff0f60)
+
+int64_t atomic_add64(volatile int64_t *ptr, int64_t val)
+{
+ int64_t old, new;
+
+ do {
+ old = *ptr;
+ new = old + val;
+ } while(__kuser_cmpxchg64(&old, &new, ptr));
+
+ return new;
+}
+
+ææ:
+
+ - èääçåææéèååäåååéã
+
+ - çäèäèççäçéåïæèåäçèè 2 äåèç kuser âæâïï
+ åæ 0xffff0f80 äèääææçååçã
+
+ - äå __kuser_helper_version >= 5 æïæèåäçåå
+ ïäåæçæ 3.1 ååïã
--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/