Message ID | 20171106212734.GA29237@ls3530.fritz.box (mailing list archive) |
---|---|
State | Rejected, archived |
Headers | show |
On 2017-11-06 4:27 PM, Helge Deller wrote: > /* Check the validity of the size pointer */ > - subi,>>= 4, %r23, %r0 > - b,n lws_exit_nosys > + cmpib,COND(<<),n 3, %r23, lws_exit_nosys I don't believe that we want to use COND here (i.e., we want a 32-bit check). We might not need to trim the upper 32-bits r23. The reason the code uses nullification is the fast path occurs when the "b,n" is nullified. So we avoid the branch prediction penalty. I'd have to check whether the fast path with the cmpib instruction is the taken branch or not. Have no object to changing "4" to "3" instead of changing the condition. Dave
On 2017-11-06 5:45 PM, John David Anglin wrote: > On 2017-11-06 4:27 PM, Helge Deller wrote: >> /* Check the validity of the size pointer */ >> - subi,>>= 4, %r23, %r0 >> - b,n lws_exit_nosys >> + cmpib,COND(<<),n 3, %r23, lws_exit_nosys > I don't believe that we want to use COND here (i.e., we want a 32-bit > check). We might not > need to trim the upper 32-bits r23. > > The reason the code uses nullification is the fast path occurs when > the "b,n" is nullified. So we > avoid the branch prediction penalty. I'd have to check whether the > fast path with the cmpib instruction > is the taken branch or not. For cmpib with "<<" condition, the hint for a backward branch is likely taken. The branch to lws_exit_nosys is backward. Dave
Helge Deller wrote... > * Christoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>: > > Status: My system boots and all my tests pass. However, I find smartd > > stalling in 100% CPU, might be coincidence. Now I'm putting some more > > load onto the box to see whether it's less crashy then it used to be the > > previous weeks. > > Did you continued your tests? > How were the results. Basically I gave up on this. My change made things worse, and while I still didn't get the point (read: For my understanding there's a discrepancy between the syscall's description and what actually happens), it's certainly better to keep things the way they are. > > Aside, there is another ",ma" modifier in lws_compare_and_swap that I > > fail to understand. Haven't checked yet in detail yet, though. > > I'd suggest to keep the other ",ma" modifiers for now. Since, as I presume, this has no impact on performance, this boils down to aid a human reviewing the code in understanding what's happening here. Christoph -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 41e60a9c7db2..f8a8754322ae 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -698,8 +698,7 @@ lws_compare_and_swap_2: #endif /* Check the validity of the size pointer */ - subi,>>= 4, %r23, %r0 - b,n lws_exit_nosys + cmpib,COND(<<),n 3, %r23, lws_exit_nosys /* Jump to the functions which will load the old and new values into registers depending on the their size */