All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20160819033911.GA4027@arm.com>

diff --git a/a/1.txt b/N1/1.txt
index 3f151c5..2d4e88f 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,225 +1,232 @@
 On Thu, Aug 18, 2016 at 12:14:20PM +0100, Lorenzo Pieralisi wrote:
 > On Thu, Aug 18, 2016 at 06:55:50PM +0800, Dennis Chen wrote:
-> 
+>=20
 > [...]
-> 
+>=20
 > > > +static struct acpi_iort_node *
 > > > +iort_scan_node(enum acpi_iort_node_type type,
-> > > +	       iort_find_node_callback callback, void *context)
+> > > +=09       iort_find_node_callback callback, void *context)
 > > > +{
-> > > +	struct acpi_iort_node *iort_node, *iort_end;
-> > > +	struct acpi_table_iort *iort;
-> > > +	int i;
+> > > +=09struct acpi_iort_node *iort_node, *iort_end;
+> > > +=09struct acpi_table_iort *iort;
+> > > +=09int i;
 > > > +
-> > > +	/* Get the first IORT node */
-> > > +	iort = (struct acpi_table_iort *)iort_table;
+> > > +=09/* Get the first IORT node */
+> > > +=09iort =3D (struct acpi_table_iort *)iort_table;
 > > >
 > > Here, the same as I comments on Lorenzo's patch. If IORT is missed in
 > > the firmware, then iort_table will be NULL, result in kernel panic in
 > > the codes followed.
-> 
+>=20
 > The pointer is checked in the functions that are visible to
 > other compilation units before calling this function:
-> 
+>=20
 > iort_msi_map_rid()
 > iort_get_device_domain()
-> 
+>=20
 > I missed to check it when I added iort_node_match() and
 > iort_iommu_configure() though, which makes me think that it is probably
 > better to move the iort_table pointer check to iort_scan_node() so that
 > it is done in one single place instead of adding it to all given
 > external interfaces.
 >
-Agree to check this in iort_scan_node(). Also, given some duplicate codes between
-iort_scan_node() and iort_smmu_init(), so maybe we can think about to refactor
-iort_match_callback() as the way to implement the function of iort_smmu_int(),
+Agree to check this in iort_scan_node(). Also, given some duplicate codes b=
+etween
+iort_scan_node() and iort_smmu_init(), so maybe we can think about to refac=
+tor
+iort_match_callback() as the way to implement the function of iort_smmu_int=
+(),
 thus we can call iort_node_match(ACPI_IORT_NODE_SMMU_V3)...
 
 Thanks,
 Dennis
-> 
+>=20
 > Lorenzo
-> 
-> > 
+>=20
+> >=20
 > > Thanks,
 > > Dennis
-> > > +	iort_node = ACPI_ADD_PTR(struct acpi_iort_node, iort,
-> > > +				 iort->node_offset);
-> > > +	iort_end = ACPI_ADD_PTR(struct acpi_iort_node, iort_table,
-> > > +				iort_table->length);
-> > > +
-> > > +	for (i = 0; i < iort->node_count; i++) {
-> > > +		if (WARN_TAINT(iort_node >= iort_end, TAINT_FIRMWARE_WORKAROUND,
-> > > +			       "IORT node pointer overflows, bad table!\n"))
-> > > +			return NULL;
-> > > +
-> > > +		if (iort_node->type == type) {
-> > > +			if (ACPI_SUCCESS(callback(iort_node, context)))
-> > > +				return iort_node;
-> > > +		}
-> > > +
-> > > +		iort_node = ACPI_ADD_PTR(struct acpi_iort_node, iort_node,
-> > > +					 iort_node->length);
-> > > +	}
-> > > +
-> > > +	return NULL;
+> > > +=09iort_node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort,
+> > > +=09=09=09=09 iort->node_offset);
+> > > +=09iort_end =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_table,
+> > > +=09=09=09=09iort_table->length);
+> > > +
+> > > +=09for (i =3D 0; i < iort->node_count; i++) {
+> > > +=09=09if (WARN_TAINT(iort_node >=3D iort_end, TAINT_FIRMWARE_WORKARO=
+UND,
+> > > +=09=09=09       "IORT node pointer overflows, bad table!\n"))
+> > > +=09=09=09return NULL;
+> > > +
+> > > +=09=09if (iort_node->type =3D=3D type) {
+> > > +=09=09=09if (ACPI_SUCCESS(callback(iort_node, context)))
+> > > +=09=09=09=09return iort_node;
+> > > +=09=09}
+> > > +
+> > > +=09=09iort_node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_node,
+> > > +=09=09=09=09=09 iort_node->length);
+> > > +=09}
+> > > +
+> > > +=09return NULL;
 > > > +}
 > > > +
 > > > +static acpi_status
 > > > +iort_match_node_callback(struct acpi_iort_node *node, void *context)
 > > > +{
-> > > +	struct device *dev = context;
-> > > +
-> > > +	switch (node->type) {
-> > > +	case ACPI_IORT_NODE_NAMED_COMPONENT: {
-> > > +		struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
-> > > +		struct acpi_device *adev = to_acpi_device_node(dev->fwnode);
-> > > +		struct acpi_iort_named_component *ncomp;
-> > > +
-> > > +		if (!adev)
-> > > +			break;
-> > > +
-> > > +		ncomp = (struct acpi_iort_named_component *)node->node_data;
-> > > +
-> > > +		if (ACPI_FAILURE(acpi_get_name(adev->handle,
-> > > +					       ACPI_FULL_PATHNAME, &buffer))) {
-> > > +			dev_warn(dev, "Can't get device full path name\n");
-> > > +		} else {
-> > > +			int match;
-> > > +
-> > > +			match = !strcmp(ncomp->device_name, buffer.pointer);
-> > > +			acpi_os_free(buffer.pointer);
-> > > +
-> > > +			if (match)
-> > > +				return AE_OK;
-> > > +		}
-> > > +
-> > > +		break;
-> > > +	}
-> > > +	case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: {
-> > > +		struct acpi_iort_root_complex *pci_rc;
-> > > +		struct pci_bus *bus;
-> > > +
-> > > +		bus = to_pci_bus(dev);
-> > > +		pci_rc = (struct acpi_iort_root_complex *)node->node_data;
-> > > +
-> > > +		/*
-> > > +		 * It is assumed that PCI segment numbers maps one-to-one
-> > > +		 * with root complexes. Each segment number can represent only
-> > > +		 * one root complex.
-> > > +		 */
-> > > +		if (pci_rc->pci_segment_number == pci_domain_nr(bus))
-> > > +			return AE_OK;
-> > > +
-> > > +		break;
-> > > +	}
-> > > +	}
-> > > +
-> > > +	return AE_NOT_FOUND;
+> > > +=09struct device *dev =3D context;
+> > > +
+> > > +=09switch (node->type) {
+> > > +=09case ACPI_IORT_NODE_NAMED_COMPONENT: {
+> > > +=09=09struct acpi_buffer buffer =3D { ACPI_ALLOCATE_BUFFER, NULL };
+> > > +=09=09struct acpi_device *adev =3D to_acpi_device_node(dev->fwnode);
+> > > +=09=09struct acpi_iort_named_component *ncomp;
+> > > +
+> > > +=09=09if (!adev)
+> > > +=09=09=09break;
+> > > +
+> > > +=09=09ncomp =3D (struct acpi_iort_named_component *)node->node_data;
+> > > +
+> > > +=09=09if (ACPI_FAILURE(acpi_get_name(adev->handle,
+> > > +=09=09=09=09=09       ACPI_FULL_PATHNAME, &buffer))) {
+> > > +=09=09=09dev_warn(dev, "Can't get device full path name\n");
+> > > +=09=09} else {
+> > > +=09=09=09int match;
+> > > +
+> > > +=09=09=09match =3D !strcmp(ncomp->device_name, buffer.pointer);
+> > > +=09=09=09acpi_os_free(buffer.pointer);
+> > > +
+> > > +=09=09=09if (match)
+> > > +=09=09=09=09return AE_OK;
+> > > +=09=09}
+> > > +
+> > > +=09=09break;
+> > > +=09}
+> > > +=09case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: {
+> > > +=09=09struct acpi_iort_root_complex *pci_rc;
+> > > +=09=09struct pci_bus *bus;
+> > > +
+> > > +=09=09bus =3D to_pci_bus(dev);
+> > > +=09=09pci_rc =3D (struct acpi_iort_root_complex *)node->node_data;
+> > > +
+> > > +=09=09/*
+> > > +=09=09 * It is assumed that PCI segment numbers maps one-to-one
+> > > +=09=09 * with root complexes. Each segment number can represent only
+> > > +=09=09 * one root complex.
+> > > +=09=09 */
+> > > +=09=09if (pci_rc->pci_segment_number =3D=3D pci_domain_nr(bus))
+> > > +=09=09=09return AE_OK;
+> > > +
+> > > +=09=09break;
+> > > +=09}
+> > > +=09}
+> > > +
+> > > +=09return AE_NOT_FOUND;
 > > > +}
 > > > +
 > > > +static int
