mcs_rwlock: remove aligned(64) attribute if ENABLE_UBSAN
The attribute would impose 64-bytes alignment that we do not respect later because the whole structures (e.g. process/thread) are allocated at 32bytes boundaries with kmalloc These are however justified for performance reason as we do not want them on same page cache line, so just accept slower performance for UBSAN only Change-Id: Ia28968257675b7ae97b0391471986e6bf6485b7b
This commit is contained in:
@ -8,6 +8,7 @@
|
|||||||
#include <ihk/atomic.h>
|
#include <ihk/atomic.h>
|
||||||
#include "affinity.h"
|
#include "affinity.h"
|
||||||
#include <lwk/compiler.h>
|
#include <lwk/compiler.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
//#define DEBUG_SPINLOCK
|
//#define DEBUG_SPINLOCK
|
||||||
//#define DEBUG_MCS_RWLOCK
|
//#define DEBUG_MCS_RWLOCK
|
||||||
@ -259,7 +260,11 @@ typedef struct mcs_lock_node {
|
|||||||
unsigned long locked;
|
unsigned long locked;
|
||||||
struct mcs_lock_node *next;
|
struct mcs_lock_node *next;
|
||||||
unsigned long irqsave;
|
unsigned long irqsave;
|
||||||
} __attribute__((aligned(64))) mcs_lock_node_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_lock_node_t;
|
||||||
|
#else
|
||||||
|
} mcs_lock_node_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef mcs_lock_node_t mcs_lock_t;
|
typedef mcs_lock_node_t mcs_lock_t;
|
||||||
|
|
||||||
@ -349,14 +354,22 @@ typedef struct mcs_rwlock_node {
|
|||||||
char dmy1; // unused
|
char dmy1; // unused
|
||||||
char dmy2; // unused
|
char dmy2; // unused
|
||||||
struct mcs_rwlock_node *next;
|
struct mcs_rwlock_node *next;
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_node_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_node_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_node_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct mcs_rwlock_node_irqsave {
|
typedef struct mcs_rwlock_node_irqsave {
|
||||||
#ifndef SPINLOCK_IN_MCS_RWLOCK
|
#ifndef SPINLOCK_IN_MCS_RWLOCK
|
||||||
struct mcs_rwlock_node node;
|
struct mcs_rwlock_node node;
|
||||||
#endif
|
#endif
|
||||||
unsigned long irqsave;
|
unsigned long irqsave;
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_node_irqsave_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_node_irqsave_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_node_irqsave_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct mcs_rwlock_lock {
|
typedef struct mcs_rwlock_lock {
|
||||||
#ifdef SPINLOCK_IN_MCS_RWLOCK
|
#ifdef SPINLOCK_IN_MCS_RWLOCK
|
||||||
@ -365,7 +378,11 @@ typedef struct mcs_rwlock_lock {
|
|||||||
struct mcs_rwlock_node reader; /* common reader lock */
|
struct mcs_rwlock_node reader; /* common reader lock */
|
||||||
struct mcs_rwlock_node *node; /* base */
|
struct mcs_rwlock_node *node; /* base */
|
||||||
#endif
|
#endif
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_lock_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_lock_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_lock_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mcs_rwlock_init(struct mcs_rwlock_lock *lock)
|
mcs_rwlock_init(struct mcs_rwlock_lock *lock)
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
#include <ihk/cpu.h>
|
#include <ihk/cpu.h>
|
||||||
#include <ihk/atomic.h>
|
#include <ihk/atomic.h>
|
||||||
#include <lwk/compiler.h>
|
#include <lwk/compiler.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
//#define DEBUG_SPINLOCK
|
//#define DEBUG_SPINLOCK
|
||||||
//#define DEBUG_MCS_RWLOCK
|
//#define DEBUG_MCS_RWLOCK
|
||||||
@ -182,7 +183,11 @@ typedef struct mcs_lock_node {
|
|||||||
unsigned long locked;
|
unsigned long locked;
|
||||||
struct mcs_lock_node *next;
|
struct mcs_lock_node *next;
|
||||||
unsigned long irqsave;
|
unsigned long irqsave;
|
||||||
} __attribute__((aligned(64))) mcs_lock_node_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_lock_node_t;
|
||||||
|
#else
|
||||||
|
} mcs_lock_node_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef mcs_lock_node_t mcs_lock_t;
|
typedef mcs_lock_node_t mcs_lock_t;
|
||||||
|
|
||||||
@ -275,14 +280,22 @@ typedef struct mcs_rwlock_node {
|
|||||||
char dmy1; // unused
|
char dmy1; // unused
|
||||||
char dmy2; // unused
|
char dmy2; // unused
|
||||||
struct mcs_rwlock_node *next;
|
struct mcs_rwlock_node *next;
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_node_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_node_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_node_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct mcs_rwlock_node_irqsave {
|
typedef struct mcs_rwlock_node_irqsave {
|
||||||
#ifndef SPINLOCK_IN_MCS_RWLOCK
|
#ifndef SPINLOCK_IN_MCS_RWLOCK
|
||||||
struct mcs_rwlock_node node;
|
struct mcs_rwlock_node node;
|
||||||
#endif
|
#endif
|
||||||
unsigned long irqsave;
|
unsigned long irqsave;
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_node_irqsave_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_node_irqsave_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_node_irqsave_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct mcs_rwlock_lock {
|
typedef struct mcs_rwlock_lock {
|
||||||
#ifdef SPINLOCK_IN_MCS_RWLOCK
|
#ifdef SPINLOCK_IN_MCS_RWLOCK
|
||||||
@ -291,7 +304,11 @@ typedef struct mcs_rwlock_lock {
|
|||||||
struct mcs_rwlock_node reader; /* common reader lock */
|
struct mcs_rwlock_node reader; /* common reader lock */
|
||||||
struct mcs_rwlock_node *node; /* base */
|
struct mcs_rwlock_node *node; /* base */
|
||||||
#endif
|
#endif
|
||||||
} __attribute__((aligned(64))) mcs_rwlock_lock_t;
|
#ifndef ENABLE_UBSAN
|
||||||
|
} __aligned(64) mcs_rwlock_lock_t;
|
||||||
|
#else
|
||||||
|
} mcs_rwlock_lock_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mcs_rwlock_init(struct mcs_rwlock_lock *lock)
|
mcs_rwlock_init(struct mcs_rwlock_lock *lock)
|
||||||
|
|||||||
Reference in New Issue
Block a user