Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a513b1ef authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge 4.19.217 into android-4.19-stable



Changes in 4.19.217
	Revert "x86/kvm: fix vcpu-id indexed array sizes"
	usb: ehci: handshake CMD_RUN instead of STS_HALT
	usb: gadget: Mark USB_FSL_QE broken on 64-bit
	usb: musb: Balance list entry in musb_gadget_queue
	usb-storage: Add compatibility quirk flags for iODD 2531/2541
	printk/console: Allow to disable console output by using console="" or console=null
	isofs: Fix out of bound access for corrupted isofs image
	comedi: dt9812: fix DMA buffers on stack
	comedi: ni_usb6501: fix NULL-deref in command paths
	comedi: vmk80xx: fix transfer-buffer overflows
	comedi: vmk80xx: fix bulk-buffer overflow
	comedi: vmk80xx: fix bulk and interrupt message timeouts
	staging: r8712u: fix control-message timeout
	staging: rtl8192u: fix control-message timeouts
	rsi: fix control-message timeout
	Linux 4.19.217

Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
Change-Id: Id429ece519f3fdcaeeff0811c39660490c583231
parents 45c480b5 fd825030
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 19
SUBLEVEL = 216
SUBLEVEL = 217
EXTRAVERSION =
NAME = "People's Front"

+1 −1
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
{
	ioapic->rtc_status.pending_eoi = 0;
	bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
	bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID);
}

static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
+2 −2
Original line number Diff line number Diff line
@@ -43,13 +43,13 @@ struct kvm_vcpu;

struct dest_map {
	/* vcpu bitmap where IRQ has been sent */
	DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
	DECLARE_BITMAP(map, KVM_MAX_VCPU_ID);

	/*
	 * Vector sent to a given vcpu, only valid when
	 * the vcpu's bit in map is set
	 */
	u8 vectors[KVM_MAX_VCPU_ID + 1];
	u8 vectors[KVM_MAX_VCPU_ID];
};


+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static int rsi_usb_card_write(struct rsi_hw *adapter,
			      (void *)seg,
			      (int)len,
			      &transfer,
			      HZ * 5);
			      USB_CTRL_SET_TIMEOUT);

	if (status < 0) {
		rsi_dbg(ERR_ZONE,
+86 −29
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/uaccess.h>

#include "../comedi_usb.h"
@@ -237,22 +238,42 @@ static int dt9812_read_info(struct comedi_device *dev,
{
	struct usb_device *usb = comedi_to_usb_dev(dev);
	struct dt9812_private *devpriv = dev->private;
	struct dt9812_usb_cmd cmd;
	struct dt9812_usb_cmd *cmd;
	size_t tbuf_size;
	int count, ret;
	void *tbuf;

	cmd.cmd = cpu_to_le32(DT9812_R_FLASH_DATA);
	cmd.u.flash_data_info.address =
	tbuf_size = max(sizeof(*cmd), buf_size);

	tbuf = kzalloc(tbuf_size, GFP_KERNEL);
	if (!tbuf)
		return -ENOMEM;

	cmd = tbuf;

	cmd->cmd = cpu_to_le32(DT9812_R_FLASH_DATA);
	cmd->u.flash_data_info.address =
	    cpu_to_le16(DT9812_DIAGS_BOARD_INFO_ADDR + offset);
	cmd.u.flash_data_info.numbytes = cpu_to_le16(buf_size);
	cmd->u.flash_data_info.numbytes = cpu_to_le16(buf_size);

	/* DT9812 only responds to 32 byte writes!! */
	ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			   &cmd, 32, &count, DT9812_USB_TIMEOUT);
			   cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
	if (ret)
		return ret;
		goto out;

	ret = usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
			   tbuf, buf_size, &count, DT9812_USB_TIMEOUT);
	if (!ret) {
		if (count == buf_size)
			memcpy(buf, tbuf, buf_size);
		else
			ret = -EREMOTEIO;
	}
out:
	kfree(tbuf);

	return usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
			    buf, buf_size, &count, DT9812_USB_TIMEOUT);
	return ret;
}