-> > > +iort_id_map(struct acpi_iort_id_mapping *map, u8 type, u32 rid_in, u32 *rid_out)
+> > > +iort_id_map(struct acpi_iort_id_mapping *map, u8 type, u32 rid_in, u=
+32 *rid_out)
 > > > +{
-> > > +	/* Single mapping does not care for input id */
-> > > +	if (map->flags & ACPI_IORT_ID_SINGLE_MAPPING) {
-> > > +		if (type == ACPI_IORT_NODE_NAMED_COMPONENT ||
-> > > +		    type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
-> > > +			*rid_out = map->output_base;
-> > > +			return 0;
-> > > +		}
-> > > +
-> > > +		pr_warn(FW_BUG "[map %p] SINGLE MAPPING flag not allowed for node type %d, skipping ID map\n",
-> > > +			map, type);
-> > > +		return -ENXIO;
-> > > +	}
-> > > +
-> > > +	if (rid_in < map->input_base ||
-> > > +	    (rid_in >= map->input_base + map->id_count))
-> > > +		return -ENXIO;
-> > > +
-> > > +	*rid_out = map->output_base + (rid_in - map->input_base);
-> > > +	return 0;
+> > > +=09/* Single mapping does not care for input id */
+> > > +=09if (map->flags & ACPI_IORT_ID_SINGLE_MAPPING) {
+> > > +=09=09if (type =3D=3D ACPI_IORT_NODE_NAMED_COMPONENT ||
+> > > +=09=09    type =3D=3D ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
+> > > +=09=09=09*rid_out =3D map->output_base;
+> > > +=09=09=09return 0;
+> > > +=09=09}
+> > > +
+> > > +=09=09pr_warn(FW_BUG "[map %p] SINGLE MAPPING flag not allowed for n=
+ode type %d, skipping ID map\n",
+> > > +=09=09=09map, type);
+> > > +=09=09return -ENXIO;
+> > > +=09}
+> > > +
+> > > +=09if (rid_in < map->input_base ||
+> > > +=09    (rid_in >=3D map->input_base + map->id_count))
+> > > +=09=09return -ENXIO;
+> > > +
+> > > +=09*rid_out =3D map->output_base + (rid_in - map->input_base);
+> > > +=09return 0;
 > > > +}
 > > > +
 > > > +static struct acpi_iort_node *
 > > > +iort_node_map_rid(struct acpi_iort_node *node, u32 rid_in,
-> > > +		  u32 *rid_out, u8 type)
+> > > +=09=09  u32 *rid_out, u8 type)
 > > > +{
-> > > +	u32 rid = rid_in;
-> > > +
-> > > +	/* Parse the ID mapping tree to find specified node type */
-> > > +	while (node) {
-> > > +		struct acpi_iort_id_mapping *map;
-> > > +		int i;
-> > > +
-> > > +		if (node->type == type) {
-> > > +			if (rid_out)
-> > > +				*rid_out = rid;
-> > > +			return node;
-> > > +		}
-> > > +
-> > > +		if (!node->mapping_offset || !node->mapping_count)
-> > > +			goto fail_map;
-> > > +
-> > > +		map = ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,
-> > > +				   node->mapping_offset);
-> > > +
-> > > +		/* Firmware bug! */
-> > > +		if (!map->output_reference) {
-> > > +			pr_err(FW_BUG "[node %p type %d] ID map has NULL parent reference\n",
-> > > +			       node, node->type);
-> > > +			goto fail_map;
-> > > +		}
-> > > +
-> > > +		/* Do the RID translation */
-> > > +		for (i = 0; i < node->mapping_count; i++, map++) {
-> > > +			if (!iort_id_map(map, node->type, rid, &rid))
-> > > +				break;
-> > > +		}
-> > > +
-> > > +		if (i == node->mapping_count)
-> > > +			goto fail_map;
-> > > +
-> > > +		node = ACPI_ADD_PTR(struct acpi_iort_node, iort_table,
-> > > +				    map->output_reference);
-> > > +	}
+> > > +=09u32 rid =3D rid_in;
+> > > +
+> > > +=09/* Parse the ID mapping tree to find specified node type */
+> > > +=09while (node) {
+> > > +=09=09struct acpi_iort_id_mapping *map;
+> > > +=09=09int i;
+> > > +
+> > > +=09=09if (node->type =3D=3D type) {
+> > > +=09=09=09if (rid_out)
+> > > +=09=09=09=09*rid_out =3D rid;
+> > > +=09=09=09return node;
+> > > +=09=09}
+> > > +
+> > > +=09=09if (!node->mapping_offset || !node->mapping_count)
+> > > +=09=09=09goto fail_map;
+> > > +
+> > > +=09=09map =3D ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,
+> > > +=09=09=09=09   node->mapping_offset);
+> > > +
+> > > +=09=09/* Firmware bug! */
+> > > +=09=09if (!map->output_reference) {
+> > > +=09=09=09pr_err(FW_BUG "[node %p type %d] ID map has NULL parent ref=
+erence\n",
+> > > +=09=09=09       node, node->type);
+> > > +=09=09=09goto fail_map;
+> > > +=09=09}
+> > > +
+> > > +=09=09/* Do the RID translation */
+> > > +=09=09for (i =3D 0; i < node->mapping_count; i++, map++) {
+> > > +=09=09=09if (!iort_id_map(map, node->type, rid, &rid))
+> > > +=09=09=09=09break;
+> > > +=09=09}
+> > > +
+> > > +=09=09if (i =3D=3D node->mapping_count)
+> > > +=09=09=09goto fail_map;
+> > > +
+> > > +=09=09node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_table,
+> > > +=09=09=09=09    map->output_reference);
+> > > +=09}
 > > > +
 > > > +fail_map:
