Hi Reinette, On Thu, Mar 7, 2024 at 2:53 PM Reinette Chatre <reinette.chatre@xxxxxxxxx> wrote: > > Hi Peter, > > On 3/7/2024 2:33 PM, Peter Newman wrote: > > Hi Reinette, > > > > On Thu, Mar 7, 2024 at 12:41 PM Reinette Chatre > > <reinette.chatre@xxxxxxxxx> wrote: > >> I understood the proposed interface appeared to focus on one use case > >> while the goal is to find an interface to support all requirements. > >> With this proposed interface it it possible to make large scale changes > >> with a single sysfs write. > > > > Ok I see you requested[1] one such example earlier. > > > > From what I've read, is this what you had in mind of reassigning 32 > > counters from the first 16 groups to the next? > > > > I had found that it's hard to get a single write() syscall out of a > > string containing newlines, so I'm using one explicit call: > > Apologies but this is not clear to me, could you please elaborate? > > If you are referring to testing via shell you can try ANSI-C Quoting like: > echo -n $'c1/m1/00=_\nc2/m2/00=_\n' The echo command uses buffered output through printf() and putchar()[1]. The behavior of the buffering seems to be a write() call after each newline, causing the kernel to see the request below as 32 individual commands. > > > > > write([mbm_assign_control fd], > > "/c1/m1/00=_;02=_;03=_;04=_;05=_;06=_;07=_;08=_;09=_;10=_;11=_;12=_;13=_;14=_;15=_\n" > > "/c1/m2/00=_;01=_;02=_;03=_;04=_;05=_;06=_;07=_;08=_;09=_;10=_;11=_;12=_;13=_;14=_;15=_\n" > > "/c1/m3/00=_;01=_;02=_;03=_;04=_;05=_;06=_;07=_;08=_;09=_;10=_;11=_;12=_;13=_;14=_;15=_\n" > > [...] > > "/c1/m14/00=_;01=_;02=_;03=_;04=_;05=_;06=_;07=_;08=_;09=_;10=_;11=_;12=_;13=_;14=_;15=_\n" > > "/c1/m15/00=_;01=_;02=_;03=_;04=_;05=_;06=_;07=_;08=_;09=_;10=_;11=_;12=_;13=_;14=_;15=_\n" > > "/c1/m16/00=lt;01=lt;02=lt;03=lt;04=lt;05=lt;06=lt;07=lt;08=lt;09=lt;10=lt;11=lt;12=lt;13=lt;14=lt;15=lt\n" > > "/c1/m17/00=lt;01=lt;02=lt;03=lt;04=lt;05=lt;06=lt;07=lt;08=lt;09=lt;10=lt;11=lt;12=lt;13=lt;14=lt;15=lt\n" > > "/c1/m18/00=lt;01=lt;02=lt;03=lt;04=lt;05=lt;06=lt;07=lt;08=lt;09=lt;10=lt;11=lt;12=lt;13=lt;14=lt;15=lt\n" > > [...] > > "/c1/m30/00=lt;01=lt;02=lt;03=lt;04=lt;05=lt;06=lt;07=lt;08=lt;09=lt;10=lt;11=lt;12=lt;13=lt;14=lt;15=lt\n" > > "/c1/m31/00=lt;01=lt;02=lt;03=lt;04=lt;05=lt;06=lt;07=lt;08=lt;09=lt;10=lt;11=lt;12=lt;13=lt;14=lt;15=lt\n", > > size); > > (so far no "/" needed as prefix) > > We could also consider some syntax to mean "all domains". For example, > if no domain given then it can mean "all domains"? > So, your example could possibly also be accomplished with a > > c1/m1/=_\nc1/m2/=_\nc1/m3/=_\n [...] c1/m16/=lt\nc1/m17/=lt\nc1/m18/=_\n [...] > > Any thoughts? Yes, that would be helpful. The AMD implementations we use typically have 16 domains or more. Thanks! -Peter [1] https://git.savannah.gnu.org/cgit/bash.git/tree/builtins/echo.def