static int dt9812_read_multiple_registers(struct comedi_device *dev,
@@ -261,22 +282,42 @@ static int dt9812_read_multiple_registers(struct comedi_device *dev,
{
	struct usb_device *usb = comedi_to_usb_dev(dev);
	struct dt9812_private *devpriv = dev->private;
	struct dt9812_usb_cmd cmd;
	struct dt9812_usb_cmd *cmd;
	int i, count, ret;
	size_t buf_size;
	void *buf;

	buf_size = max_t(size_t, sizeof(*cmd), reg_count);

	buf = kzalloc(buf_size, GFP_KERNEL);
	if (!buf)
		return -ENOMEM;

	cmd.cmd = cpu_to_le32(DT9812_R_MULTI_BYTE_REG);
	cmd.u.read_multi_info.count = reg_count;
	cmd = buf;

	cmd->cmd = cpu_to_le32(DT9812_R_MULTI_BYTE_REG);
	cmd->u.read_multi_info.count = reg_count;
	for (i = 0; i < reg_count; i++)
		cmd.u.read_multi_info.address[i] = address[i];
		cmd->u.read_multi_info.address[i] = address[i];

	/* DT9812 only responds to 32 byte writes!! */
	ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			   &cmd, 32, &count, DT9812_USB_TIMEOUT);
			   cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
	if (ret)
		return ret;
		goto out;

	ret = usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
			   buf, reg_count, &count, DT9812_USB_TIMEOUT);
	if (!ret) {
		if (count == reg_count)
			memcpy(value, buf, reg_count);
		else
			ret = -EREMOTEIO;
	}
out:
	kfree(buf);

	return usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
			    value, reg_count, &count, DT9812_USB_TIMEOUT);
	return ret;
}

static int dt9812_write_multiple_registers(struct comedi_device *dev,
@@ -285,19 +326,27 @@ static int dt9812_write_multiple_registers(struct comedi_device *dev,
{
	struct usb_device *usb = comedi_to_usb_dev(dev);
	struct dt9812_private *devpriv = dev->private;
	struct dt9812_usb_cmd cmd;
	struct dt9812_usb_cmd *cmd;
	int i, count;
	int ret;

	cmd.cmd = cpu_to_le32(DT9812_W_MULTI_BYTE_REG);
	cmd.u.read_multi_info.count = reg_count;
	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
	if (!cmd)
		return -ENOMEM;

	cmd->cmd = cpu_to_le32(DT9812_W_MULTI_BYTE_REG);
	cmd->u.read_multi_info.count = reg_count;
	for (i = 0; i < reg_count; i++) {
		cmd.u.write_multi_info.write[i].address = address[i];
		cmd.u.write_multi_info.write[i].value = value[i];
		cmd->u.write_multi_info.write[i].address = address[i];
		cmd->u.write_multi_info.write[i].value = value[i];
	}

	/* DT9812 only responds to 32 byte writes!! */
	return usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			    &cmd, 32, &count, DT9812_USB_TIMEOUT);
	ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			   cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
	kfree(cmd);

	return ret;
}

static int dt9812_rmw_multiple_registers(struct comedi_device *dev,
@@ -306,17 +355,25 @@ static int dt9812_rmw_multiple_registers(struct comedi_device *dev,
{
	struct usb_device *usb = comedi_to_usb_dev(dev);
	struct dt9812_private *devpriv = dev->private;
	struct dt9812_usb_cmd cmd;
	struct dt9812_usb_cmd *cmd;
	int i, count;
	int ret;

	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
	if (!cmd)
		return -ENOMEM;

	cmd.cmd = cpu_to_le32(DT9812_RMW_MULTI_BYTE_REG);
	cmd.u.rmw_multi_info.count = reg_count;
	cmd->cmd = cpu_to_le32(DT9812_RMW_MULTI_BYTE_REG);
	cmd->u.rmw_multi_info.count = reg_count;
	for (i = 0; i < reg_count; i++)
		cmd.u.rmw_multi_info.rmw[i] = rmw[i];
		cmd->u.rmw_multi_info.rmw[i] = rmw[i];

	/* DT9812 only responds to 32 byte writes!! */
	return usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			    &cmd, 32, &count, DT9812_USB_TIMEOUT);
	ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
			   cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
	kfree(cmd);

	return ret;
}

static int dt9812_digital_in(struct comedi_device *dev, u8 *bits)
Loading