[S390] iucv: Locking free version of iucv_message_(receive|send)
Provide a locking free version of iucv_message_receive and iucv_message_send that do not call local_bh_enable in a spin_lock_(bh|irqsave)() context. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
This commit is contained in:

committed by
Martin Schwidefsky

parent
44a01d5ba8
commit
91d5d45ee0
@@ -337,11 +337,34 @@ int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg,
|
||||
* established paths. This function will deal with RMDATA messages
|
||||
* embedded in struct iucv_message as well.
|
||||
*
|
||||
* Locking: local_bh_enable/local_bh_disable
|
||||
*
|
||||
* Returns the result from the CP IUCV call.
|
||||
*/
|
||||
int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg,
|
||||
u8 flags, void *buffer, size_t size, size_t *residual);
|
||||
|
||||
/**
|
||||
* __iucv_message_receive
|
||||
* @path: address of iucv path structure
|
||||
* @msg: address of iucv msg structure
|
||||
* @flags: flags that affect how the message is received (IUCV_IPBUFLST)
|
||||
* @buffer: address of data buffer or address of struct iucv_array
|
||||
* @size: length of data buffer
|
||||
* @residual:
|
||||
*
|
||||
* This function receives messages that are being sent to you over
|
||||
* established paths. This function will deal with RMDATA messages
|
||||
* embedded in struct iucv_message as well.
|
||||
*
|
||||
* Locking: no locking.
|
||||
*
|
||||
* Returns the result from the CP IUCV call.
|
||||
*/
|
||||
int __iucv_message_receive(struct iucv_path *path, struct iucv_message *msg,
|
||||
u8 flags, void *buffer, size_t size,
|
||||
size_t *residual);
|
||||
|
||||
/**
|
||||
* iucv_message_reject
|
||||
* @path: address of iucv path structure
|
||||
@@ -386,11 +409,33 @@ int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg,
|
||||
* transmitted is in a buffer and this is a one-way message and the
|
||||
* receiver will not reply to the message.
|
||||
*
|
||||
* Locking: local_bh_enable/local_bh_disable
|
||||
*
|
||||
* Returns the result from the CP IUCV call.
|
||||
*/
|
||||
int iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
|
||||
u8 flags, u32 srccls, void *buffer, size_t size);
|
||||
|
||||
/**
|
||||
* __iucv_message_send
|
||||
* @path: address of iucv path structure
|
||||
* @msg: address of iucv msg structure
|
||||
* @flags: how the message is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST)
|
||||
* @srccls: source class of message
|
||||
* @buffer: address of data buffer or address of struct iucv_array
|
||||
* @size: length of send buffer
|
||||
*
|
||||
* This function transmits data to another application. Data to be
|
||||
* transmitted is in a buffer and this is a one-way message and the
|
||||
* receiver will not reply to the message.
|
||||
*
|
||||
* Locking: no locking.
|
||||
*
|
||||
* Returns the result from the CP IUCV call.
|
||||
*/
|
||||
int __iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
|
||||
u8 flags, u32 srccls, void *buffer, size_t size);
|
||||
|
||||
/**
|
||||
* iucv_message_send2way
|
||||
* @path: address of iucv path structure
|
||||
|
Reference in New Issue
Block a user