mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-13 08:30:18 +00:00
powerpc/watchpoint: Fix 512 byte boundary limit
Milton Miller reported that we are aligning start and end address to wrong size SZ_512M. It should be SZ_512. Fix that. While doing this change I also found a case where ALIGN() comparison fails. Within a given aligned range, ALIGN() of two addresses does not match when start address is pointing to the first byte and end address is pointing to any other byte except the first one. But that's not true for ALIGN_DOWN(). ALIGN_DOWN() of any two addresses within that range will always point to the first byte. So use ALIGN_DOWN() instead of ALIGN(). Fixes: e68ef121c1f4 ("powerpc/watchpoint: Use builtin ALIGN*() macros") Reported-by: Milton Miller <miltonm@us.ibm.com> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Tested-by: Jordan Niethe <jniethe5@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200723090813.303838-2-ravi.bangoria@linux.ibm.com
This commit is contained in:
parent
269e829f48
commit
3190ecbfee
@ -419,7 +419,7 @@ static int hw_breakpoint_validate_len(struct arch_hw_breakpoint *hw)
|
||||
if (dawr_enabled()) {
|
||||
max_len = DAWR_MAX_LEN;
|
||||
/* DAWR region can't cross 512 bytes boundary */
|
||||
if (ALIGN(start_addr, SZ_512M) != ALIGN(end_addr - 1, SZ_512M))
|
||||
if (ALIGN_DOWN(start_addr, SZ_512) != ALIGN_DOWN(end_addr - 1, SZ_512))
|
||||
return -EINVAL;
|
||||
} else if (IS_ENABLED(CONFIG_PPC_8xx)) {
|
||||
/* 8xx can setup a range without limitation */
|
||||
|
Loading…
x
Reference in New Issue
Block a user