diff options
| author | Felipe Balbi <balbi@ti.com> | 2011-03-21 06:25:08 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-04-22 20:31:53 -0400 |
| commit | b1c43f82c5aa265442f82dba31ce985ebb7aa71c (patch) | |
| tree | 8b344d8d5355b30e8deff901180edc708a653227 /drivers/net/hamradio | |
| parent | e9a470f445271eb157ee860a93b062324402fc3a (diff) | |
tty: make receive_buf() return the amout of bytes received
it makes it simpler to keep track of the amount of
bytes received and simplifies how flush_to_ldisc counts
the remaining bytes. It also fixes a bug of lost bytes
on n_tty when flushing too many bytes via the USB
serial gadget driver.
Tested-by: Stefan Bigler <stefan.bigler@keymile.com>
Tested-by: Toby Gray <toby.gray@realvnc.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/net/hamradio')
| -rw-r--r-- | drivers/net/hamradio/6pack.c | 8 | ||||
| -rw-r--r-- | drivers/net/hamradio/mkiss.c | 11 |
2 files changed, 12 insertions, 7 deletions
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c index 3e5d0b6b651..992089639ea 100644 --- a/drivers/net/hamradio/6pack.c +++ b/drivers/net/hamradio/6pack.c | |||
| @@ -456,7 +456,7 @@ out: | |||
| 456 | * a block of 6pack data has been received, which can now be decapsulated | 456 | * a block of 6pack data has been received, which can now be decapsulated |
| 457 | * and sent on to some IP layer for further processing. | 457 | * and sent on to some IP layer for further processing. |
| 458 | */ | 458 | */ |
| 459 | static void sixpack_receive_buf(struct tty_struct *tty, | 459 | static unsigned int sixpack_receive_buf(struct tty_struct *tty, |
| 460 | const unsigned char *cp, char *fp, int count) | 460 | const unsigned char *cp, char *fp, int count) |
| 461 | { | 461 | { |
| 462 | struct sixpack *sp; | 462 | struct sixpack *sp; |
| @@ -464,11 +464,11 @@ static void sixpack_receive_buf(struct tty_struct *tty, | |||
| 464 | int count1; | 464 | int count1; |
| 465 | 465 | ||
| 466 | if (!count) | 466 | if (!count) |
| 467 | return; | 467 | return 0; |
| 468 | 468 | ||
| 469 | sp = sp_get(tty); | 469 | sp = sp_get(tty); |
| 470 | if (!sp) | 470 | if (!sp) |
| 471 | return; | 471 | return -ENODEV; |
| 472 | 472 | ||
| 473 | memcpy(buf, cp, count < sizeof(buf) ? count : sizeof(buf)); | 473 | memcpy(buf, cp, count < sizeof(buf) ? count : sizeof(buf)); |
| 474 | 474 | ||
| @@ -487,6 +487,8 @@ static void sixpack_receive_buf(struct tty_struct *tty, | |||
| 487 | 487 | ||
| 488 | sp_put(sp); | 488 | sp_put(sp); |
| 489 | tty_unthrottle(tty); | 489 | tty_unthrottle(tty); |
| 490 | |||
| 491 | return count1; | ||
| 490 | } | 492 | } |
| 491 | 493 | ||
| 492 | /* | 494 | /* |
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c index 4c628393c8b..0e4f2353114 100644 --- a/drivers/net/hamradio/mkiss.c +++ b/drivers/net/hamradio/mkiss.c | |||
| @@ -923,13 +923,14 @@ static long mkiss_compat_ioctl(struct tty_struct *tty, struct file *file, | |||
| 923 | * a block of data has been received, which can now be decapsulated | 923 | * a block of data has been received, which can now be decapsulated |
| 924 | * and sent on to the AX.25 layer for further processing. | 924 | * and sent on to the AX.25 layer for further processing. |
| 925 | */ | 925 | */ |
| 926 | static void mkiss_receive_buf(struct tty_struct *tty, const unsigned char *cp, | 926 | static unsigned int mkiss_receive_buf(struct tty_struct *tty, |
| 927 | char *fp, int count) | 927 | const unsigned char *cp, char *fp, int count) |
| 928 | { | 928 | { |
| 929 | struct mkiss *ax = mkiss_get(tty); | 929 | struct mkiss *ax = mkiss_get(tty); |
| 930 | int bytes = count; | ||
| 930 | 931 | ||
| 931 | if (!ax) | 932 | if (!ax) |
| 932 | return; | 933 | return -ENODEV; |
| 933 | 934 | ||
| 934 | /* | 935 | /* |
| 935 | * Argh! mtu change time! - costs us the packet part received | 936 | * Argh! mtu change time! - costs us the packet part received |
| @@ -939,7 +940,7 @@ static void mkiss_receive_buf(struct tty_struct *tty, const unsigned char *cp, | |||
| 939 | ax_changedmtu(ax); | 940 | ax_changedmtu(ax); |
| 940 | 941 | ||
| 941 | /* Read the characters out of the buffer */ | 942 | /* Read the characters out of the buffer */ |
| 942 | while (count--) { | 943 | while (bytes--) { |
| 943 | if (fp != NULL && *fp++) { | 944 | if (fp != NULL && *fp++) { |
| 944 | if (!test_and_set_bit(AXF_ERROR, &ax->flags)) | 945 | if (!test_and_set_bit(AXF_ERROR, &ax->flags)) |
| 945 | ax->dev->stats.rx_errors++; | 946 | ax->dev->stats.rx_errors++; |
| @@ -952,6 +953,8 @@ static void mkiss_receive_buf(struct tty_struct *tty, const unsigned char *cp, | |||
| 952 | 953 | ||
| 953 | mkiss_put(ax); | 954 | mkiss_put(ax); |
| 954 | tty_unthrottle(tty); | 955 | tty_unthrottle(tty); |
| 956 | |||
| 957 | return count; | ||
| 955 | } | 958 | } |
| 956 | 959 | ||
| 957 | /* | 960 | /* |
