function libtest_misc_determine_erg

From liblfds.org
Revision as of 20:16, 17 February 2017 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Source Files

└── test_and_benchmark
    └── libtest
        ├── inc
        │   └── libtest
        │       └── libtest_misc.h
        └── src
            └── libshared_misc
                └── libtest_misc_determine_erg.c

Enums

enum libtest_determine_erg_result
{
  LIBTEST_MISC_DETERMINE_ERG_RESULT_SUCCESS,
  LIBTEST_MISC_DETERMINE_ERG_RESULT_ONE_PHYSICAL_CORE,
  LIBTEST_MISC_DETERMINE_ERG_RESULT_ONE_PHYSICAL_CORE_OR_NO_LLSC,
  LIBTEST_MISC_DETERMINE_ERG_RESULT_NO_LLSC,
  LIBTEST_MISC_DETERMINE_ERG_RESULT_NOT_SUPPORTED
};

Opaque Structures

struct libshared_memory_state;

Prototype

void libtest_misc_determine_erg( struct libshared_memory_state *ms,
                                 lfds711_pal_uint_t (*count_array)[10],
                                 enum libtest_misc_determine_erg_result *der,
                                 lfds711_pal_uint_t *erg_length_in_bytes );

Parameters

struct libshared_memory_state *ms

A pointer to an initialized struct libshared_memory_state. See Notes for recommended amounts of store.

lfds711_pal_uint_t (*count_array)[10]

A pointer to an array of ten lfds711_pal_uint_t. The elements in this array will be set to the number of successful operations for ERG sizes 4 to 2048 bytes, where index 0 contains the count for 4 bytes and index 9 the count for 2048 bytes. These results are made available to the user because the approach used is not foolproof, and so manual inspection of the results may be necessary or useful.

enum libtest_misc_determine_erg_result *der

The attempt to determine the ERG length may succeed or it may fail and failure can occur for a range of reasons. This argument is set to the outcome of the attempt.

lfds711_pal_uint_t *erg_length_in_bytes

If der is set to LIBTEST_MISC_DETERMINE_ERG_RESULT_SUCCESS, then the lfds711_pal_uint_t pointed to by erg_length_in_bytes is set to the ERG length.

Notes

This function is only relevant to ARM and POWERPC, and currently is only implemented for ARM32.

Please read Exclusive Reservation Granule (ARM, POWERPC) for an explanation of the concept of ERG and why it is EXTREMELY IMPORTANT to get the correct length and to configure the liblfds711 porting abtraction layer with that length.

Example

See Also