aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-12-02 18:36:21 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2010-12-02 18:50:36 -0500
commitb9e68670cc3a13166b389ce847af19b0d0d33c67 (patch)
treebb79d91266490fa5bfe77cfef53ead8a1f7a62f6 /drivers/char
parent60de2ba51eaba9eefcc355cb20c8582b1481e755 (diff)
parent5bddd17fec58f253cddd0bc9eab2cd9eb1bbab4a (diff)
Merge branch 'drm-intel-fixes' into drm-intel-next
Conflicts: drivers/gpu/drm/i915/intel_drv.h
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/tpm/tpm_tis.c24
-rw-r--r--drivers/char/virtio_console.c37
2 files changed, 33 insertions, 28 deletions
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 1030f8420137..c17a305ecb28 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -25,6 +25,7 @@
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/wait.h> 27#include <linux/wait.h>
28#include <linux/acpi.h>
28#include "tpm.h" 29#include "tpm.h"
29 30
30#define TPM_HEADER_SIZE 10 31#define TPM_HEADER_SIZE 10
@@ -78,6 +79,26 @@ enum tis_defaults {
78static LIST_HEAD(tis_chips); 79static LIST_HEAD(tis_chips);
79static DEFINE_SPINLOCK(tis_lock); 80static DEFINE_SPINLOCK(tis_lock);
80 81
82#ifdef CONFIG_ACPI
83static int is_itpm(struct pnp_dev *dev)
84{
85 struct acpi_device *acpi = pnp_acpi_device(dev);
86 struct acpi_hardware_id *id;
87
88 list_for_each_entry(id, &acpi->pnp.ids, list) {
89 if (!strcmp("INTC0102", id->id))
90 return 1;
91 }
92
93 return 0;
94}
95#else
96static int is_itpm(struct pnp_dev *dev)
97{
98 return 0;
99}
100#endif
101
81static int check_locality(struct tpm_chip *chip, int l) 102static int check_locality(struct tpm_chip *chip, int l)
82{ 103{
83 if ((ioread8(chip->vendor.iobase + TPM_ACCESS(l)) & 104 if ((ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
@@ -472,6 +493,9 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
472 "1.2 TPM (device-id 0x%X, rev-id %d)\n", 493 "1.2 TPM (device-id 0x%X, rev-id %d)\n",
473 vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0))); 494 vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
474 495
496 if (is_itpm(to_pnp_dev(dev)))
497 itpm = 1;
498
475 if (itpm) 499 if (itpm)
476 dev_info(dev, "Intel iTPM workaround enabled\n"); 500 dev_info(dev, "Intel iTPM workaround enabled\n");
477 501
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 6c1b676643a9..896a2ced1d27 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1547,31 +1547,16 @@ static int init_vqs(struct ports_device *portdev)
1547 nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2; 1547 nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2;
1548 1548
1549 vqs = kmalloc(nr_queues * sizeof(struct virtqueue *), GFP_KERNEL); 1549 vqs = kmalloc(nr_queues * sizeof(struct virtqueue *), GFP_KERNEL);
1550 if (!vqs) {
1551 err = -ENOMEM;
1552 goto fail;
1553 }
1554 io_callbacks = kmalloc(nr_queues * sizeof(vq_callback_t *), GFP_KERNEL); 1550 io_callbacks = kmalloc(nr_queues * sizeof(vq_callback_t *), GFP_KERNEL);
1555 if (!io_callbacks) {
1556 err = -ENOMEM;
1557 goto free_vqs;
1558 }
1559 io_names = kmalloc(nr_queues * sizeof(char *), GFP_KERNEL); 1551 io_names = kmalloc(nr_queues * sizeof(char *), GFP_KERNEL);
1560 if (!io_names) {
1561 err = -ENOMEM;
1562 goto free_callbacks;
1563 }
1564 portdev->in_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *), 1552 portdev->in_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *),
1565 GFP_KERNEL); 1553 GFP_KERNEL);
1566 if (!portdev->in_vqs) {
1567 err = -ENOMEM;
1568 goto free_names;
1569 }
1570 portdev->out_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *), 1554 portdev->out_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *),
1571 GFP_KERNEL); 1555 GFP_KERNEL);
1572 if (!portdev->out_vqs) { 1556 if (!vqs || !io_callbacks || !io_names || !portdev->in_vqs ||
1557 !portdev->out_vqs) {
1573 err = -ENOMEM; 1558 err = -ENOMEM;
1574 goto free_invqs; 1559 goto free;
1575 } 1560 }
1576 1561
1577 /* 1562 /*
@@ -1605,7 +1590,7 @@ static int init_vqs(struct ports_device *portdev)
1605 io_callbacks, 1590 io_callbacks,
1606 (const char **)io_names); 1591 (const char **)io_names);
1607 if (err) 1592 if (err)
1608 goto free_outvqs; 1593 goto free;
1609 1594
1610 j = 0; 1595 j = 0;
1611 portdev->in_vqs[0] = vqs[0]; 1596 portdev->in_vqs[0] = vqs[0];
@@ -1621,23 +1606,19 @@ static int init_vqs(struct ports_device *portdev)
1621 portdev->out_vqs[i] = vqs[j + 1]; 1606 portdev->out_vqs[i] = vqs[j + 1];
1622 } 1607 }
1623 } 1608 }
1624 kfree(io_callbacks);
1625 kfree(io_names); 1609 kfree(io_names);
1610 kfree(io_callbacks);
1626 kfree(vqs); 1611 kfree(vqs);
1627 1612
1628 return 0; 1613 return 0;
1629 1614
1630free_names: 1615free:
1631 kfree(io_names);
1632free_callbacks:
1633 kfree(io_callbacks);
1634free_outvqs:
1635 kfree(portdev->out_vqs); 1616 kfree(portdev->out_vqs);
1636free_invqs:
1637 kfree(portdev->in_vqs); 1617 kfree(portdev->in_vqs);
1638free_vqs: 1618 kfree(io_names);
1619 kfree(io_callbacks);
1639 kfree(vqs); 1620 kfree(vqs);
1640fail: 1621
1641 return err; 1622 return err;
1642} 1623}
1643 1624