Friday, January 17, 2014

linux.kernel - 26 new messages in 20 topics - digest

linux.kernel
http://groups.google.com/group/linux.kernel?hl=en

linux.kernel@googlegroups.com

Today's topics:

* mmc: sdhci: fix possible scheduling while atomic - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/5220ab2fee9bc8b4?hl=en
* [PATCH] Remove bus dependency for iommu_domain_alloc. - 2 messages, 2
authors
http://groups.google.com/group/linux.kernel/t/ace715b4db0f0ed7?hl=en
* ARM: brcmstb: dts: add a reference DTS for Broadcom 7445 - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/36f5a14904619b3d?hl=en
* mm: Improve documentation of page_order - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/19098c56579a03ea?hl=en
* x86, mm, perf: Allow recursive faults from interrupts - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/3e53decd100762a7?hl=en
* clk: qcom: Fix modular build - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/eddfec167a60f7ee?hl=en
* Atmel updates to atmel_mxt_ts touch controller driver - v6 - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/0c4aaf2acebbd52d?hl=en
* net: rfkill: gpio: add device tree support - 2 messages, 2 authors
http://groups.google.com/group/linux.kernel/t/502551497c79a009?hl=en
* scsi: hpsa resubmit all PCI IDs - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/34d1cd03f676ae3b?hl=en
* Add mm flag to control THP - 2 messages, 1 author
http://groups.google.com/group/linux.kernel/t/eff632e7496a6e85?hl=en
* net_dma: simple removal - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/f63a9d0143e0c240?hl=en
* KVM: SVM: fix NMI window after iret - 2 messages, 2 authors
http://groups.google.com/group/linux.kernel/t/2825e0c4359b20ed?hl=en
* Why is (2 < 2) true? Is it a gcc bug? - 2 messages, 2 authors
http://groups.google.com/group/linux.kernel/t/587453bf46273e70?hl=en
* Bluetooth: remove direct compilation of 6lowpan_iphc.c - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/b90801d1da5dd141?hl=en
* cgroup: make CONFIG_NET_CLS_CGROUP and CONFIG_NETPRIO_CGROUP bool instead of
tristate - 2 messages, 1 author
http://groups.google.com/group/linux.kernel/t/3a3c8584cdd64136?hl=en
* vfio/iommu_type1: Multi-IOMMU domain support - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/ec14a94720cba15e?hl=en
* f2fs: clean checkpatch warnings - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/b78c3ed4b7d93688?hl=en
* Phase out pci_enable_msi_block() - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/7ded004c0804c466?hl=en
* linux-next: Tree for Jan 14 (lowpan, 802.15.4) - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/a5d16a1f0a317f20?hl=en
* dcache: fix d_splice_alias handling of aliases - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/599bb447f08d6704?hl=en

==============================================================================
TOPIC: mmc: sdhci: fix possible scheduling while atomic
http://groups.google.com/group/linux.kernel/t/5220ab2fee9bc8b4?hl=en
==============================================================================

== 1 of 1 ==
Date: Fri, Jan 17 2014 12:10 pm
From: Andrew Bresticker


sdhci_execute_tuning() takes host->lock without disabling interrupts.
Use spin_lock_irq{save,restore} instead so that we avoid taking an
interrupt and scheduling while holding host->lock.

Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
---
drivers/mmc/host/sdhci.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index ec3eb30..84c80e7 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1857,12 +1857,13 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
unsigned long timeout;
int err = 0;
bool requires_tuning_nonuhs = false;
+ unsigned long flags;

host = mmc_priv(mmc);

sdhci_runtime_pm_get(host);
disable_irq(host->irq);
- spin_lock(&host->lock);
+ spin_lock_irqsave(&host->lock, flags);

ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);

@@ -1882,14 +1883,14 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
requires_tuning_nonuhs)
ctrl |= SDHCI_CTRL_EXEC_TUNING;
else {
- spin_unlock(&host->lock);
+ spin_unlock_irqrestore(&host->lock, flags);
enable_irq(host->irq);
sdhci_runtime_pm_put(host);
return 0;
}

