|
@@ -366,7 +366,7 @@ static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct page *page
|
|
|
const char *n)
|
|
|
{
|
|
|
VM_BUG_ON(!irqs_disabled());
|
|
|
-#ifdef CONFIG_CMPXCHG_DOUBLE
|
|
|
+#if defined(CONFIG_CMPXCHG_DOUBLE) && defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE)
|
|
|
if (s->flags & __CMPXCHG_DOUBLE) {
|
|
|
if (cmpxchg_double(&page->freelist, &page->counters,
|
|
|
freelist_old, counters_old,
|
|
@@ -400,7 +400,7 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct page *page,
|
|
|
void *freelist_new, unsigned long counters_new,
|
|
|
const char *n)
|
|
|
{
|
|
|
-#ifdef CONFIG_CMPXCHG_DOUBLE
|
|
|
+#if defined(CONFIG_CMPXCHG_DOUBLE) && defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE)
|
|
|
if (s->flags & __CMPXCHG_DOUBLE) {
|
|
|
if (cmpxchg_double(&page->freelist, &page->counters,
|
|
|
freelist_old, counters_old,
|
|
@@ -3014,7 +3014,7 @@ static int kmem_cache_open(struct kmem_cache *s,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_CMPXCHG_DOUBLE
|
|
|
+#if defined(CONFIG_CMPXCHG_DOUBLE) && defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE)
|
|
|
if (system_has_cmpxchg_double() && (s->flags & SLAB_DEBUG_FLAGS) == 0)
|
|
|
/* Enable fast mode */
|
|
|
s->flags |= __CMPXCHG_DOUBLE;
|