[RFC,net-next v2 4/8] net: Add MSG_NTCOPY sendmsg flag

From: Joe Damato
Date: Sun Jun 12 2022 - 05:00:58 EST


Add MSG_NTCOPY so that user applications can ask the kernel for a
non-temporal copy when copying data into the kernel for TX.

A simple helper is provided to set the iovec iterator copy type if
MSG_NTCOPY is set.

Signed-off-by: Joe Damato <jdamato@xxxxxxxxxx>
---
include/linux/socket.h | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/include/linux/socket.h b/include/linux/socket.h
index 17311ad..98cb735 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -318,6 +318,7 @@ struct ucred {
* plain text and require encryption
*/

+#define MSG_NTCOPY 0x2000000 /* Use a non-temporal copy */
#define MSG_ZEROCOPY 0x4000000 /* Use user data in kernel path */
#define MSG_FASTOPEN 0x20000000 /* Send data in TCP SYN */
#define MSG_CMSG_CLOEXEC 0x40000000 /* Set close_on_exec for file
@@ -378,6 +379,14 @@ struct ucred {
extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr);
extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);

+static inline void msg_set_iter_copy_type(struct msghdr *msg)
+{
+ if (msg->msg_flags & MSG_NTCOPY)
+ msg->msg_iter.iter_copy_type = ITER_NOCACHE_COPY;
+ else
+ msg->msg_iter.iter_copy_type = ITER_COPY;
+}
+
struct timespec64;
struct __kernel_timespec;
struct old_timespec32;
--
2.7.4