if (host->ops->platform_execute_tuning) {
- spin_unlock(&host->lock);
+ spin_unlock_irqrestore(&host->lock, flags);
enable_irq(host->irq);
err = host->ops->platform_execute_tuning(host, opcode);
sdhci_runtime_pm_put(host);
@@ -1963,7 +1964,7 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
host->cmd = NULL;
host->mrq = NULL;

- spin_unlock(&host->lock);
+ spin_unlock_irqrestore(&host->lock, flags);
enable_irq(host->irq);

/* Wait for Buffer Read Ready interrupt */
@@ -1971,7 +1972,7 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
(host->tuning_done == 1),
msecs_to_jiffies(50));
disable_irq(host->irq);
- spin_lock(&host->lock);
+ spin_lock_irqsave(&host->lock, flags);

if (!host->tuning_done) {
pr_info(DRIVER_NAME ": Timeout waiting for "
@@ -2046,7 +2047,7 @@ out:
err = 0;

sdhci_clear_set_irqs(host, SDHCI_INT_DATA_AVAIL, ier);
- spin_unlock(&host->lock);
+ spin_unlock_irqrestore(&host->lock, flags);
enable_irq(host->irq);
sdhci_runtime_pm_put(host);

--
1.8.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/





==============================================================================
TOPIC: [PATCH] Remove bus dependency for iommu_domain_alloc.
http://groups.google.com/group/linux.kernel/t/ace715b4db0f0ed7?hl=en
==============================================================================

== 1 of 2 ==
Date: Fri, Jan 17 2014 12:10 pm
From: Alex Williamson


On Sat, 2014-01-18 at 01:00 +0530, Varun Sethi wrote:
> This patch attempts to remove iommu_domain_alloc function's dependency on the bus type.
> This dependency is quiet restrictive in case of vfio, where it's possible to bind multiple
> iommu groups (from different bus types) to the same iommu domain.
>
> This patch is based on the assumption, that there is a single iommu for all bus types
> on the system.
>
> We maintain a list of bus types (for which iommu ops are registered). In the iommu_domain_alloc
> function we ensure that all bus types correspond to the same set of iommu operations.

Seems like this just kicks the problem down the road a little ways as I
expect the assumption isn't going to last long. I think there's another
way to do this and we can do it entirely from within vfio_iommu_type1.
We have a problem on x86 that the IOMMU driver can be backed by multiple
IOMMU hardware devices. These separate devices are architecturally
allowed to have different properties. The property causing us trouble
is cache coherency. Some hardware devices allow us to use IOMMU_CACHE
as a mapping attribute, others do not. Therefore we cannot use a single
IOMMU domain to optimally handle all devices in a heterogeneous
environment.

I think the solution to this is to have vfio_iommu_type1 transparently
support multiple IOMMU domains. In the implementation of that, it seems
to make sense to move the iommu_domain_alloc() to the point where we
attach a group to the domain. That means we can scan the devices in the
domain to determine the bus. I suppose there is still an assumption
that all the devices in a group are on the same bus, but since the group
is determined by the IOMMU and we already assume only a single IOMMU per
bus, I think we're ok. I spent some time working on a patch to do this,
but it isn't quite finished. I'll try to bandage the rough edges and
send it out as an RFC so you can see what I'm talking about. Thanks,

Alex

> Signed-off-by: Varun Sethi <Varun.Sethi@freescale.com>
> ---
> arch/arm/mm/dma-mapping.c | 2 +-
> drivers/gpu/drm/msm/msm_gpu.c | 2 +-
> drivers/iommu/amd_iommu_v2.c | 2 +-
> drivers/iommu/iommu.c | 32 +++++++++++++++++++++++++++++---
> drivers/media/platform/omap3isp/isp.c | 2 +-
> drivers/remoteproc/remoteproc_core.c | 2 +-
> drivers/vfio/vfio_iommu_type1.c | 2 +-
> include/linux/device.h | 2 ++
> include/linux/iommu.h | 4 ++--
> virt/kvm/iommu.c | 2 +-
> 10 files changed, 40 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index f61a570..0e5a5f5 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -1910,7 +1910,7 @@ arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size,
> mapping->order = order;
> spin_lock_init(&mapping->lock);
>
> - mapping->domain = iommu_domain_alloc(bus);
> + mapping->domain = iommu_domain_alloc();
> if (!mapping->domain)
> goto err3;
>
> diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
> index 4583d61..3e8636e 100644
> --- a/drivers/gpu/drm/msm/msm_gpu.c
> +++ b/drivers/gpu/drm/msm/msm_gpu.c
> @@ -428,7 +428,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
> * and have separate page tables per context. For now, to keep things
> * simple and to get something working, just use a single address space:
> */
> - gpu->iommu = iommu_domain_alloc(&platform_bus_type);
> + gpu->iommu = iommu_domain_alloc();
> if (!gpu->iommu) {
> dev_err(drm->dev, "failed to allocate IOMMU\n");
> ret = -ENOMEM;
> diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
> index 5208828..5c0737b 100644
> --- a/drivers/iommu/amd_iommu_v2.c
> +++ b/drivers/iommu/amd_iommu_v2.c
> @@ -785,7 +785,7 @@ int amd_iommu_init_device(struct pci_dev *pdev, int pasids)
> if (dev_state->states == NULL)
> goto out_free_dev_state;
>
> - dev_state->domain = iommu_domain_alloc(&pci_bus_type);
> + dev_state->domain = iommu_domain_alloc();
> if (dev_state->domain == NULL)
> goto out_free_states;
>
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index e5555fc..799371b 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -35,6 +35,9 @@ static struct kset *iommu_group_kset;
> static struct ida iommu_group_ida;
> static struct mutex iommu_group_mutex;
>
> +static struct list_head bus_list;
> +static struct mutex bus_list_mutex;
> +
> struct iommu_group {
> struct kobject kobj;
> struct kobject *devices_kobj;
> @@ -611,6 +614,10 @@ int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops)
>
> bus->iommu_ops = ops;
>
> + mutex_lock(&bus_list_mutex);
> + list_add(&bus->bus_list, &bus_list);
> + mutex_unlock(&bus_list_mutex);
> +
> /* Do IOMMU specific setup for this bus-type */
> iommu_bus_init(bus, ops);
>
> @@ -647,19 +654,36 @@ void iommu_set_fault_handler(struct iommu_domain *domain,
> }
> EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
>
> -struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
> +struct iommu_domain *iommu_domain_alloc(void)
> {
> struct iommu_domain *domain;
> + struct iommu_ops *ops = NULL;
> + struct bus_type *bus;
> int ret;
>
> - if (bus == NULL || bus->iommu_ops == NULL)
> + /*
> + * Traverse the bus list and verify that same iommu_ops
> + * are registered for all the bus types.
> + */
> + mutex_lock(&bus_list_mutex);
> + list_for_each_entry(bus, &bus_list, bus_list) {
> + if (!bus->iommu_ops || (ops && (bus->iommu_ops != ops))) {
> + mutex_unlock(&bus_list_mutex);
> + return NULL;
> + } else if (!ops) {
> + ops = bus->iommu_ops;
> + }
> + }
> + mutex_unlock(&bus_list_mutex);
> +
> + if (!ops)
> return NULL;
>
> domain = kzalloc(sizeof(*domain), GFP_KERNEL);
> if (!domain)
> return NULL;
>
> - domain->ops = bus->iommu_ops;
> + domain->ops = ops;
>
> ret = domain->ops->domain_init(domain);
> if (ret)
> @@ -924,6 +948,8 @@ static int __init iommu_init(void)
> NULL, kernel_kobj);
> ida_init(&iommu_group_ida);
> mutex_init(&iommu_group_mutex);
> + mutex_init(&bus_list_mutex);
> + INIT_LIST_HEAD(&bus_list);
>
> BUG_ON(!iommu_group_kset);
>
> diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
> index 561bce8..199d18e 100644
> --- a/drivers/media/platform/omap3isp/isp.c
> +++ b/drivers/media/platform/omap3isp/isp.c
> @@ -2248,7 +2248,7 @@ static int isp_probe(struct platform_device *pdev)
> }
> }
>
> - isp->domain = iommu_domain_alloc(pdev->dev.bus);
> + isp->domain = iommu_domain_alloc();
> if (!isp->domain) {
> dev_err(isp->dev, "can't alloc iommu domain\n");
> ret = -ENOMEM;
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index 3cd85a6..bf5e2a4 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -110,7 +110,7 @@ static int rproc_enable_iommu(struct rproc *rproc)
> return 0;
> }
>
> - domain = iommu_domain_alloc(dev->bus);
> + domain = iommu_domain_alloc();
> if (!domain) {
> dev_err(dev, "can't alloc iommu domain\n");
> return -ENOMEM;
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 4fb7a8f..7a9d1e8 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -783,7 +783,7 @@ static void *vfio_iommu_type1_open(unsigned long arg)
> /*
> * Wish we didn't have to know about bus_type here.
> */
> - iommu->domain = iommu_domain_alloc(&pci_bus_type);
> + iommu->domain = iommu_domain_alloc();
> if (!iommu->domain) {
> kfree(iommu);
> return ERR_PTR(-EIO);
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 952b010..a9e23de 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -88,6 +88,7 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
> * @iommu_ops: IOMMU specific operations for this bus, used to attach IOMMU
> * driver implementations to a bus and allow the driver to do
> * bus-specific setup
> + * @bus_list: List of bus types for which iommu operations have been setup
> * @p: The private data of the driver core, only the driver core can
> * touch this.
> * @lock_key: Lock class key for use by the lock validator
> @@ -125,6 +126,7 @@ struct bus_type {
> const struct dev_pm_ops *pm;
>
> struct iommu_ops *iommu_ops;
> + struct list_head bus_list;
>
> struct subsys_private *p;
> struct lock_class_key lock_key;
> diff --git a/include/linux/iommu.h b/include/linux/iommu.h
> index a444c79..dd17bc7 100644
> --- a/include/linux/iommu.h
> +++ b/include/linux/iommu.h
> @@ -141,7 +141,7 @@ struct iommu_ops {
>
> extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
> extern bool iommu_present(struct bus_type *bus);
> -extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
> +extern struct iommu_domain *iommu_domain_alloc(void);
> extern struct iommu_group *iommu_group_get_by_id(int id);
> extern void iommu_domain_free(struct iommu_domain *domain);
> extern int iommu_attach_device(struct iommu_domain *domain,
> @@ -242,7 +242,7 @@ static inline bool iommu_present(struct bus_type *bus)
> return false;
> }
>
> -static inline struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
> +static inline struct iommu_domain *iommu_domain_alloc(void)
> {
> return NULL;
> }
> diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c
> index 0df7d4b..8018ccc 100644
> --- a/virt/kvm/iommu.c
> +++ b/virt/kvm/iommu.c
> @@ -238,7 +238,7 @@ int kvm_iommu_map_guest(struct kvm *kvm)
>
> mutex_lock(&kvm->slots_lock);
>
> - kvm->arch.iommu_domain = iommu_domain_alloc(&pci_bus_type);
> + kvm->arch.iommu_domain = iommu_domain_alloc();
> if (!kvm->arch.iommu_domain) {
> r = -ENOMEM;
> goto out_unlock;



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/




== 2 of 2 ==
Date: Fri, Jan 17 2014 12:30 pm
From: Varun Sethi


DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQWxleCBXaWxsaWFtc29u
IFttYWlsdG86YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFNhdHVyZGF5LCBK
YW51YXJ5IDE4LCAyMDE0IDE6MzkgQU0NCj4gVG86IFNldGhpIFZhcnVuLUIxNjM5NQ0KPiBDYzog
am9yb0A4Ynl0ZXMub3JnOyBpb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZzsgbGludXgt
DQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtSRkNdW1BBVENIXSBS
ZW1vdmUgYnVzIGRlcGVuZGVuY3kgZm9yIGlvbW11X2RvbWFpbl9hbGxvYy4NCj4gDQo+IE9uIFNh
dCwgMjAxNC0wMS0xOCBhdCAwMTowMCArMDUzMCwgVmFydW4gU2V0aGkgd3JvdGU6DQo+ID4gVGhp
cyBwYXRjaCBhdHRlbXB0cyB0byByZW1vdmUgaW9tbXVfZG9tYWluX2FsbG9jIGZ1bmN0aW9uJ3Mg
ZGVwZW5kZW5jeQ0KPiBvbiB0aGUgYnVzIHR5cGUuDQo+ID4gVGhpcyBkZXBlbmRlbmN5IGlzIHF1
aWV0IHJlc3RyaWN0aXZlIGluIGNhc2Ugb2YgdmZpbywgd2hlcmUgaXQncw0KPiA+IHBvc3NpYmxl
IHRvIGJpbmQgbXVsdGlwbGUgaW9tbXUgZ3JvdXBzIChmcm9tIGRpZmZlcmVudCBidXMgdHlwZXMp
IHRvDQo+IHRoZSBzYW1lIGlvbW11IGRvbWFpbi4NCj4gPg0KPiA+IFRoaXMgcGF0Y2ggaXMgYmFz
ZWQgb24gdGhlIGFzc3VtcHRpb24sIHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgaW9tbXUNCj4gPiBm
b3IgYWxsIGJ1cyB0eXBlcyBvbiB0aGUgc3lzdGVtLg0KPiA+DQo+ID4gV2UgbWFpbnRhaW4gYSBs
aXN0IG9mIGJ1cyB0eXBlcyAoZm9yIHdoaWNoIGlvbW11IG9wcyBhcmUgcmVnaXN0ZXJlZCkuDQo+
ID4gSW4gdGhlIGlvbW11X2RvbWFpbl9hbGxvYyBmdW5jdGlvbiB3ZSBlbnN1cmUgdGhhdCBhbGwg
YnVzIHR5cGVzDQo+IGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgc2V0IG9mIGlvbW11IG9wZXJhdGlv
bnMuDQo+IA0KPiBTZWVtcyBsaWtlIHRoaXMganVzdCBraWNrcyB0aGUgcHJvYmxlbSBkb3duIHRo
ZSByb2FkIGEgbGl0dGxlIHdheXMgYXMgSQ0KPiBleHBlY3QgdGhlIGFzc3VtcHRpb24gaXNuJ3Qg
Z29pbmcgdG8gbGFzdCBsb25nLiAgSSB0aGluayB0aGVyZSdzIGFub3RoZXINCj4gd2F5IHRvIGRv
IHRoaXMgYW5kIHdlIGNhbiBkbyBpdCBlbnRpcmVseSBmcm9tIHdpdGhpbiB2ZmlvX2lvbW11X3R5
cGUxLg0KPiBXZSBoYXZlIGEgcHJvYmxlbSBvbiB4ODYgdGhhdCB0aGUgSU9NTVUgZHJpdmVyIGNh
biBiZSBiYWNrZWQgYnkgbXVsdGlwbGUNCj4gSU9NTVUgaGFyZHdhcmUgZGV2aWNlcy4gIFRoZXNl
IHNlcGFyYXRlIGRldmljZXMgYXJlIGFyY2hpdGVjdHVyYWxseQ0KPiBhbGxvd2VkIHRvIGhhdmUg
ZGlmZmVyZW50IHByb3BlcnRpZXMuICBUaGUgcHJvcGVydHkgY2F1c2luZyB1cyB0cm91YmxlIGlz
DQo+IGNhY2hlIGNvaGVyZW5jeS4gIFNvbWUgaGFyZHdhcmUgZGV2aWNlcyBhbGxvdyB1cyB0byB1
c2UgSU9NTVVfQ0FDSEUgYXMgYQ0KPiBtYXBwaW5nIGF0dHJpYnV0ZSwgb3RoZXJzIGRvIG5vdC4g
IFRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlIGEgc2luZ2xlIElPTU1VDQo+IGRvbWFpbiB0byBvcHRp
bWFsbHkgaGFuZGxlIGFsbCBkZXZpY2VzIGluIGEgaGV0ZXJvZ2VuZW91cyBlbnZpcm9ubWVudC4N
Cj4gDQo+IEkgdGhpbmsgdGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8gaGF2ZSB2ZmlvX2lvbW11
X3R5cGUxIHRyYW5zcGFyZW50bHkNCj4gc3VwcG9ydCBtdWx0aXBsZSBJT01NVSBkb21haW5zLiAg
SW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQsIGl0IHNlZW1zDQo+IHRvIG1ha2Ugc2Vuc2Ug
dG8gbW92ZSB0aGUgaW9tbXVfZG9tYWluX2FsbG9jKCkgdG8gdGhlIHBvaW50IHdoZXJlIHdlDQo+
IGF0dGFjaCBhIGdyb3VwIHRvIHRoZSBkb21haW4uICBUaGF0IG1lYW5zIHdlIGNhbiBzY2FuIHRo
ZSBkZXZpY2VzIGluIHRoZQ0KW1NldGhpIFZhcnVuLUIxNjM5NV0gTXVsdGlwbGUgaW9tbXUgZ3Jv
dXBzIGNhbiBhbHNvIHNoYXJlIHRoZSBzYW1lIGRvbWFpbiAoYXMgYSBwYXJ0DQpPZiB0aGUgc2Ft
ZSBWRklPIGNvbnRhaW5lcikuIEkgYW0gbm90IHN1cmUgaG93IGNhbiB3ZSBoYW5kbGUgdGhlIGNh
c2Ugb2YgaW9tbXUgZ3JvdXBzIGZyb20NCkRpZmZlcmVudCBidXMgdHlwZXMgaW4gdmZpby4NCg0K
LVZhcnVuDQoNCj4gZG9tYWluIHRvIGRldGVybWluZSB0aGUgYnVzLiAgSSBzdXBwb3NlIHRoZXJl
IGlzIHN0aWxsIGFuIGFzc3VtcHRpb24gdGhhdA0KPiBhbGwgdGhlIGRldmljZXMgaW4gYSBncm91
cCBhcmUgb24gdGhlIHNhbWUgYnVzLCBidXQgc2luY2UgdGhlIGdyb3VwIGlzDQo+IGRldGVybWlu
ZWQgYnkgdGhlIElPTU1VIGFuZCB3ZSBhbHJlYWR5IGFzc3VtZSBvbmx5IGEgc2luZ2xlIElPTU1V
IHBlcg0KPiBidXMsIEkgdGhpbmsgd2UncmUgb2suICBJIHNwZW50IHNvbWUgdGltZSB3b3JraW5n
IG9uIGEgcGF0Y2ggdG8gZG8gdGhpcywNCj4gYnV0IGl0IGlzbid0IHF1aXRlIGZpbmlzaGVkLiAg
SSdsbCB0cnkgdG8gYmFuZGFnZSB0aGUgcm91Z2ggZWRnZXMgYW5kDQo+IHNlbmQgaXQgb3V0IGFz
IGFuIFJGQyBzbyB5b3UgY2FuIHNlZSB3aGF0IEknbSB0YWxraW5nIGFib3V0LiAgVGhhbmtzLA0K
PiANCj4gQWxleA0KPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBWYXJ1biBTZXRoaSA8VmFydW4uU2V0
aGlAZnJlZXNjYWxlLmNvbT4NCj4gPiAtLS0NCj4gPiAgYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcu
YyAgICAgICAgICAgICB8ICAgIDIgKy0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1
LmMgICAgICAgICB8ICAgIDIgKy0NCj4gPiAgZHJpdmVycy9pb21tdS9hbWRfaW9tbXVfdjIuYyAg
ICAgICAgICB8ICAgIDIgKy0NCj4gPiAgZHJpdmVycy9pb21tdS9pb21tdS5jICAgICAgICAgICAg
ICAgICB8ICAgMzINCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0NCj4gPiAgZHJp
dmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3AuYyB8ICAgIDIgKy0NCj4gPiAgZHJpdmVy
cy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jICB8ICAgIDIgKy0NCj4gPiAgZHJpdmVycy92
ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICB8ICAgIDIgKy0NCj4gPiAgaW5jbHVkZS9saW51
eC9kZXZpY2UuaCAgICAgICAgICAgICAgICB8ICAgIDIgKysNCj4gPiAgaW5jbHVkZS9saW51eC9p
b21tdS5oICAgICAgICAgICAgICAgICB8ICAgIDQgKystLQ0KPiA+ICB2aXJ0L2t2bS9pb21tdS5j
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQ0KPiA+ICAxMCBmaWxlcyBjaGFuZ2VkLCA0
MCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkNCg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/





==============================================================================
TOPIC: ARM: brcmstb: dts: add a reference DTS for Broadcom 7445
http://groups.google.com/group/linux.kernel/t/36f5a14904619b3d?hl=en
==============================================================================

== 1 of 1 ==
Date: Fri, Jan 17 2014 12:10 pm
From: Arnd Bergmann


On Friday 17 January 2014, Marc Carino wrote:
> + serial@f0406b00 {
> + compatible = "ns16550a";
> + reg = <0x00 0xf0406b00 0x00 0x20>;
> + reg-shift = <2>;
> + reg-io-width = <4>;
> + interrupts = <0 75 0x4>;
> + clock-frequency = <0x4d3f640>;
> + };
> +
> + rdb {
> + #address-cells = <1>;
> + #size-cells = <1>;
> + compatible = "simple-bus";
> + ranges = <0 0x00 0xf0000000 0x1000000>;
> +
> + sun_top_ctrl: syscon@404000 {
> + compatible = "brcm,bcm7445-sun-top-ctrl",
> + "syscon";
> + reg = <0x404000 0x51c>;
> + };
> +

Yes, this looks better, but as a minor comment, the serial device above
should really be part of the rdb bus now, since that encompasses the
0xf0000000 device range.

Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/





==============================================================================
TOPIC: mm: Improve documentation of page_order
http://groups.google.com/group/linux.kernel/t/19098c56579a03ea?hl=en
==============================================================================

== 1 of 1 ==
Date: Fri, Jan 17 2014 12:10 pm
From: Mel Gorman


On Fri, Jan 17, 2014 at 10:53:50AM -0800, Laura Abbott wrote:
> On 1/17/2014 6:32 AM, Mel Gorman wrote:
> >Developers occasionally try and optimise PFN scanners by using page_order
> >but miss that in general it requires zone->lock. This has happened twice for
> >compaction.c and rejected both times. This patch clarifies the documentation
> >of page_order and adds a note to compaction.c why page_order is not used.
> >
> >Signed-off-by: Mel Gorman <mgorman@suse.de>
> >---
> > mm/compaction.c | 5 ++++-
> > mm/internal.h | 8 +++++---
> > 2 files changed, 9 insertions(+), 4 deletions(-)
> >
> >diff --git a/mm/compaction.c b/mm/compaction.c
> >index f58bcd0..f91d26b 100644
> >--- a/mm/compaction.c
> >+++ b/mm/compaction.c
> >@@ -522,7 +522,10 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
> > if (!isolation_suitable(cc, page))
> > goto next_pageblock;
> >
> >- /* Skip if free */
> >+ /*
> >+ * Skip if free. page_order cannot be used without zone->lock
> >+ * as nothing prevents parallel allocations or buddy merging.
> >+ */
> > if (PageBuddy(page))
> > continue;
> >
> >diff --git a/mm/internal.h b/mm/internal.h
> >index 684f7aa..09cd8be 100644
> >--- a/mm/internal.h
> >+++ b/mm/internal.h
> >@@ -144,9 +144,11 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
> >

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate