From: Steven Rostedt <rostedt@goodmis.org>
To: linux-trace-devel@vger.kernel.org
Subject: [PATCH 09/38] trace-cmd: Move size and cmd in tracecmd_msg into its own header struct
Date: Wed, 03 Jan 2018 12:52:11 -0500 [thread overview]
Message-ID: <20180103175336.060949341@goodmis.org> (raw)
In-Reply-To: 20180103175202.044283643@goodmis.org
[-- Attachment #1: 0009-trace-cmd-Move-size-and-cmd-in-tracecmd_msg-into-its.patch --]
[-- Type: text/plain, Size: 6661 bytes --]
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
Move the size and cmd fields of the structure tracecmd_msg into its own
header. This will allow us to remove the individual pointers that exist in
the anonymous union of the tracecmd_msg structure into their own union. But
that will require the individual msg types size defines changing. That
change will be simplified if the header is separate.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
trace-msg.c | 63 ++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 33 insertions(+), 30 deletions(-)
diff --git a/trace-msg.c b/trace-msg.c
index 09202d930ace..2e4a9bfb1d64 100644
--- a/trace-msg.c
+++ b/trace-msg.c
@@ -44,8 +44,7 @@ typedef __be32 be32;
/* Two (4k) pages is the max transfer for now */
#define MSG_MAX_LEN 8192
- /* size + cmd */
-#define MSG_HDR_LEN ((sizeof(be32)) + (sizeof(be32)))
+#define MSG_HDR_LEN sizeof(struct tracecmd_msg_header)
#define MSG_DATA_LEN (MSG_MAX_LEN - MSG_HDR_LEN)
@@ -105,13 +104,17 @@ enum tracecmd_msg_cmd {
MSG_FINMETA = 7,
};
+struct tracecmd_msg_header {
+ be32 size;
+ be32 cmd;
+} __attribute__((packed));
+
struct tracecmd_msg {
- be32 size;
- be32 cmd;
+ struct tracecmd_msg_header hdr;
union {
- struct tracecmd_msg_tinit tinit;
- struct tracecmd_msg_rinit rinit;
- struct tracecmd_msg_meta meta;
+ struct tracecmd_msg_tinit tinit;
+ struct tracecmd_msg_rinit rinit;
+ struct tracecmd_msg_meta meta;
};
} __attribute__((packed));
@@ -124,16 +127,16 @@ static int msg_write(int fd, struct tracecmd_msg *msg, int size, void *addr)
ret = __do_write_check(fd, msg, size);
if (ret < 0)
return ret;
- if (ntohl(msg->size) <= size)
+ if (ntohl(msg->hdr.size) <= size)
return 0;
- return __do_write_check(fd, addr, ntohl(msg->size) - size);
+ return __do_write_check(fd, addr, ntohl(msg->hdr.size) - size);
}
static ssize_t msg_do_write_check(int fd, struct tracecmd_msg *msg)
{
int ret;
- switch (ntohl(msg->cmd)) {
+ switch (ntohl(msg->hdr.cmd)) {
case MSG_TINIT:
ret = msg_write(fd, msg, MIN_TINIT_SIZE, msg->tinit.opt);
break;
@@ -144,7 +147,7 @@ static ssize_t msg_do_write_check(int fd, struct tracecmd_msg *msg)
ret = msg_write(fd, msg, MIN_META_SIZE, msg->meta.buf);
break;
default:
- ret = __do_write_check(fd, msg, ntohl(msg->size));
+ ret = __do_write_check(fd, msg, ntohl(msg->hdr.size));
}
return ret;
@@ -175,7 +178,7 @@ static int make_tinit(struct tracecmd_msg *msg)
msg->tinit.page_size = htonl(page_size);
msg->tinit.opt_num = htonl(opt_num);
- msg->size = htonl(size);
+ msg->hdr.size = htonl(size);
return 0;
}
@@ -204,7 +207,7 @@ static int make_rinit(struct tracecmd_msg *msg)
ptr++;
}
- msg->size = htonl(size);
+ msg->hdr.size = htonl(size);
return 0;
}
@@ -219,7 +222,7 @@ static int tracecmd_msg_create(u32 cmd, struct tracecmd_msg *msg)
}
memset(msg, 0, sizeof(*msg));
- msg->cmd = htonl(cmd);
+ msg->hdr.cmd = htonl(cmd);
switch (cmd) {
case MSG_TINIT:
@@ -232,14 +235,14 @@ static int tracecmd_msg_create(u32 cmd, struct tracecmd_msg *msg)
break;
}
- msg->size = htonl(MSG_HDR_LEN);
+ msg->hdr.size = htonl(MSG_HDR_LEN);
return ret;
}
static void msg_free(struct tracecmd_msg *msg)
{
- switch (ntohl(msg->cmd)) {
+ switch (ntohl(msg->hdr.cmd)) {
case MSG_TINIT:
free(msg->tinit.opt);
break;
@@ -306,11 +309,11 @@ static int msg_read_extra(int fd, void *buf, int *n,
static int tracecmd_msg_read_extra(int fd, struct tracecmd_msg *msg, int *n)
{
- int size = ntohl(msg->size);
+ int size = ntohl(msg->hdr.size);
int rsize;
int ret;
- switch (ntohl(msg->cmd)) {
+ switch (ntohl(msg->hdr.cmd)) {
case MSG_TINIT:
msg->tinit.opt = NULL;
@@ -353,7 +356,7 @@ static int tracecmd_msg_recv(int fd, struct tracecmd_msg *msg)
if (ret < 0)
return ret;
- size = ntohl(msg->size);
+ size = ntohl(msg->hdr.size);
if (size > MSG_MAX_LEN)
/* too big */
goto error;
@@ -403,7 +406,7 @@ static int tracecmd_msg_wait_for_msg(int fd, struct tracecmd_msg *msg)
return ret;
}
- cmd = ntohl(msg->cmd);
+ cmd = ntohl(msg->hdr.cmd);
if (cmd == MSG_CLOSE)
return -ECONNABORTED;
@@ -454,9 +457,9 @@ static void error_operation_for_server(struct tracecmd_msg *msg)
{
u32 cmd;
- cmd = ntohl(msg->cmd);
+ cmd = ntohl(msg->hdr.cmd);
- warning("Message: cmd=%d size=%d\n", cmd, ntohl(msg->size));
+ warning("Message: cmd=%d size=%d\n", cmd, ntohl(msg->hdr.size));
}
#define MAX_OPTION_SIZE 4096
@@ -478,7 +481,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
return ret;
}
- cmd = ntohl(msg.cmd);
+ cmd = ntohl(msg.hdr.cmd);
if (cmd != MSG_TINIT) {
ret = -EINVAL;
goto error;
@@ -500,7 +503,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
options = ntohl(msg.tinit.opt_num);
for (i = 0; i < options; i++) {
- if (size + sizeof(*opt) > ntohl(msg.size)) {
+ if (size + sizeof(*opt) > ntohl(msg.hdr.size)) {
plog("Not enough message for options\n");
ret = -EINVAL;
goto error;
@@ -508,7 +511,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
opt = (void *)msg.tinit.opt + offset;
offset += ntohl(opt->size);
size += ntohl(opt->size);
- if (ntohl(msg.size) < size) {
+ if (ntohl(msg.hdr.size) < size) {
plog("Not enough message for options\n");
ret = -EINVAL;
goto error;
@@ -583,7 +586,7 @@ int tracecmd_msg_metadata_send(int fd, const char *buf, int size)
return -ENOMEM;
msg.meta.size = htonl(MSG_META_MAX_LEN);
- msg.size = htonl(MIN_META_SIZE + MSG_META_MAX_LEN);
+ msg.hdr.size = htonl(MIN_META_SIZE + MSG_META_MAX_LEN);
n = size;
do {
@@ -592,7 +595,7 @@ int tracecmd_msg_metadata_send(int fd, const char *buf, int size)
n -= MSG_META_MAX_LEN;
count += MSG_META_MAX_LEN;
} else {
- msg.size = htonl(MIN_META_SIZE + n);
+ msg.hdr.size = htonl(MIN_META_SIZE + n);
msg.meta.size = htonl(n);
memcpy(msg.meta.buf, buf+count, n);
n = 0;
@@ -641,7 +644,7 @@ int tracecmd_msg_collect_metadata(int ifd, int ofd)
return ret;
}
- cmd = ntohl(msg.cmd);
+ cmd = ntohl(msg.hdr.cmd);
if (cmd == MSG_FINMETA) {
/* Finish receiving meta data */
break;
@@ -672,12 +675,12 @@ int tracecmd_msg_collect_metadata(int ifd, int ofd)
return ret;
}
- cmd = ntohl(msg.cmd);
+ cmd = ntohl(msg.hdr.cmd);
if (cmd == MSG_CLOSE)
/* Finish this connection */
break;
else {
- warning("Not accept the message %d", ntohl(msg.cmd));
+ warning("Not accept the message %d", ntohl(msg.hdr.cmd));
ret = -EINVAL;
goto error;
}
--
2.13.2
next prev parent reply other threads:[~2018-01-03 17:53 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-03 17:52 [PATCH 00/38] trace-cmd: Simplify the msg handling Steven Rostedt
2018-01-03 17:52 ` [PATCH 01/38] trace-cmd recorder: Check if pipe_size was modified by fcntl(F_GETPIPE_SZ) Steven Rostedt
2018-01-03 17:52 ` [PATCH 02/38] pevent: Simplify pointer print logic and fix %pF Steven Rostedt
2018-01-03 17:52 ` [PATCH 03/38] pevent: Handle new pointer processing of bprint strings Steven Rostedt
2018-01-03 17:52 ` [PATCH 04/38] trace-cmd record: Fix clearing out the ctx->instance when used in for_all_instances() Steven Rostedt
2018-01-03 17:52 ` [PATCH 05/38] trace-cmd: Remove the creating of msg out of tracecmd_msg_send() Steven Rostedt
2018-01-03 17:52 ` [PATCH 06/38] trace-cmd: Move tracecmd_msg_send_and_wait_for_msg() into its only user Steven Rostedt
2018-01-03 17:52 ` [PATCH 07/38] trace-cmd: Turn tracecmd_msg data into an anonymous union Steven Rostedt
2018-01-03 17:52 ` [PATCH 08/38] trace-cmd: Remove unused structure tracecmd_msg_error Steven Rostedt
2018-01-03 17:52 ` Steven Rostedt [this message]
2018-01-03 17:52 ` [PATCH 10/38] trace-cmd: Move the tracecmd_msg pointers into their own union Steven Rostedt
2018-01-03 17:52 ` [PATCH 11/38] trace-cmd: Just use the buf field for sending pointers Steven Rostedt
2018-01-03 17:52 ` [PATCH 12/38] trace-cmd: Use an array to map msg types and min sizes Steven Rostedt
2018-01-03 17:52 ` [PATCH 13/38] trace-cmd: Merge msg_do_write_check() into msg_write() Steven Rostedt
2018-01-03 17:52 ` [PATCH 14/38] trace-cmd: Simplify msg_free() by using min sizes Steven Rostedt
2018-01-03 17:52 ` [PATCH 15/38] trace-cmd: Add tracecmd_msg_init() helper function Steven Rostedt
2018-01-03 17:52 ` [PATCH 16/38] trace-cmd: Remove mulitplexer tracecmd_msg_create() Steven Rostedt
2018-01-03 17:52 ` [PATCH 17/38] trace-cmd: Simplify msg_read_extra() Steven Rostedt
2018-01-03 17:52 ` [PATCH 18/38] trace-cmd: Have msg_free() zero out msg contents Steven Rostedt
2018-01-03 17:52 ` [PATCH 19/38] trace-cmd: Verify RINIT was received after TINIT msg sent Steven Rostedt
2018-01-03 17:52 ` [PATCH 20/38] trace-cmd: Make send_metadata a flag in the output handle Steven Rostedt
2018-01-03 17:52 ` [PATCH 21/38] trace-cmd: Pass cpu count and port array to make_rinit() Steven Rostedt
2018-01-03 17:52 ` [PATCH 22/38] trace-cmd: Pass cpu_count instead of having it as a global Steven Rostedt
2018-01-03 17:52 ` [PATCH 23/38] trace-cmd: Pass in client_ports instead of using a global variable Steven Rostedt
2018-01-03 17:52 ` [PATCH 24/38] trace-cmd msg: Add debug prints of messages sent and received Steven Rostedt
2018-01-03 17:52 ` [PATCH 25/38] trace-cmd msg: Move the saved closing fd to the caller Steven Rostedt
2018-01-03 17:52 ` [PATCH 26/38] trace-cmd listen: Add better output on error of connections Steven Rostedt
2018-01-03 17:52 ` [PATCH 27/38] trace-cmd msg: Create a msg_handle to pass around for saved state Steven Rostedt
2018-01-03 17:52 ` [PATCH 28/38] trace-cmd msg: Add server structure of msg_handler Steven Rostedt
2018-01-03 20:31 ` [PATCH 28/38 v2] " Steven Rostedt
2018-01-03 17:52 ` [PATCH 29/38] trace-cmd: Remove global use_tcp variable Steven Rostedt
2018-01-03 17:52 ` [PATCH 30/38] trace-cmd: Move protocol version into msg_handler Steven Rostedt
2018-01-03 17:52 ` [PATCH 31/38] tracecmd: Clean up handling of cpu_count Steven Rostedt
2018-01-03 17:52 ` [PATCH 32/38] tracecmd listen: Have pagesize passed as return not parameter Steven Rostedt
2018-01-03 17:52 ` [PATCH 33/38] trace-cmd: Have cpu_count reside in instances and not be global Steven Rostedt
2018-01-03 17:52 ` [PATCH 34/38] trace-cmd: Add option CPUCOUNT to buffer instance options Steven Rostedt
2018-01-03 17:52 ` [PATCH 35/38] trace-cmd: Have msg_handle part of the buffer instance Steven Rostedt
2018-01-03 17:52 ` [PATCH 36/38] trace-cmd record: Allow instances to be recorded over the network Steven Rostedt
2018-01-03 17:52 ` [PATCH 37/38] trace-cmd: Have keep and profile be flags of buffer instance Steven Rostedt
2018-01-03 17:52 ` [PATCH 38/38] trace-cmd: Add network handle into " Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180103175336.060949341@goodmis.org \
--to=rostedt@goodmis.org \
--cc=linux-trace-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).