-> > > +	/* Map input RID to output RID unchanged on mapping failure*/
-> > > +	if (rid_out)
-> > > +		*rid_out = rid_in;
+> > > +=09/* Map input RID to output RID unchanged on mapping failure*/
+> > > +=09if (rid_out)
+> > > +=09=09*rid_out =3D rid_in;
 > > > +
-> > > +	return NULL;
+> > > +=09return NULL;
 > > > +}
 > > > +
 > > > +static struct acpi_iort_node *
 > > > +iort_find_dev_node(struct device *dev)
 > > > +{
-> > > +	struct pci_bus *pbus;
+> > > +=09struct pci_bus *pbus;
 > > > +
-> > > +	if (!dev_is_pci(dev))
-> > > +		return iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
-> > > +				      iort_match_node_callback, dev);
+> > > +=09if (!dev_is_pci(dev))
+> > > +=09=09return iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
+> > > +=09=09=09=09      iort_match_node_callback, dev);
 > > > +
-> > > +	/* Find a PCI root bus */
-> > > +	pbus = to_pci_dev(dev)->bus;
-> > > +	while (!pci_is_root_bus(pbus))
-> > > +		pbus = pbus->parent;
+> > > +=09/* Find a PCI root bus */
+> > > +=09pbus =3D to_pci_dev(dev)->bus;
+> > > +=09while (!pci_is_root_bus(pbus))
+> > > +=09=09pbus =3D pbus->parent;
 > > > +
-> > > +	return iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
-> > > +			      iort_match_node_callback, &pbus->dev);
+> > > +=09return iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
+> > > +=09=09=09      iort_match_node_callback, &pbus->dev);
 > > > +}
 > > > +
 > > > +void __init iort_table_detect(void)
 > > > +{
-> > > +	acpi_status status;
+> > > +=09acpi_status status;
 > > > +
-> > > +	status = acpi_get_table(ACPI_SIG_IORT, 0, &iort_table);
-> > > +	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
-> > > +		const char *msg = acpi_format_exception(status);
-> > > +		pr_err("Failed to get table, %s\n", msg);
-> > > +	}
+> > > +=09status =3D acpi_get_table(ACPI_SIG_IORT, 0, &iort_table);
+> > > +=09if (ACPI_FAILURE(status) && status !=3D AE_NOT_FOUND) {
+> > > +=09=09const char *msg =3D acpi_format_exception(status);
+> > > +=09=09pr_err("Failed to get table, %s\n", msg);
+> > > +=09}
 > > > +}
 > > > diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
 > > > index 85b7d07..55a84da 100644
@@ -234,13 +241,13 @@ Dennis
 > > >  #include <acpi/apei.h>
 > > >  #include <linux/dmi.h>
 > > > @@ -1186,6 +1187,7 @@ static int __init acpi_init(void)
-> > >  	}
-> > >  
-> > >  	pci_mmcfg_late_init();
-> > > +	iort_table_detect();
-> > >  	acpi_scan_init();
-> > >  	acpi_ec_init();
-> > >  	acpi_debugfs_init();
+> > >  =09}
+> > > =20
+> > >  =09pci_mmcfg_late_init();
+> > > +=09iort_table_detect();
+> > >  =09acpi_scan_init();
+> > >  =09acpi_ec_init();
+> > >  =09acpi_debugfs_init();
 > > > diff --git a/include/linux/iort.h b/include/linux/iort.h
 > > > new file mode 100644
 > > > index 0000000..cde6809
@@ -249,19 +256,25 @@ Dennis
 > > > @@ -0,0 +1,30 @@
 > > > +/*
 > > > + * Copyright (C) 2016, Semihalf
-> > > + *	Author: Tomasz Nowicki <tn@semihalf.com>
+> > > + *=09Author: Tomasz Nowicki <tn@semihalf.com>
 > > > + *
-> > > + * This program is free software; you can redistribute it and/or modify it
+> > > + * This program is free software; you can redistribute it and/or mod=
+ify it
 > > > + * under the terms and conditions of the GNU General Public License,
 > > > + * version 2, as published by the Free Software Foundation.
 > > > + *
-> > > + * This program is distributed in the hope it will be useful, but WITHOUT
-> > > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-> > > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+> > > + * This program is distributed in the hope it will be useful, but WI=
+THOUT
+> > > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILIT=
+Y or
+> > > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Lic=
+ense for
 > > > + * more details.
 > > > + *
-> > > + * You should have received a copy of the GNU General Public License along with
-> > > + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+> > > + * You should have received a copy of the GNU General Public License=
+ along with
+> > > + * this program; if not, write to the Free Software Foundation, Inc.=
+, 59 Temple
 > > > + * Place - Suite 330, Boston, MA 02111-1307 USA.
 > > > + */
 > > > +
@@ -277,12 +290,13 @@ Dennis
 > > > +#endif
 > > > +
 > > > +#endif /* __IORT_H__ */
-> > > -- 
+> > > --=20
 > > > 1.9.1
-> > > 
+> > >=20
 > > > --
-> > > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
+> > > To unsubscribe from this list: send the line "unsubscribe linux-pci" =
+in
 > > > the body of a message to majordomo@vger.kernel.org
 > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
