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

From: Dongsheng Song
Date: Wed Oct 31 2012 - 01:06:59 EST


Hi,

There have some misleading in the translation:

-------------------------------- origin --------------------------------
User space is expected to bypass those helpers and implement those things
inline (either in the code emitted directly by the compiler, or part of
the implementation of a library call) when optimizing for a recent enough
processor that has the necessary native support, but only if resulting
binaries are already to be incompatible with earlier ARM processors due to
usage of similar native instructions for other things. In other words
don't make binaries unable to run on earlier processors just for the sake
of not using these kernel helpers if your compiled code is not going to
use new instructions for other purpose.

-------------------------------- Fu Wei --------------------------------
ååéäææåæåçææçæååçåçäçèèäåæïçæçéæåç
èèäèåäçåååèåæäåçèäæäïæèæéèçèååäçäç
ææçïèæääååæèçåççäéåïïèäååäåçååäççä
çæåæäèåèäèåçæåäææ ARM åçäååçæåäæäçèä
èåäçãäåæèïåæäçèçäçääääåäççäçæçæäïå
äèäääääçèäåæèåäçèåèäèåçåææåææåçåäè
èã
-------------------------------- me --------------------------------
ååéäææåçææçæååçåèèäçäåæïåæåçåååäçä
äççäçææäïäèåèäèåçæåäææ ARM åçåäååçæåäï
çæçéæåçèèäèåäçïåååèåæäåçèäæäïæèæéè
çèååäçäçæååïèæääååæèçåççäéåïãäåæèï
åæäçèçäçääääåäççäçææäïåäèäääääçèäåæ
èåäçïåèäèåçåææåææåçåäèèã

The attachment is my review result.

--
Dongsheng
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>
äæçæèèï ååç Dongsheng Song <dongshneg.song@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 ååïã