diff mbox

[U-Boot,v2] netconsole: support packets longer than 512 bytes

Message ID 1318026470-21476-1-git-send-email-michael@walle.cc
State Accepted
Commit 1a9845b4f00a2930b2c06dabd6cf9bee4ca1437c
Headers show

Commit Message

Michael Walle Oct. 7, 2011, 10:27 p.m. UTC
Esp. while printing the environment the output is usually longer than 512
bytes. Instead of cutting the message, send multiple 512 bytes packets.

Signed-off-by: Michael Walle <michael@walle.cc>
---
 drivers/net/netconsole.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

Comments

Mike Frysinger Oct. 7, 2011, 10:53 p.m. UTC | #1
On Friday 07 October 2011 18:27:50 Michael Walle wrote:
> Esp. while printing the environment the output is usually longer than 512
> bytes. Instead of cutting the message, send multiple 512 bytes packets.

sorry, i probably should have looked closer earlier.  this isn't really your 
fault, but i'm guessing this 512 limit is due to the size of the static 
input_buffer ?  if so, let's use sizeof(input_buffer) instead of 512.  or add a 
define at the top like NETCONSOLE_BUFFER_SIZE and use that everywhere.
-mike
Michael Walle Oct. 7, 2011, 11:22 p.m. UTC | #2
Am Samstag 08 Oktober 2011, 00:53:13 schrieb Mike Frysinger:
> On Friday 07 October 2011 18:27:50 Michael Walle wrote:
> > Esp. while printing the environment the output is usually longer than 512
> > bytes. Instead of cutting the message, send multiple 512 bytes packets.
> 
> sorry, i probably should have looked closer earlier.  this isn't really
> your fault, but i'm guessing this 512 limit is due to the size of the
> static input_buffer ?  if so, let's use sizeof(input_buffer) instead of
> 512.  or add a define at the top like NETCONSOLE_BUFFER_SIZE and use that
> everywhere. -mike

i don't think the input buffer has sth to do with the output. of course it 
could be intended, that the input buffer has the same size as the max output 
size. if i didn't miss sth, the output size is only limited by the maximum 
packet size (minus headers) defined by PKTSIZE.

I don't know why the input buffer and max output size has this particular 
size. Well, the input buffer could be some arbitrary number to. not too big to 
save some space :)

The max output size should be PKTSIZE-NetEthHdrSize()-IP_HDR_SIZE.
Mike Frysinger Oct. 8, 2011, 1:08 a.m. UTC | #3
On Friday 07 October 2011 19:22:22 Michael Walle wrote:
> Am Samstag 08 Oktober 2011, 00:53:13 schrieb Mike Frysinger:
> > On Friday 07 October 2011 18:27:50 Michael Walle wrote:
> > > Esp. while printing the environment the output is usually longer than
> > > 512 bytes. Instead of cutting the message, send multiple 512 bytes
> > > packets.
> > 
> > sorry, i probably should have looked closer earlier.  this isn't really
> > your fault, but i'm guessing this 512 limit is due to the size of the
> > static input_buffer ?  if so, let's use sizeof(input_buffer) instead of
> > 512.  or add a define at the top like NETCONSOLE_BUFFER_SIZE and use that
> > everywhere.
> 
> i don't think the input buffer has sth to do with the output. of course it
> could be intended, that the input buffer has the same size as the max
> output size. if i didn't miss sth, the output size is only limited by the
> maximum packet size (minus headers) defined by PKTSIZE.
> 
> I don't know why the input buffer and max output size has this particular
> size. Well, the input buffer could be some arbitrary number to. not too big
> to save some space :)
> 
> The max output size should be PKTSIZE-NetEthHdrSize()-IP_HDR_SIZE.

yeah, i think you're right.  best to keep the 512 for now until someone gets 
up the courage to look it over.

Acked-by: Mike Frysinger <vapier@gentoo.org>
-mike
diff mbox

Patch

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index e40efb8..56ba64f 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -189,10 +189,13 @@  static void nc_puts(const char *s)
 		return;
 	output_recursion = 1;
 
-	if ((len = strlen (s)) > 512)
-		len = 512;
-
-	nc_send_packet (s, len);
+	len = strlen(s);
+	while (len) {
+		int send_len = min(len, 512);
+		nc_send_packet(s, send_len);
+		len -= send_len;
+		s += send_len;
+	}
 
 	output_recursion = 0;
 }