-> > > 
->
+> > >=20
+>=20
diff --git a/a/content_digest b/N1/content_digest
index eb3d832..82375dc 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -6,254 +6,261 @@
  "Subject\0Re: [PATCH V8 1/8] ACPI: I/O Remapping Table (IORT) initial support\0"
  "Date\0Fri, 19 Aug 2016 11:39:13 +0800\0"
  "To\0Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\0"
- "Cc\0rafael@kernel.org"
-  linux-pci@vger.kernel.org
-  will.deacon@arm.com
-  okaya@codeaurora.org
-  andrea.gallo@linaro.org
-  nd@arm.com
-  al.stone@linaro.org
-  Tomasz Nowicki <tn@semihalf.com>
-  linaro-acpi@lists.linaro.org
-  linux-acpi@vger.kernel.org
-  robert.richter@caviumnetworks.com
-  helgaas@kernel.org
-  catalin.marinas@arm.com
-  shijie.huang@arm.com
-  jason@lakedaemon.net
-  marc.zyngier@arm.com
-  ddaney.cavm@gmail.com
-  tglx@linutronix.de
-  mw@semihalf.com
-  linux-arm-kernel@lists.infradead.org
-  graeme.gregory@linaro.org
-  rjw@rjwysocki.net
-  linux-kernel@vger.kernel.org
- " hanjun.guo@linaro.org\0"
+ "Cc\0Tomasz Nowicki <tn@semihalf.com>"
+  <marc.zyngier@arm.com>
+  <tglx@linutronix.de>
+  <jason@lakedaemon.net>
+  <rjw@rjwysocki.net>
+  <helgaas@kernel.org>
+  <rafael@kernel.org>
+  <will.deacon@arm.com>
+  <catalin.marinas@arm.com>
+  <hanjun.guo@linaro.org>
+  <shijie.huang@arm.com>
+  <robert.richter@caviumnetworks.com>
+  <mw@semihalf.com>
+  <linux-pci@vger.kernel.org>
+  <linux-arm-kernel@lists.infradead.org>
+  <linaro-acpi@lists.linaro.org>
+  <andrea.gallo@linaro.org>
+  <linux-acpi@vger.kernel.org>
+  <linux-kernel@vger.kernel.org>
+  <al.stone@linaro.org>
+  <graeme.gregory@linaro.org>
+  <ddaney.cavm@gmail.com>
+  <okaya@codeaurora.org>
+ " <nd@arm.com>\0"
  "\00:1\0"
  "b\0"
  "On Thu, Aug 18, 2016 at 12:14:20PM +0100, Lorenzo Pieralisi wrote:\n"
  "> On Thu, Aug 18, 2016 at 06:55:50PM +0800, Dennis Chen wrote:\n"
- "> \n"
+ ">=20\n"
  "> [...]\n"
- "> \n"
+ ">=20\n"
  "> > > +static struct acpi_iort_node *\n"
  "> > > +iort_scan_node(enum acpi_iort_node_type type,\n"
- "> > > +\t       iort_find_node_callback callback, void *context)\n"
+ "> > > +=09       iort_find_node_callback callback, void *context)\n"
  "> > > +{\n"
- "> > > +\tstruct acpi_iort_node *iort_node, *iort_end;\n"
- "> > > +\tstruct acpi_table_iort *iort;\n"
- "> > > +\tint i;\n"
+ "> > > +=09struct acpi_iort_node *iort_node, *iort_end;\n"
+ "> > > +=09struct acpi_table_iort *iort;\n"
+ "> > > +=09int i;\n"
  "> > > +\n"
- "> > > +\t/* Get the first IORT node */\n"
- "> > > +\tiort = (struct acpi_table_iort *)iort_table;\n"
+ "> > > +=09/* Get the first IORT node */\n"
+ "> > > +=09iort =3D (struct acpi_table_iort *)iort_table;\n"
  "> > >\n"
  "> > Here, the same as I comments on Lorenzo's patch. If IORT is missed in\n"
  "> > the firmware, then iort_table will be NULL, result in kernel panic in\n"
  "> > the codes followed.\n"
- "> \n"
+ ">=20\n"
  "> The pointer is checked in the functions that are visible to\n"
  "> other compilation units before calling this function:\n"
- "> \n"
+ ">=20\n"
  "> iort_msi_map_rid()\n"
  "> iort_get_device_domain()\n"
- "> \n"
+ ">=20\n"
  "> I missed to check it when I added iort_node_match() and\n"
  "> iort_iommu_configure() though, which makes me think that it is probably\n"
  "> better to move the iort_table pointer check to iort_scan_node() so that\n"
  "> it is done in one single place instead of adding it to all given\n"
  "> external interfaces.\n"
  ">\n"
- "Agree to check this in iort_scan_node(). Also, given some duplicate codes between\n"
- "iort_scan_node() and iort_smmu_init(), so maybe we can think about to refactor\n"
- "iort_match_callback() as the way to implement the function of iort_smmu_int(),\n"
+ "Agree to check this in iort_scan_node(). Also, given some duplicate codes b=\n"
+ "etween\n"
+ "iort_scan_node() and iort_smmu_init(), so maybe we can think about to refac=\n"
+ "tor\n"
+ "iort_match_callback() as the way to implement the function of iort_smmu_int=\n"
+ "(),\n"
  "thus we can call iort_node_match(ACPI_IORT_NODE_SMMU_V3)...\n"
  "\n"
  "Thanks,\n"
  "Dennis\n"
- "> \n"
+ ">=20\n"
  "> Lorenzo\n"
- "> \n"
- "> > \n"
+ ">=20\n"
+ "> >=20\n"
  "> > Thanks,\n"
  "> > Dennis\n"
