On 2025-08-24 23:53:45 Sun, Haren Myneni wrote: > On Mon, 2025-08-25 at 11:28 +0530, Mahesh J Salgaonkar wrote: > > On 2025-08-12 15:57:08 Tue, Haren Myneni wrote: > > > ibm,send-hvpipe-msg RTAS call is used to send data to the source > > > (Ex: Hardware Management Console) over the hypervisor pipe. The > > > maximum data length of 4048 bytes is supported with this RTAS call > > > right now. The user space uses write() to send this payload which > > > invokes this RTAS. Then the write returns the buffer length > > > (including papr_hvpipe_hdr length) to the user space for success > > > or RTAS failure error. > > > > > > ibm,send-hvpipe-msg call takes source ID as target and the buffer > > > in the form of buffer list. The buffer list format consists of > > > work area of size 4K to hold buffer list and number of 4K work > > > areas depends on buffers is as follows: > > > > > > Length of Buffer List in bytes > > > Address of 4K buffer 1 > > > Length of 4K buffer 1 used > > > ... > > > Address of 4K buffer n > > > Length of 4K buffer n used > > > > > > Only one buffer is used right now because of max payload size is > > > 4088 bytes. writev() can be used in future when supported more > > > > Do you mean 4048 ? > Yes typo error. It should be 4048 bytes as mentioned in the code. > > > > > > than one buffer. > > > > > > Signed-off-by: Haren Myneni <[email protected]> > > > --- > > > arch/powerpc/platforms/pseries/papr-hvpipe.c | 120 > > > ++++++++++++++++++- > > > arch/powerpc/platforms/pseries/papr-hvpipe.h | 7 ++ > > > 2 files changed, 126 insertions(+), 1 deletion(-) > > > > > > diff --git a/arch/powerpc/platforms/pseries/papr-hvpipe.c > > > b/arch/powerpc/platforms/pseries/papr-hvpipe.c > > > index 5768d072859d..c30f4d75e645 100644 > > > --- a/arch/powerpc/platforms/pseries/papr-hvpipe.c > > > +++ b/arch/powerpc/platforms/pseries/papr-hvpipe.c > > > @@ -14,6 +14,7 @@ > > > #include <linux/of.h> > > > #include <asm/machdep.h> > > > #include <asm/rtas.h> > > > +#include <asm/rtas-work-area.h> > > > #include <uapi/asm/papr-hvpipe.h> > > > #include "pseries.h" > > > #include "papr-hvpipe.h" > > > @@ -59,6 +60,51 @@ static LIST_HEAD(hvpipe_src_list); > > > * return code for failure. > > > */ > > > > > > +/* > > > + * ibm,send-hvpipe-msg RTAS call > > > + * @area: Caller-provided work area buffer to send. > > > + * @srcID: Target source for the send pipe message. > > > + */ > > > +static int rtas_ibm_send_hvpipe_msg(struct rtas_work_area *area, > > > u32 srcID) > > > +{ > > > + const s32 token = > > > rtas_function_token(RTAS_FN_IBM_SEND_HVPIPE_MSG); > > > + s32 fwrc; > > > + int ret; > > > + > > > + if (token == RTAS_UNKNOWN_SERVICE) > > > + return -ENOENT; > > > + > > > + do { > > > + fwrc = rtas_call(token, 2, 1, NULL, srcID, > > > + rtas_work_area_phys(area)); > > > + > > > + } while (rtas_busy_delay(fwrc)); > > > + > > > + switch (fwrc) { > > > + case RTAS_SUCCESS: > > > + ret = 0; > > > + break; > > > + case RTAS_HARDWARE_ERROR: > > > + ret = -EIO; > > > + break; > > > + case RTAS_INVALID_PARAMETER: > > > + ret = -EINVAL; > > > + break; > > > + case RTAS_HVPIPE_CLOSED: > > > + ret = -EACCES; > > > > The status -4 is Pipe connection is closed/unavailabe. Instead of > > permission denied does it make sense to return -EPIPE (Broken pipe) ? > > Agree, The user space should close all FDs when sees this error. Will > change it to -EPIPE. > > Thanks for your suggestions.
Feel free to add my Reviewed-by: Reviewed-by: Mahesh Salgaonkar <[email protected]> Thanks, -Mahesh.
