Merge tag 'soc-defconfig-6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git] / drivers / tty / ehv_bytechan.c
index a067628..69508d7 100644 (file)
@@ -49,7 +49,7 @@ struct ehv_bc_data {
        unsigned int tx_irq;
 
        spinlock_t lock;        /* lock for transmit buffer */
-       unsigned char buf[BUF_SIZE];    /* transmit circular buffer */
+       u8 buf[BUF_SIZE];       /* transmit circular buffer */
        unsigned int head;      /* circular buffer head */
        unsigned int tail;      /* circular buffer tail */
 
@@ -138,14 +138,17 @@ static int find_console_handle(void)
 
 static unsigned int local_ev_byte_channel_send(unsigned int handle,
                                               unsigned int *count,
-                                              const char *p)
+                                              const u8 *p)
 {
-       char buffer[EV_BYTE_CHANNEL_MAX_BYTES];
+       u8 buffer[EV_BYTE_CHANNEL_MAX_BYTES];
        unsigned int c = *count;
 
+       /*
+        * ev_byte_channel_send() expects at least EV_BYTE_CHANNEL_MAX_BYTES
+        * (16 B) in the buffer. Fake it using a local buffer if needed.
+        */
        if (c < sizeof(buffer)) {
-               memcpy(buffer, p, c);
-               memset(&buffer[c], 0, sizeof(buffer) - c);
+               memcpy_and_pad(buffer, sizeof(buffer), p, c, 0);
                p = buffer;
        }
        return ev_byte_channel_send(handle, count, p);
@@ -163,7 +166,7 @@ static unsigned int local_ev_byte_channel_send(unsigned int handle,
  * has been sent, or if some error has occurred.
  *
  */
-static void byte_channel_spin_send(const char data)
+static void byte_channel_spin_send(const u8 data)
 {
        int ret, count;
 
@@ -471,8 +474,7 @@ static ssize_t ehv_bc_tty_write(struct tty_struct *ttys, const u8 *s,
 {
        struct ehv_bc_data *bc = ttys->driver_data;
        unsigned long flags;
-       unsigned int len;
-       unsigned int written = 0;
+       size_t len, written = 0;
 
        while (1) {
                spin_lock_irqsave(&bc->lock, flags);