- "> > > +\tiort_node = ACPI_ADD_PTR(struct acpi_iort_node, iort,\n"
- "> > > +\t\t\t\t iort->node_offset);\n"
- "> > > +\tiort_end = ACPI_ADD_PTR(struct acpi_iort_node, iort_table,\n"
- "> > > +\t\t\t\tiort_table->length);\n"
- "> > > +\n"
- "> > > +\tfor (i = 0; i < iort->node_count; i++) {\n"
- "> > > +\t\tif (WARN_TAINT(iort_node >= iort_end, TAINT_FIRMWARE_WORKAROUND,\n"
- "> > > +\t\t\t       \"IORT node pointer overflows, bad table!\\n\"))\n"
- "> > > +\t\t\treturn NULL;\n"
- "> > > +\n"
- "> > > +\t\tif (iort_node->type == type) {\n"
- "> > > +\t\t\tif (ACPI_SUCCESS(callback(iort_node, context)))\n"
- "> > > +\t\t\t\treturn iort_node;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\tiort_node = ACPI_ADD_PTR(struct acpi_iort_node, iort_node,\n"
- "> > > +\t\t\t\t\t iort_node->length);\n"
- "> > > +\t}\n"
- "> > > +\n"
- "> > > +\treturn NULL;\n"
+ "> > > +=09iort_node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort,\n"
+ "> > > +=09=09=09=09 iort->node_offset);\n"
+ "> > > +=09iort_end =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_table,\n"
+ "> > > +=09=09=09=09iort_table->length);\n"
+ "> > > +\n"
+ "> > > +=09for (i =3D 0; i < iort->node_count; i++) {\n"
+ "> > > +=09=09if (WARN_TAINT(iort_node >=3D iort_end, TAINT_FIRMWARE_WORKARO=\n"
+ "UND,\n"
+ "> > > +=09=09=09       \"IORT node pointer overflows, bad table!\\n\"))\n"
+ "> > > +=09=09=09return NULL;\n"
+ "> > > +\n"
+ "> > > +=09=09if (iort_node->type =3D=3D type) {\n"
+ "> > > +=09=09=09if (ACPI_SUCCESS(callback(iort_node, context)))\n"
+ "> > > +=09=09=09=09return iort_node;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09iort_node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_node,\n"
+ "> > > +=09=09=09=09=09 iort_node->length);\n"
+ "> > > +=09}\n"
+ "> > > +\n"
+ "> > > +=09return NULL;\n"
  "> > > +}\n"
  "> > > +\n"
  "> > > +static acpi_status\n"
  "> > > +iort_match_node_callback(struct acpi_iort_node *node, void *context)\n"
  "> > > +{\n"
- "> > > +\tstruct device *dev = context;\n"
- "> > > +\n"
- "> > > +\tswitch (node->type) {\n"
- "> > > +\tcase ACPI_IORT_NODE_NAMED_COMPONENT: {\n"
- "> > > +\t\tstruct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };\n"
- "> > > +\t\tstruct acpi_device *adev = to_acpi_device_node(dev->fwnode);\n"
- "> > > +\t\tstruct acpi_iort_named_component *ncomp;\n"
- "> > > +\n"
- "> > > +\t\tif (!adev)\n"
- "> > > +\t\t\tbreak;\n"
- "> > > +\n"
- "> > > +\t\tncomp = (struct acpi_iort_named_component *)node->node_data;\n"
- "> > > +\n"
- "> > > +\t\tif (ACPI_FAILURE(acpi_get_name(adev->handle,\n"
- "> > > +\t\t\t\t\t       ACPI_FULL_PATHNAME, &buffer))) {\n"
- "> > > +\t\t\tdev_warn(dev, \"Can't get device full path name\\n\");\n"
- "> > > +\t\t} else {\n"
- "> > > +\t\t\tint match;\n"
- "> > > +\n"
- "> > > +\t\t\tmatch = !strcmp(ncomp->device_name, buffer.pointer);\n"
- "> > > +\t\t\tacpi_os_free(buffer.pointer);\n"
- "> > > +\n"
- "> > > +\t\t\tif (match)\n"
- "> > > +\t\t\t\treturn AE_OK;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\tbreak;\n"
- "> > > +\t}\n"
- "> > > +\tcase ACPI_IORT_NODE_PCI_ROOT_COMPLEX: {\n"
- "> > > +\t\tstruct acpi_iort_root_complex *pci_rc;\n"
- "> > > +\t\tstruct pci_bus *bus;\n"
- "> > > +\n"
- "> > > +\t\tbus = to_pci_bus(dev);\n"
- "> > > +\t\tpci_rc = (struct acpi_iort_root_complex *)node->node_data;\n"
- "> > > +\n"
- "> > > +\t\t/*\n"
- "> > > +\t\t * It is assumed that PCI segment numbers maps one-to-one\n"
- "> > > +\t\t * with root complexes. Each segment number can represent only\n"
- "> > > +\t\t * one root complex.\n"
- "> > > +\t\t */\n"
- "> > > +\t\tif (pci_rc->pci_segment_number == pci_domain_nr(bus))\n"
- "> > > +\t\t\treturn AE_OK;\n"
- "> > > +\n"
- "> > > +\t\tbreak;\n"
- "> > > +\t}\n"
- "> > > +\t}\n"
- "> > > +\n"
- "> > > +\treturn AE_NOT_FOUND;\n"
+ "> > > +=09struct device *dev =3D context;\n"
+ "> > > +\n"
+ "> > > +=09switch (node->type) {\n"
+ "> > > +=09case ACPI_IORT_NODE_NAMED_COMPONENT: {\n"
+ "> > > +=09=09struct acpi_buffer buffer =3D { ACPI_ALLOCATE_BUFFER, NULL };\n"
+ "> > > +=09=09struct acpi_device *adev =3D to_acpi_device_node(dev->fwnode);\n"
+ "> > > +=09=09struct acpi_iort_named_component *ncomp;\n"
+ "> > > +\n"
+ "> > > +=09=09if (!adev)\n"
+ "> > > +=09=09=09break;\n"
+ "> > > +\n"
+ "> > > +=09=09ncomp =3D (struct acpi_iort_named_component *)node->node_data;\n"
+ "> > > +\n"
+ "> > > +=09=09if (ACPI_FAILURE(acpi_get_name(adev->handle,\n"
+ "> > > +=09=09=09=09=09       ACPI_FULL_PATHNAME, &buffer))) {\n"
+ "> > > +=09=09=09dev_warn(dev, \"Can't get device full path name\\n\");\n"
+ "> > > +=09=09} else {\n"
+ "> > > +=09=09=09int match;\n"
+ "> > > +\n"
+ "> > > +=09=09=09match =3D !strcmp(ncomp->device_name, buffer.pointer);\n"
+ "> > > +=09=09=09acpi_os_free(buffer.pointer);\n"
+ "> > > +\n"
+ "> > > +=09=09=09if (match)\n"
+ "> > > +=09=09=09=09return AE_OK;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09break;\n"
+ "> > > +=09}\n"
+ "> > > +=09case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: {\n"
+ "> > > +=09=09struct acpi_iort_root_complex *pci_rc;\n"
+ "> > > +=09=09struct pci_bus *bus;\n"
+ "> > > +\n"
+ "> > > +=09=09bus =3D to_pci_bus(dev);\n"
+ "> > > +=09=09pci_rc =3D (struct acpi_iort_root_complex *)node->node_data;\n"
+ "> > > +\n"
+ "> > > +=09=09/*\n"
+ "> > > +=09=09 * It is assumed that PCI segment numbers maps one-to-one\n"
+ "> > > +=09=09 * with root complexes. Each segment number can represent only\n"
+ "> > > +=09=09 * one root complex.\n"
+ "> > > +=09=09 */\n"
+ "> > > +=09=09if (pci_rc->pci_segment_number =3D=3D pci_domain_nr(bus))\n"
+ "> > > +=09=09=09return AE_OK;\n"
+ "> > > +\n"
+ "> > > +=09=09break;\n"
+ "> > > +=09}\n"
+ "> > > +=09}\n"
+ "> > > +\n"
+ "> > > +=09return AE_NOT_FOUND;\n"
  "> > > +}\n"
  "> > > +\n"
  "> > > +static int\n"
