mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-26 06:33:19 -04:00
Merge 4.0-rc5 into char-misc-next
We want those fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
ff85f707ac
527 changed files with 5533 additions and 3842 deletions
|
|
@ -140,16 +140,6 @@ static int tpm_dev_add_device(struct tpm_chip *chip)
|
|||
{
|
||||
int rc;
|
||||
|
||||
rc = device_add(&chip->dev);
|
||||
if (rc) {
|
||||
dev_err(&chip->dev,
|
||||
"unable to device_register() %s, major %d, minor %d, err=%d\n",
|
||||
chip->devname, MAJOR(chip->dev.devt),
|
||||
MINOR(chip->dev.devt), rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = cdev_add(&chip->cdev, chip->dev.devt, 1);
|
||||
if (rc) {
|
||||
dev_err(&chip->dev,
|
||||
|
|
@ -161,6 +151,16 @@ static int tpm_dev_add_device(struct tpm_chip *chip)
|
|||
return rc;
|
||||
}
|
||||
|
||||
rc = device_add(&chip->dev);
|
||||
if (rc) {
|
||||
dev_err(&chip->dev,
|
||||
"unable to device_register() %s, major %d, minor %d, err=%d\n",
|
||||
chip->devname, MAJOR(chip->dev.devt),
|
||||
MINOR(chip->dev.devt), rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -174,27 +174,17 @@ static void tpm_dev_del_device(struct tpm_chip *chip)
|
|||
* tpm_chip_register() - create a character device for the TPM chip
|
||||
* @chip: TPM chip to use.
|
||||
*
|
||||
* Creates a character device for the TPM chip and adds sysfs interfaces for
|
||||
* the device, PPI and TCPA. As the last step this function adds the
|
||||
* chip to the list of TPM chips available for use.
|
||||
* Creates a character device for the TPM chip and adds sysfs attributes for
|
||||
* the device. As the last step this function adds the chip to the list of TPM
|
||||
* chips available for in-kernel use.
|
||||
*
|
||||
* NOTE: This function should be only called after the chip initialization
|
||||
* is complete.
|
||||
*
|
||||
* Called from tpm_<specific>.c probe function only for devices
|
||||
* the driver has determined it should claim. Prior to calling
|
||||
* this function the specific probe function has called pci_enable_device
|
||||
* upon errant exit from this function specific probe function should call
|
||||
* pci_disable_device
|
||||
* This function should be only called after the chip initialization is
|
||||
* complete.
|
||||
*/
|
||||
int tpm_chip_register(struct tpm_chip *chip)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = tpm_dev_add_device(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Populate sysfs for TPM1 devices. */
|
||||
if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
|
||||
rc = tpm_sysfs_add_device(chip);
|
||||
|
|
@ -208,6 +198,10 @@ int tpm_chip_register(struct tpm_chip *chip)
|
|||
chip->bios_dir = tpm_bios_log_setup(chip->devname);
|
||||
}
|
||||
|
||||
rc = tpm_dev_add_device(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Make the chip available. */
|
||||
spin_lock(&driver_lock);
|
||||
list_add_rcu(&chip->list, &tpm_chip_list);
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
{
|
||||
struct ibmvtpm_dev *ibmvtpm;
|
||||
struct ibmvtpm_crq crq;
|
||||
u64 *word = (u64 *) &crq;
|
||||
__be64 *word = (__be64 *)&crq;
|
||||
int rc;
|
||||
|
||||
ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
|
||||
|
|
@ -145,11 +145,11 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
memcpy((void *)ibmvtpm->rtce_buf, (void *)buf, count);
|
||||
crq.valid = (u8)IBMVTPM_VALID_CMD;
|
||||
crq.msg = (u8)VTPM_TPM_COMMAND;
|
||||
crq.len = (u16)count;
|
||||
crq.data = ibmvtpm->rtce_dma_handle;
|
||||
crq.len = cpu_to_be16(count);
|
||||
crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);
|
||||
|
||||
rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]),
|
||||
cpu_to_be64(word[1]));
|
||||
rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),
|
||||
be64_to_cpu(word[1]));
|
||||
if (rc != H_SUCCESS) {
|
||||
dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc);
|
||||
rc = 0;
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@
|
|||
struct ibmvtpm_crq {
|
||||
u8 valid;
|
||||
u8 msg;
|
||||
u16 len;
|
||||
u32 data;
|
||||
u64 reserved;
|
||||
__be16 len;
|
||||
__be32 data;
|
||||
__be64 reserved;
|
||||
} __attribute__((packed, aligned(8)));
|
||||
|
||||
struct ibmvtpm_crq_queue {
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ struct ports_device {
|
|||
* notification
|
||||
*/
|
||||
struct work_struct control_work;
|
||||
struct work_struct config_work;
|
||||
|
||||
struct list_head ports;
|
||||
|
||||
|
|
@ -1837,10 +1838,21 @@ static void config_intr(struct virtio_device *vdev)
|
|||
|
||||
portdev = vdev->priv;
|
||||
|
||||
if (!use_multiport(portdev))
|
||||
schedule_work(&portdev->config_work);
|
||||
}
|
||||
|
||||
static void config_work_handler(struct work_struct *work)
|
||||
{
|
||||
struct ports_device *portdev;
|
||||
|
||||
portdev = container_of(work, struct ports_device, control_work);
|
||||
if (!use_multiport(portdev)) {
|
||||
struct virtio_device *vdev;
|
||||
struct port *port;
|
||||
u16 rows, cols;
|
||||
|
||||
vdev = portdev->vdev;
|
||||
virtio_cread(vdev, struct virtio_console_config, cols, &cols);
|
||||
virtio_cread(vdev, struct virtio_console_config, rows, &rows);
|
||||
|
||||
|
|
@ -2040,12 +2052,14 @@ static int virtcons_probe(struct virtio_device *vdev)
|
|||
|
||||
virtio_device_ready(portdev->vdev);
|
||||
|
||||
INIT_WORK(&portdev->config_work, &config_work_handler);
|
||||
INIT_WORK(&portdev->control_work, &control_work_handler);
|
||||
|
||||
if (multiport) {
|
||||
unsigned int nr_added_bufs;
|
||||
|
||||
spin_lock_init(&portdev->c_ivq_lock);
|
||||
spin_lock_init(&portdev->c_ovq_lock);
|
||||
INIT_WORK(&portdev->control_work, &control_work_handler);
|
||||
|
||||
nr_added_bufs = fill_queue(portdev->c_ivq,
|
||||
&portdev->c_ivq_lock);
|
||||
|
|
@ -2113,6 +2127,8 @@ static void virtcons_remove(struct virtio_device *vdev)
|
|||
/* Finish up work that's lined up */
|
||||
if (use_multiport(portdev))
|
||||
cancel_work_sync(&portdev->control_work);
|
||||
else
|
||||
cancel_work_sync(&portdev->config_work);
|
||||
|
||||
list_for_each_entry_safe(port, port2, &portdev->ports, list)
|
||||
unplug_port(port);
|
||||
|
|
@ -2164,6 +2180,7 @@ static int virtcons_freeze(struct virtio_device *vdev)
|
|||
|
||||
virtqueue_disable_cb(portdev->c_ivq);
|
||||
cancel_work_sync(&portdev->control_work);
|
||||
cancel_work_sync(&portdev->config_work);
|
||||
/*
|
||||
* Once more: if control_work_handler() was running, it would
|
||||
* enable the cb as the last step.
|
||||
|
|
|
|||
Loading…
Reference in a new issue