diff options
Diffstat (limited to 'arch/tile/kernel/intvec_32.S')
-rw-r--r-- | arch/tile/kernel/intvec_32.S | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/tile/kernel/intvec_32.S b/arch/tile/kernel/intvec_32.S index eabf1ef02cb2..fffcfa6b3a62 100644 --- a/arch/tile/kernel/intvec_32.S +++ b/arch/tile/kernel/intvec_32.S | |||
@@ -1556,7 +1556,10 @@ STD_ENTRY(_sys_clone) | |||
1556 | .align 64 | 1556 | .align 64 |
1557 | /* Align much later jump on the start of a cache line. */ | 1557 | /* Align much later jump on the start of a cache line. */ |
1558 | #if !ATOMIC_LOCKS_FOUND_VIA_TABLE() | 1558 | #if !ATOMIC_LOCKS_FOUND_VIA_TABLE() |
1559 | nop; nop | 1559 | nop |
1560 | #if PAGE_SIZE >= 0x10000 | ||
1561 | nop | ||
1562 | #endif | ||
1560 | #endif | 1563 | #endif |
1561 | ENTRY(sys_cmpxchg) | 1564 | ENTRY(sys_cmpxchg) |
1562 | 1565 | ||
@@ -1587,6 +1590,10 @@ ENTRY(sys_cmpxchg) | |||
1587 | * NOTE: this must match __atomic_hashed_lock() in lib/atomic_32.c. | 1590 | * NOTE: this must match __atomic_hashed_lock() in lib/atomic_32.c. |
1588 | */ | 1591 | */ |
1589 | 1592 | ||
1593 | #if (PAGE_OFFSET & 0xffff) != 0 | ||
1594 | # error Code here assumes PAGE_OFFSET can be loaded with just hi16() | ||
1595 | #endif | ||
1596 | |||
1590 | #if ATOMIC_LOCKS_FOUND_VIA_TABLE() | 1597 | #if ATOMIC_LOCKS_FOUND_VIA_TABLE() |
1591 | { | 1598 | { |
1592 | /* Check for unaligned input. */ | 1599 | /* Check for unaligned input. */ |
@@ -1679,11 +1686,14 @@ ENTRY(sys_cmpxchg) | |||
1679 | lw r26, r0 | 1686 | lw r26, r0 |
1680 | } | 1687 | } |
1681 | { | 1688 | { |
1682 | /* atomic_locks is page aligned so this suffices to get its addr. */ | 1689 | auli r21, zero, ha16(atomic_locks) |
1683 | auli r21, zero, hi16(atomic_locks) | ||
1684 | 1690 | ||
1685 | bbns r23, .Lcmpxchg_badaddr | 1691 | bbns r23, .Lcmpxchg_badaddr |
1686 | } | 1692 | } |
1693 | #if PAGE_SIZE < 0x10000 | ||
1694 | /* atomic_locks is page-aligned so for big pages we don't need this. */ | ||
1695 | addli r21, r21, lo16(atomic_locks) | ||
1696 | #endif | ||
1687 | { | 1697 | { |
1688 | /* | 1698 | /* |
1689 | * Insert the hash bits into the page-aligned pointer. | 1699 | * Insert the hash bits into the page-aligned pointer. |