- "> > > +iort_id_map(struct acpi_iort_id_mapping *map, u8 type, u32 rid_in, u32 *rid_out)\n"
+ "> > > +iort_id_map(struct acpi_iort_id_mapping *map, u8 type, u32 rid_in, u=\n"
+ "32 *rid_out)\n"
  "> > > +{\n"
- "> > > +\t/* Single mapping does not care for input id */\n"
- "> > > +\tif (map->flags & ACPI_IORT_ID_SINGLE_MAPPING) {\n"
- "> > > +\t\tif (type == ACPI_IORT_NODE_NAMED_COMPONENT ||\n"
- "> > > +\t\t    type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {\n"
- "> > > +\t\t\t*rid_out = map->output_base;\n"
- "> > > +\t\t\treturn 0;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\tpr_warn(FW_BUG \"[map %p] SINGLE MAPPING flag not allowed for node type %d, skipping ID map\\n\",\n"
- "> > > +\t\t\tmap, type);\n"
- "> > > +\t\treturn -ENXIO;\n"
- "> > > +\t}\n"
- "> > > +\n"
- "> > > +\tif (rid_in < map->input_base ||\n"
- "> > > +\t    (rid_in >= map->input_base + map->id_count))\n"
- "> > > +\t\treturn -ENXIO;\n"
- "> > > +\n"
- "> > > +\t*rid_out = map->output_base + (rid_in - map->input_base);\n"
- "> > > +\treturn 0;\n"
+ "> > > +=09/* Single mapping does not care for input id */\n"
+ "> > > +=09if (map->flags & ACPI_IORT_ID_SINGLE_MAPPING) {\n"
+ "> > > +=09=09if (type =3D=3D ACPI_IORT_NODE_NAMED_COMPONENT ||\n"
+ "> > > +=09=09    type =3D=3D ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {\n"
+ "> > > +=09=09=09*rid_out =3D map->output_base;\n"
+ "> > > +=09=09=09return 0;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09pr_warn(FW_BUG \"[map %p] SINGLE MAPPING flag not allowed for n=\n"
+ "ode type %d, skipping ID map\\n\",\n"
+ "> > > +=09=09=09map, type);\n"
+ "> > > +=09=09return -ENXIO;\n"
+ "> > > +=09}\n"
+ "> > > +\n"
+ "> > > +=09if (rid_in < map->input_base ||\n"
+ "> > > +=09    (rid_in >=3D map->input_base + map->id_count))\n"
+ "> > > +=09=09return -ENXIO;\n"
+ "> > > +\n"
+ "> > > +=09*rid_out =3D map->output_base + (rid_in - map->input_base);\n"
+ "> > > +=09return 0;\n"
  "> > > +}\n"
  "> > > +\n"
  "> > > +static struct acpi_iort_node *\n"
  "> > > +iort_node_map_rid(struct acpi_iort_node *node, u32 rid_in,\n"
- "> > > +\t\t  u32 *rid_out, u8 type)\n"
+ "> > > +=09=09  u32 *rid_out, u8 type)\n"
  "> > > +{\n"
- "> > > +\tu32 rid = rid_in;\n"
- "> > > +\n"
- "> > > +\t/* Parse the ID mapping tree to find specified node type */\n"
- "> > > +\twhile (node) {\n"
- "> > > +\t\tstruct acpi_iort_id_mapping *map;\n"
- "> > > +\t\tint i;\n"
- "> > > +\n"
- "> > > +\t\tif (node->type == type) {\n"
- "> > > +\t\t\tif (rid_out)\n"
- "> > > +\t\t\t\t*rid_out = rid;\n"
- "> > > +\t\t\treturn node;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\tif (!node->mapping_offset || !node->mapping_count)\n"
- "> > > +\t\t\tgoto fail_map;\n"
- "> > > +\n"
- "> > > +\t\tmap = ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,\n"
- "> > > +\t\t\t\t   node->mapping_offset);\n"
- "> > > +\n"
- "> > > +\t\t/* Firmware bug! */\n"
- "> > > +\t\tif (!map->output_reference) {\n"
- "> > > +\t\t\tpr_err(FW_BUG \"[node %p type %d] ID map has NULL parent reference\\n\",\n"
- "> > > +\t\t\t       node, node->type);\n"
- "> > > +\t\t\tgoto fail_map;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\t/* Do the RID translation */\n"
- "> > > +\t\tfor (i = 0; i < node->mapping_count; i++, map++) {\n"
- "> > > +\t\t\tif (!iort_id_map(map, node->type, rid, &rid))\n"
- "> > > +\t\t\t\tbreak;\n"
- "> > > +\t\t}\n"
- "> > > +\n"
- "> > > +\t\tif (i == node->mapping_count)\n"
- "> > > +\t\t\tgoto fail_map;\n"
- "> > > +\n"
- "> > > +\t\tnode = ACPI_ADD_PTR(struct acpi_iort_node, iort_table,\n"
- "> > > +\t\t\t\t    map->output_reference);\n"
- "> > > +\t}\n"
+ "> > > +=09u32 rid =3D rid_in;\n"
+ "> > > +\n"
+ "> > > +=09/* Parse the ID mapping tree to find specified node type */\n"
+ "> > > +=09while (node) {\n"
+ "> > > +=09=09struct acpi_iort_id_mapping *map;\n"
+ "> > > +=09=09int i;\n"
+ "> > > +\n"
+ "> > > +=09=09if (node->type =3D=3D type) {\n"
+ "> > > +=09=09=09if (rid_out)\n"
+ "> > > +=09=09=09=09*rid_out =3D rid;\n"
+ "> > > +=09=09=09return node;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09if (!node->mapping_offset || !node->mapping_count)\n"
+ "> > > +=09=09=09goto fail_map;\n"
+ "> > > +\n"
+ "> > > +=09=09map =3D ACPI_ADD_PTR(struct acpi_iort_id_mapping, node,\n"
+ "> > > +=09=09=09=09   node->mapping_offset);\n"
+ "> > > +\n"
+ "> > > +=09=09/* Firmware bug! */\n"
+ "> > > +=09=09if (!map->output_reference) {\n"
+ "> > > +=09=09=09pr_err(FW_BUG \"[node %p type %d] ID map has NULL parent ref=\n"
+ "erence\\n\",\n"
+ "> > > +=09=09=09       node, node->type);\n"
+ "> > > +=09=09=09goto fail_map;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09/* Do the RID translation */\n"
+ "> > > +=09=09for (i =3D 0; i < node->mapping_count; i++, map++) {\n"
+ "> > > +=09=09=09if (!iort_id_map(map, node->type, rid, &rid))\n"
+ "> > > +=09=09=09=09break;\n"
+ "> > > +=09=09}\n"
+ "> > > +\n"
+ "> > > +=09=09if (i =3D=3D node->mapping_count)\n"
+ "> > > +=09=09=09goto fail_map;\n"
+ "> > > +\n"
+ "> > > +=09=09node =3D ACPI_ADD_PTR(struct acpi_iort_node, iort_table,\n"
+ "> > > +=09=09=09=09    map->output_reference);\n"
+ "> > > +=09}\n"
  "> > > +\n"
  "> > > +fail_map:\n"
- "> > > +\t/* Map input RID to output RID unchanged on mapping failure*/\n"
- "> > > +\tif (rid_out)\n"
- "> > > +\t\t*rid_out = rid_in;\n"
+ "> > > +=09/* Map input RID to output RID unchanged on mapping failure*/\n"
+ "> > > +=09if (rid_out)\n"
+ "> > > +=09=09*rid_out =3D rid_in;\n"
  "> > > +\n"
- "> > > +\treturn NULL;\n"
+ "> > > +=09return NULL;\n"
  "> > > +}\n"
  "> > > +\n"
  "> > > +static struct acpi_iort_node *\n"
  "> > > +iort_find_dev_node(struct device *dev)\n"
  "> > > +{\n"
- "> > > +\tstruct pci_bus *pbus;\n"
+ "> > > +=09struct pci_bus *pbus;\n"
  "> > > +\n"
- "> > > +\tif (!dev_is_pci(dev))\n"
- "> > > +\t\treturn iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,\n"
- "> > > +\t\t\t\t      iort_match_node_callback, dev);\n"
+ "> > > +=09if (!dev_is_pci(dev))\n"
+ "> > > +=09=09return iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,\n"
+ "> > > +=09=09=09=09      iort_match_node_callback, dev);\n"
  "> > > +\n"
- "> > > +\t/* Find a PCI root bus */\n"
- "> > > +\tpbus = to_pci_dev(dev)->bus;\n"
- "> > > +\twhile (!pci_is_root_bus(pbus))\n"
- "> > > +\t\tpbus = pbus->parent;\n"
+ "> > > +=09/* Find a PCI root bus */\n"
+ "> > > +=09pbus =3D to_pci_dev(dev)->bus;\n"
+ "> > > +=09while (!pci_is_root_bus(pbus))\n"
+ "> > > +=09=09pbus =3D pbus->parent;\n"
  "> > > +\n"
- "> > > +\treturn iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,\n"
- "> > > +\t\t\t      iort_match_node_callback, &pbus->dev);\n"
+ "> > > +=09return iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,\n"
+ "> > > +=09=09=09      iort_match_node_callback, &pbus->dev);\n"
  "> > > +}\n"
  "> > > +\n"
  "> > > +void __init iort_table_detect(void)\n"
  "> > > +{\n"
- "> > > +\tacpi_status status;\n"
+ "> > > +=09acpi_status status;\n"
  "> > > +\n"
- "> > > +\tstatus = acpi_get_table(ACPI_SIG_IORT, 0, &iort_table);\n"
- "> > > +\tif (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {\n"
- "> > > +\t\tconst char *msg = acpi_format_exception(status);\n"
- "> > > +\t\tpr_err(\"Failed to get table, %s\\n\", msg);\n"
- "> > > +\t}\n"
+ "> > > +=09status =3D acpi_get_table(ACPI_SIG_IORT, 0, &iort_table);\n"
+ "> > > +=09if (ACPI_FAILURE(status) && status !=3D AE_NOT_FOUND) {\n"
+ "> > > +=09=09const char *msg =3D acpi_format_exception(status);\n"
+ "> > > +=09=09pr_err(\"Failed to get table, %s\\n\", msg);\n"
+ "> > > +=09}\n"
  "> > > +}\n"
  "> > > diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c\n"
  "> > > index 85b7d07..55a84da 100644\n"
@@ -268,13 +275,13 @@
  "> > >  #include <acpi/apei.h>\n"
  "> > >  #include <linux/dmi.h>\n"
  "> > > @@ -1186,6 +1187,7 @@ static int __init acpi_init(void)\n"
- "> > >  \t}\n"
- "> > >  \n"
- "> > >  \tpci_mmcfg_late_init();\n"
- "> > > +\tiort_table_detect();\n"
- "> > >  \tacpi_scan_init();\n"
- "> > >  \tacpi_ec_init();\n"
- "> > >  \tacpi_debugfs_init();\n"
+ "> > >  =09}\n"
+ "> > > =20\n"
+ "> > >  =09pci_mmcfg_late_init();\n"
+ "> > > +=09iort_table_detect();\n"
+ "> > >  =09acpi_scan_init();\n"
+ "> > >  =09acpi_ec_init();\n"
+ "> > >  =09acpi_debugfs_init();\n"
  "> > > diff --git a/include/linux/iort.h b/include/linux/iort.h\n"
  "> > > new file mode 100644\n"
  "> > > index 0000000..cde6809\n"
@@ -283,19 +290,25 @@
  "> > > @@ -0,0 +1,30 @@\n"
  "> > > +/*\n"
  "> > > + * Copyright (C) 2016, Semihalf\n"
- "> > > + *\tAuthor: Tomasz Nowicki <tn@semihalf.com>\n"
+ "> > > + *=09Author: Tomasz Nowicki <tn@semihalf.com>\n"
  "> > > + *\n"
- "> > > + * This program is free software; you can redistribute it and/or modify it\n"
+ "> > > + * This program is free software; you can redistribute it and/or mod=\n"
+ "ify it\n"
  "> > > + * under the terms and conditions of the GNU General Public License,\n"
  "> > > + * version 2, as published by the Free Software Foundation.\n"
  "> > > + *\n"
- "> > > + * This program is distributed in the hope it will be useful, but WITHOUT\n"
- "> > > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
- "> > > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
+ "> > > + * This program is distributed in the hope it will be useful, but WI=\n"
+ "THOUT\n"
+ "> > > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILIT=\n"
+ "Y or\n"
+ "> > > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Lic=\n"
+ "ense for\n"
  "> > > + * more details.\n"
  "> > > + *\n"
- "> > > + * You should have received a copy of the GNU General Public License along with\n"
- "> > > + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple\n"
+ "> > > + * You should have received a copy of the GNU General Public License=\n"
+ " along with\n"
+ "> > > + * this program; if not, write to the Free Software Foundation, Inc.=\n"
+ ", 59 Temple\n"
  "> > > + * Place - Suite 330, Boston, MA 02111-1307 USA.\n"
  "> > > + */\n"
  "> > > +\n"
@@ -311,14 +324,15 @@
  "> > > +#endif\n"
  "> > > +\n"
  "> > > +#endif /* __IORT_H__ */\n"
- "> > > -- \n"
+ "> > > --=20\n"
  "> > > 1.9.1\n"
- "> > > \n"
+ "> > >=20\n"
  "> > > --\n"
- "> > > To unsubscribe from this list: send the line \"unsubscribe linux-pci\" in\n"
+ "> > > To unsubscribe from this list: send the line \"unsubscribe linux-pci\" =\n"
+ "in\n"
  "> > > the body of a message to majordomo@vger.kernel.org\n"
  "> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"
- "> > > \n"
- >
+ "> > >=20\n"
+ >=20
 
-b887cefa850c83df2e7d00a26aa068b0f87ea2ccf41057b826148c6fd8af16ae
+fd5a1d945ec6988fdd0e73fb97d8170cb75d7af8ec50a95aa33cf4bf1f360a43

diff --git a/a/1.txt b/N2/1.txt
index 3f151c5..162520a 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -282,7 +282,7 @@ Dennis
 > > > 
 > > > --
 > > > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
-> > > the body of a message to majordomo@vger.kernel.org
+> > > the body of a message to majordomo at vger.kernel.org
 > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
 > > > 
 >
diff --git a/a/content_digest b/N2/content_digest
index eb3d832..3a96716 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,34 +2,10 @@
  "ref\01470909998-16710-2-git-send-email-tn@semihalf.com\0"
  "ref\020160818105549.GB20404@arm.com\0"
  "ref\020160818111419.GB8982@red-moon\0"
- "From\0Dennis Chen <dennis.chen@arm.com>\0"
- "Subject\0Re: [PATCH V8 1/8] ACPI: I/O Remapping Table (IORT) initial support\0"
+ "From\0dennis.chen@arm.com (Dennis Chen)\0"
+ "Subject\0[PATCH V8 1/8] ACPI: I/O Remapping Table (IORT) initial support\0"
  "Date\0Fri, 19 Aug 2016 11:39:13 +0800\0"
- "To\0Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\0"
- "Cc\0rafael@kernel.org"
-  linux-pci@vger.kernel.org
-  will.deacon@arm.com
-  okaya@codeaurora.org
-  andrea.gallo@linaro.org
-  nd@arm.com
-  al.stone@linaro.org
-  Tomasz Nowicki <tn@semihalf.com>
-  linaro-acpi@lists.linaro.org
-  linux-acpi@vger.kernel.org
-  robert.richter@caviumnetworks.com
-  helgaas@kernel.org
-  catalin.marinas@arm.com
-  shijie.huang@arm.com
-  jason@lakedaemon.net
-  marc.zyngier@arm.com
-  ddaney.cavm@gmail.com
-  tglx@linutronix.de
-  mw@semihalf.com
-  linux-arm-kernel@lists.infradead.org
-  graeme.gregory@linaro.org
-  rjw@rjwysocki.net
-  linux-kernel@vger.kernel.org
- " hanjun.guo@linaro.org\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
  "On Thu, Aug 18, 2016 at 12:14:20PM +0100, Lorenzo Pieralisi wrote:\n"
@@ -316,9 +292,9 @@
  "> > > \n"
  "> > > --\n"
  "> > > To unsubscribe from this list: send the line \"unsubscribe linux-pci\" in\n"
- "> > > the body of a message to majordomo@vger.kernel.org\n"
+ "> > > the body of a message to majordomo at vger.kernel.org\n"
  "> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"
  "> > > \n"
  >
 
-b887cefa850c83df2e7d00a26aa068b0f87ea2ccf41057b826148c6fd8af16ae
+cde59deb9253a8ac36da017018e0c82faba66d9883443eada02002e0534860ff

diff --git a/a/content_digest b/N3/content_digest
index eb3d832..65492cd 100644
--- a/a/content_digest
+++ b/N3/content_digest
@@ -6,30 +6,30 @@
  "Subject\0Re: [PATCH V8 1/8] ACPI: I/O Remapping Table (IORT) initial support\0"
  "Date\0Fri, 19 Aug 2016 11:39:13 +0800\0"
  "To\0Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\0"
- "Cc\0rafael@kernel.org"
-  linux-pci@vger.kernel.org
-  will.deacon@arm.com
-  okaya@codeaurora.org
-  andrea.gallo@linaro.org
-  nd@arm.com
-  al.stone@linaro.org
-  Tomasz Nowicki <tn@semihalf.com>
-  linaro-acpi@lists.linaro.org
-  linux-acpi@vger.kernel.org
-  robert.richter@caviumnetworks.com
-  helgaas@kernel.org
-  catalin.marinas@arm.com
-  shijie.huang@arm.com
-  jason@lakedaemon.net
-  marc.zyngier@arm.com
-  ddaney.cavm@gmail.com
-  tglx@linutronix.de
-  mw@semihalf.com
-  linux-arm-kernel@lists.infradead.org
-  graeme.gregory@linaro.org
-  rjw@rjwysocki.net
-  linux-kernel@vger.kernel.org
- " hanjun.guo@linaro.org\0"
+ "Cc\0Tomasz Nowicki <tn@semihalf.com>"
+  <marc.zyngier@arm.com>
+  <tglx@linutronix.de>
+  <jason@lakedaemon.net>
+  <rjw@rjwysocki.net>
+  <helgaas@kernel.org>
+  <rafael@kernel.org>
+  <will.deacon@arm.com>
+  <catalin.marinas@arm.com>
+  <hanjun.guo@linaro.org>
+  <shijie.huang@arm.com>
+  <robert.richter@caviumnetworks.com>
+  <mw@semihalf.com>
+  <linux-pci@vger.kernel.org>
+  <linux-arm-kernel@lists.infradead.org>
+  <linaro-acpi@lists.linaro.org>
+  <andrea.gallo@linaro.org>
+  <linux-acpi@vger.kernel.org>
+  <linux-kernel@vger.kernel.org>
+  <al.stone@linaro.org>
+  <graeme.gregory@linaro.org>
+  <ddaney.cavm@gmail.com>
+  <okaya@codeaurora.org>
+ " <nd@arm.com>\0"
  "\00:1\0"
  "b\0"
  "On Thu, Aug 18, 2016 at 12:14:20PM +0100, Lorenzo Pieralisi wrote:\n"
@@ -321,4 +321,4 @@
  "> > > \n"
  >
 
-b887cefa850c83df2e7d00a26aa068b0f87ea2ccf41057b826148c6fd8af16ae
+23c2ab2d70990461b579c950620f5b280e91b60fa42456dbae0007b8d53783c3

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.