diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2006-10-11 12:45:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-11 14:17:07 -0400 |
commit | f061c5847bcc72eebf6a783f458d42092eac1b6a (patch) | |
tree | de423a183d943c2472fcd489338014e09760a25d /drivers | |
parent | cff52daffa080eff6353f44df418b080dacefb96 (diff) |
[PATCH] i2Output always takes kernel data now
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/ip2/i2lib.c | 11 | ||||
-rw-r--r-- | drivers/char/ip2/i2lib.h | 2 | ||||
-rw-r--r-- | drivers/char/ip2/ip2main.c | 4 |
3 files changed, 6 insertions, 11 deletions
diff --git a/drivers/char/ip2/i2lib.c b/drivers/char/ip2/i2lib.c index fc944d375be7..54d93f0345e8 100644 --- a/drivers/char/ip2/i2lib.c +++ b/drivers/char/ip2/i2lib.c | |||
@@ -1007,7 +1007,7 @@ i2InputAvailable(i2ChanStrPtr pCh) | |||
1007 | // applications that one cannot break out of. | 1007 | // applications that one cannot break out of. |
1008 | //****************************************************************************** | 1008 | //****************************************************************************** |
1009 | static int | 1009 | static int |
1010 | i2Output(i2ChanStrPtr pCh, const char *pSource, int count, int user ) | 1010 | i2Output(i2ChanStrPtr pCh, const char *pSource, int count) |
1011 | { | 1011 | { |
1012 | i2eBordStrPtr pB; | 1012 | i2eBordStrPtr pB; |
1013 | unsigned char *pInsert; | 1013 | unsigned char *pInsert; |
@@ -1020,7 +1020,7 @@ i2Output(i2ChanStrPtr pCh, const char *pSource, int count, int user ) | |||
1020 | 1020 | ||
1021 | int bailout = 10; | 1021 | int bailout = 10; |
1022 | 1022 | ||
1023 | ip2trace (CHANN, ITRC_OUTPUT, ITRC_ENTER, 2, count, user ); | 1023 | ip2trace (CHANN, ITRC_OUTPUT, ITRC_ENTER, 2, count, 0 ); |
1024 | 1024 | ||
1025 | // Ensure channel structure seems real | 1025 | // Ensure channel structure seems real |
1026 | if ( !i2Validate ( pCh ) ) | 1026 | if ( !i2Validate ( pCh ) ) |
@@ -1087,12 +1087,7 @@ i2Output(i2ChanStrPtr pCh, const char *pSource, int count, int user ) | |||
1087 | DATA_COUNT_OF(pInsert) = amountToMove; | 1087 | DATA_COUNT_OF(pInsert) = amountToMove; |
1088 | 1088 | ||
1089 | // Move the data | 1089 | // Move the data |
1090 | if ( user ) { | 1090 | memcpy( (char*)(DATA_OF(pInsert)), pSource, amountToMove ); |
1091 | rc = copy_from_user((char*)(DATA_OF(pInsert)), pSource, | ||
1092 | amountToMove ); | ||
1093 | } else { | ||
1094 | memcpy( (char*)(DATA_OF(pInsert)), pSource, amountToMove ); | ||
1095 | } | ||
1096 | // Adjust pointers and indices | 1091 | // Adjust pointers and indices |
1097 | pSource += amountToMove; | 1092 | pSource += amountToMove; |
1098 | pCh->Obuf_char_count += amountToMove; | 1093 | pCh->Obuf_char_count += amountToMove; |
diff --git a/drivers/char/ip2/i2lib.h b/drivers/char/ip2/i2lib.h index 952e113ccd8a..e559e9bac06d 100644 --- a/drivers/char/ip2/i2lib.h +++ b/drivers/char/ip2/i2lib.h | |||
@@ -332,7 +332,7 @@ static int i2QueueCommands(int, i2ChanStrPtr, int, int, cmdSyntaxPtr,...); | |||
332 | static int i2GetStatus(i2ChanStrPtr, int); | 332 | static int i2GetStatus(i2ChanStrPtr, int); |
333 | static int i2Input(i2ChanStrPtr); | 333 | static int i2Input(i2ChanStrPtr); |
334 | static int i2InputFlush(i2ChanStrPtr); | 334 | static int i2InputFlush(i2ChanStrPtr); |
335 | static int i2Output(i2ChanStrPtr, const char *, int, int); | 335 | static int i2Output(i2ChanStrPtr, const char *, int); |
336 | static int i2OutputFree(i2ChanStrPtr); | 336 | static int i2OutputFree(i2ChanStrPtr); |
337 | static int i2ServiceBoard(i2eBordStrPtr); | 337 | static int i2ServiceBoard(i2eBordStrPtr); |
338 | static void i2DrainOutput(i2ChanStrPtr, int); | 338 | static void i2DrainOutput(i2ChanStrPtr, int); |
diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c index 858ba5432c99..a3f32d46d2f8 100644 --- a/drivers/char/ip2/ip2main.c +++ b/drivers/char/ip2/ip2main.c | |||
@@ -1704,7 +1704,7 @@ ip2_write( PTTY tty, const unsigned char *pData, int count) | |||
1704 | 1704 | ||
1705 | /* This is the actual move bit. Make sure it does what we need!!!!! */ | 1705 | /* This is the actual move bit. Make sure it does what we need!!!!! */ |
1706 | WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags); | 1706 | WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags); |
1707 | bytesSent = i2Output( pCh, pData, count, 0 ); | 1707 | bytesSent = i2Output( pCh, pData, count); |
1708 | WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); | 1708 | WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); |
1709 | 1709 | ||
1710 | ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent ); | 1710 | ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent ); |
@@ -1764,7 +1764,7 @@ ip2_flush_chars( PTTY tty ) | |||
1764 | // | 1764 | // |
1765 | // We may need to restart i2Output if it does not fullfill this request | 1765 | // We may need to restart i2Output if it does not fullfill this request |
1766 | // | 1766 | // |
1767 | strip = i2Output( pCh, pCh->Pbuf, pCh->Pbuf_stuff, 0 ); | 1767 | strip = i2Output( pCh, pCh->Pbuf, pCh->Pbuf_stuff); |
1768 | if ( strip != pCh->Pbuf_stuff ) { | 1768 | if ( strip != pCh->Pbuf_stuff ) { |
1769 | memmove( pCh->Pbuf, &pCh->Pbuf[strip], pCh->Pbuf_stuff - strip ); | 1769 | memmove( pCh->Pbuf, &pCh->Pbuf[strip], pCh->Pbuf_stuff - strip ); |
1770 | } | 1770 | } |