2019-01-21 07:44:17

by Wei Yang

[permalink] [raw]
Subject: [PATCH] kernel, resource: use resource_overlaps() to simplify region_intersects()

The three checks in region_intersects() is to see whether two resources
overlap. This means it could be simplified with one resource_overlaps().

Also fix two typo in related function.

Signed-off-by: Wei Yang <[email protected]>
---
kernel/iomem.c | 4 ++--
kernel/resource.c | 11 +++++------
2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/kernel/iomem.c b/kernel/iomem.c
index f7525e14ebc6..93c264444510 100644
--- a/kernel/iomem.c
+++ b/kernel/iomem.c
@@ -55,7 +55,7 @@ static void *try_ram_remap(resource_size_t offset, size_t size,
*
* MEMREMAP_WB - matches the default mapping for System RAM on
* the architecture. This is usually a read-allocate write-back cache.
- * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
+ * Moreover, if MEMREMAP_WB is specified and the requested remap region is RAM
* memremap() will bypass establishing a new mapping and instead return
* a pointer into the direct map.
*
@@ -86,7 +86,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
/* Try all mapping types requested until one returns non-NULL */
if (flags & MEMREMAP_WB) {
/*
- * MEMREMAP_WB is special in that it can be satisifed
+ * MEMREMAP_WB is special in that it can be satisfied
* from the direct map. Some archs depend on the
* capability of memremap() to autodetect cases where
* the requested range is potentially in System RAM.
diff --git a/kernel/resource.c b/kernel/resource.c
index b0fbf685c77a..34dfb94305bb 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -521,21 +521,20 @@ EXPORT_SYMBOL_GPL(page_is_ram);
int region_intersects(resource_size_t start, size_t size, unsigned long flags,
unsigned long desc)
{
- resource_size_t end = start + size - 1;
+ struct resource res;
int type = 0; int other = 0;
struct resource *p;

+ res.start = start;
+ res.end = start + size - 1;
+
read_lock(&resource_lock);
for (p = iomem_resource.child; p ; p = p->sibling) {
bool is_type = (((p->flags & flags) == flags) &&
((desc == IORES_DESC_NONE) ||
(desc == p->desc)));

- if (start >= p->start && start <= p->end)
- is_type ? type++ : other++;
- if (end >= p->start && end <= p->end)
- is_type ? type++ : other++;
- if (p->start >= start && p->end <= end)
+ if (resource_overlaps(p, &res))
is_type ? type++ : other++;
}
read_unlock(&resource_lock);
--
2.19.1



2019-02-12 00:15:04

by Wei Yang

[permalink] [raw]
Subject: Re: [PATCH] kernel, resource: use resource_overlaps() to simplify region_intersects()

On Mon, Jan 21, 2019 at 09:20:28AM +0800, Wei Yang wrote:
>The three checks in region_intersects() is to see whether two resources
>overlap. This means it could be simplified with one resource_overlaps().
>
>Also fix two typo in related function.
>
>Signed-off-by: Wei Yang <[email protected]>

Hello~

Would someone like to take a look?

>---
> kernel/iomem.c | 4 ++--
> kernel/resource.c | 11 +++++------
> 2 files changed, 7 insertions(+), 8 deletions(-)
>
>diff --git a/kernel/iomem.c b/kernel/iomem.c
>index f7525e14ebc6..93c264444510 100644
>--- a/kernel/iomem.c
>+++ b/kernel/iomem.c
>@@ -55,7 +55,7 @@ static void *try_ram_remap(resource_size_t offset, size_t size,
> *
> * MEMREMAP_WB - matches the default mapping for System RAM on
> * the architecture. This is usually a read-allocate write-back cache.
>- * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
>+ * Moreover, if MEMREMAP_WB is specified and the requested remap region is RAM
> * memremap() will bypass establishing a new mapping and instead return
> * a pointer into the direct map.
> *
>@@ -86,7 +86,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
> /* Try all mapping types requested until one returns non-NULL */
> if (flags & MEMREMAP_WB) {
> /*
>- * MEMREMAP_WB is special in that it can be satisifed
>+ * MEMREMAP_WB is special in that it can be satisfied
> * from the direct map. Some archs depend on the
> * capability of memremap() to autodetect cases where
> * the requested range is potentially in System RAM.
>diff --git a/kernel/resource.c b/kernel/resource.c
>index b0fbf685c77a..34dfb94305bb 100644
>--- a/kernel/resource.c
>+++ b/kernel/resource.c
>@@ -521,21 +521,20 @@ EXPORT_SYMBOL_GPL(page_is_ram);
> int region_intersects(resource_size_t start, size_t size, unsigned long flags,
> unsigned long desc)
> {
>- resource_size_t end = start + size - 1;
>+ struct resource res;
> int type = 0; int other = 0;
> struct resource *p;
>
>+ res.start = start;
>+ res.end = start + size - 1;
>+
> read_lock(&resource_lock);
> for (p = iomem_resource.child; p ; p = p->sibling) {
> bool is_type = (((p->flags & flags) == flags) &&
> ((desc == IORES_DESC_NONE) ||
> (desc == p->desc)));
>
>- if (start >= p->start && start <= p->end)
>- is_type ? type++ : other++;
>- if (end >= p->start && end <= p->end)
>- is_type ? type++ : other++;
>- if (p->start >= start && p->end <= end)
>+ if (resource_overlaps(p, &res))
> is_type ? type++ : other++;
> }
> read_unlock(&resource_lock);
>--
>2.19.1

--
Wei Yang
Help you, Help me

2019-02-19 03:25:06

by Yuan Yao

[permalink] [raw]
Subject: Re: [PATCH] kernel, resource: use resource_overlaps() to simplify region_intersects()

Looks good to me.

Reviewed-by: Yuan Yao <[email protected]>


On Mon, Jan 21, 2019 at 09:20:28AM +0800, Wei Yang wrote:
> The three checks in region_intersects() is to see whether two resources
> overlap. This means it could be simplified with one resource_overlaps().
>
> Also fix two typo in related function.
>
> Signed-off-by: Wei Yang <[email protected]>
> ---
> kernel/iomem.c | 4 ++--
> kernel/resource.c | 11 +++++------
> 2 files changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/kernel/iomem.c b/kernel/iomem.c
> index f7525e14ebc6..93c264444510 100644
> --- a/kernel/iomem.c
> +++ b/kernel/iomem.c
> @@ -55,7 +55,7 @@ static void *try_ram_remap(resource_size_t offset, size_t size,
> *
> * MEMREMAP_WB - matches the default mapping for System RAM on
> * the architecture. This is usually a read-allocate write-back cache.
> - * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
> + * Moreover, if MEMREMAP_WB is specified and the requested remap region is RAM
> * memremap() will bypass establishing a new mapping and instead return
> * a pointer into the direct map.
> *
> @@ -86,7 +86,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
> /* Try all mapping types requested until one returns non-NULL */
> if (flags & MEMREMAP_WB) {
> /*
> - * MEMREMAP_WB is special in that it can be satisifed
> + * MEMREMAP_WB is special in that it can be satisfied
> * from the direct map. Some archs depend on the
> * capability of memremap() to autodetect cases where
> * the requested range is potentially in System RAM.
> diff --git a/kernel/resource.c b/kernel/resource.c
> index b0fbf685c77a..34dfb94305bb 100644
> --- a/kernel/resource.c
> +++ b/kernel/resource.c
> @@ -521,21 +521,20 @@ EXPORT_SYMBOL_GPL(page_is_ram);
> int region_intersects(resource_size_t start, size_t size, unsigned long flags,
> unsigned long desc)
> {
> - resource_size_t end = start + size - 1;
> + struct resource res;
> int type = 0; int other = 0;
> struct resource *p;
>
> + res.start = start;
> + res.end = start + size - 1;
> +
> read_lock(&resource_lock);
> for (p = iomem_resource.child; p ; p = p->sibling) {
> bool is_type = (((p->flags & flags) == flags) &&
> ((desc == IORES_DESC_NONE) ||
> (desc == p->desc)));
>
> - if (start >= p->start && start <= p->end)
> - is_type ? type++ : other++;
> - if (end >= p->start && end <= p->end)
> - is_type ? type++ : other++;
> - if (p->start >= start && p->end <= end)
> + if (resource_overlaps(p, &res))
> is_type ? type++ : other++;
> }
> read_unlock(&resource_lock);
> --
> 2.19.1

2019-03-05 05:47:33

by Like Xu

[permalink] [raw]
Subject: Re: [PATCH] kernel, resource: use resource_overlaps() to simplify region_intersects()

On 2019/2/12 8:13, Wei Yang wrote:
> On Mon, Jan 21, 2019 at 09:20:28AM +0800, Wei Yang wrote:
>> The three checks in region_intersects() is to see whether two resources
>> overlap. This means it could be simplified with one resource_overlaps().
>>
>> Also fix two typo in related function.
>>
>> Signed-off-by: Wei Yang <[email protected]>
>
> Hello~
>
> Would someone like to take a look?

No semantic change and it looks good to me.

Reviewed-by: Like Xu <[email protected]>

You may use scripts/get_maintainer.pl to cc more maintainers.

>
>> ---
>> kernel/iomem.c | 4 ++--
>> kernel/resource.c | 11 +++++------
>> 2 files changed, 7 insertions(+), 8 deletions(-)
>>
>> diff --git a/kernel/iomem.c b/kernel/iomem.c
>> index f7525e14ebc6..93c264444510 100644
>> --- a/kernel/iomem.c
>> +++ b/kernel/iomem.c
>> @@ -55,7 +55,7 @@ static void *try_ram_remap(resource_size_t offset, size_t size,
>> *
>> * MEMREMAP_WB - matches the default mapping for System RAM on
>> * the architecture. This is usually a read-allocate write-back cache.
>> - * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
>> + * Moreover, if MEMREMAP_WB is specified and the requested remap region is RAM
>> * memremap() will bypass establishing a new mapping and instead return
>> * a pointer into the direct map.
>> *
>> @@ -86,7 +86,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
>> /* Try all mapping types requested until one returns non-NULL */
>> if (flags & MEMREMAP_WB) {
>> /*
>> - * MEMREMAP_WB is special in that it can be satisifed
>> + * MEMREMAP_WB is special in that it can be satisfied
>> * from the direct map. Some archs depend on the
>> * capability of memremap() to autodetect cases where
>> * the requested range is potentially in System RAM.
>> diff --git a/kernel/resource.c b/kernel/resource.c
>> index b0fbf685c77a..34dfb94305bb 100644
>> --- a/kernel/resource.c
>> +++ b/kernel/resource.c
>> @@ -521,21 +521,20 @@ EXPORT_SYMBOL_GPL(page_is_ram);
>> int region_intersects(resource_size_t start, size_t size, unsigned long flags,
>> unsigned long desc)
>> {
>> - resource_size_t end = start + size - 1;
>> + struct resource res;
>> int type = 0; int other = 0;
>> struct resource *p;
>>
>> + res.start = start;
>> + res.end = start + size - 1;
>> +
>> read_lock(&resource_lock);
>> for (p = iomem_resource.child; p ; p = p->sibling) {
>> bool is_type = (((p->flags & flags) == flags) &&
>> ((desc == IORES_DESC_NONE) ||
>> (desc == p->desc)));
>>
>> - if (start >= p->start && start <= p->end)
>> - is_type ? type++ : other++;
>> - if (end >= p->start && end <= p->end)
>> - is_type ? type++ : other++;
>> - if (p->start >= start && p->end <= end)
>> + if (resource_overlaps(p, &res))
>> is_type ? type++ : other++;
>> }
>> read_unlock(&resource_lock);
>> --
>> 2.19.1
>


2019-03-05 05:51:19

by Wei Yang

[permalink] [raw]
Subject: Re: [PATCH] kernel, resource: use resource_overlaps() to simplify region_intersects()

On Tue, Mar 05, 2019 at 01:45:31PM +0800, Like Xu wrote:
>On 2019/2/12 8:13, Wei Yang wrote:
>> On Mon, Jan 21, 2019 at 09:20:28AM +0800, Wei Yang wrote:
>> > The three checks in region_intersects() is to see whether two resources
>> > overlap. This means it could be simplified with one resource_overlaps().
>> >
>> > Also fix two typo in related function.
>> >
>> > Signed-off-by: Wei Yang <[email protected]>
>>
>> Hello~
>>
>> Would someone like to take a look?
>
>No semantic change and it looks good to me.
>
>Reviewed-by: Like Xu <[email protected]>
>
>You may use scripts/get_maintainer.pl to cc more maintainers.
>

Yep, thanks for your suggestion :-)

>>
>> > ---
>> > kernel/iomem.c | 4 ++--
>> > kernel/resource.c | 11 +++++------
>> > 2 files changed, 7 insertions(+), 8 deletions(-)
>> >
>> > diff --git a/kernel/iomem.c b/kernel/iomem.c
>> > index f7525e14ebc6..93c264444510 100644
>> > --- a/kernel/iomem.c
>> > +++ b/kernel/iomem.c
>> > @@ -55,7 +55,7 @@ static void *try_ram_remap(resource_size_t offset, size_t size,
>> > *
>> > * MEMREMAP_WB - matches the default mapping for System RAM on
>> > * the architecture. This is usually a read-allocate write-back cache.
>> > - * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
>> > + * Moreover, if MEMREMAP_WB is specified and the requested remap region is RAM
>> > * memremap() will bypass establishing a new mapping and instead return
>> > * a pointer into the direct map.
>> > *
>> > @@ -86,7 +86,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
>> > /* Try all mapping types requested until one returns non-NULL */
>> > if (flags & MEMREMAP_WB) {
>> > /*
>> > - * MEMREMAP_WB is special in that it can be satisifed
>> > + * MEMREMAP_WB is special in that it can be satisfied
>> > * from the direct map. Some archs depend on the
>> > * capability of memremap() to autodetect cases where
>> > * the requested range is potentially in System RAM.
>> > diff --git a/kernel/resource.c b/kernel/resource.c
>> > index b0fbf685c77a..34dfb94305bb 100644
>> > --- a/kernel/resource.c
>> > +++ b/kernel/resource.c
>> > @@ -521,21 +521,20 @@ EXPORT_SYMBOL_GPL(page_is_ram);
>> > int region_intersects(resource_size_t start, size_t size, unsigned long flags,
>> > unsigned long desc)
>> > {
>> > - resource_size_t end = start + size - 1;
>> > + struct resource res;
>> > int type = 0; int other = 0;
>> > struct resource *p;
>> >
>> > + res.start = start;
>> > + res.end = start + size - 1;
>> > +
>> > read_lock(&resource_lock);
>> > for (p = iomem_resource.child; p ; p = p->sibling) {
>> > bool is_type = (((p->flags & flags) == flags) &&
>> > ((desc == IORES_DESC_NONE) ||
>> > (desc == p->desc)));
>> >
>> > - if (start >= p->start && start <= p->end)
>> > - is_type ? type++ : other++;
>> > - if (end >= p->start && end <= p->end)
>> > - is_type ? type++ : other++;
>> > - if (p->start >= start && p->end <= end)
>> > + if (resource_overlaps(p, &res))
>> > is_type ? type++ : other++;
>> > }
>> > read_unlock(&resource_lock);
>> > --
>> > 2.19.1
>>

--
Wei Yang
Help you, Help me