Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1367077 > unrolled thread

[PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

Started byHe Kuang <hekuang@huawei.com>
First post2016-03-30 12:30 +0200
Last post2016-03-31 03:50 +0200
Articles 7 — 5 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE" He Kuang <hekuang@huawei.com> - 2016-03-30 12:30 +0200
    Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Mel Gorman <mgorman@techsingularity.net> - 2016-03-30 12:40 +0200
      Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Hekuang <hekuang@huawei.com> - 2016-03-30 13:00 +0200
        Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Michal Hocko <mhocko@kernel.org> - 2016-03-30 13:20 +0200
          Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Hekuang <hekuang@huawei.com> - 2016-03-31 03:20 +0200
            Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Hekuang <hekuang@huawei.com> - 2016-03-31 03:50 +0200
            Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with  ACCESS_ONCE" Zefan Li <lizefan@huawei.com> - 2016-03-31 03:50 +0200

#1367077 — [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromHe Kuang <hekuang@huawei.com>
Date2016-03-30 12:30 +0200
Subject[PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rilxT-3RR-9@gated-at.bofh.it>
This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.

When local irq is disabled, a percpu variable does not change, so we can
remove the access macros and let the compiler optimize the code safely.

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 mm/page_alloc.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 59de90d..4575b82 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2015,11 +2015,10 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
 void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
 {
 	unsigned long flags;
-	int to_drain, batch;
+	int to_drain;
 
 	local_irq_save(flags);
-	batch = READ_ONCE(pcp->batch);
-	to_drain = min(pcp->count, batch);
+	to_drain = min(pcp->count, pcp->batch);
 	if (to_drain > 0) {
 		free_pcppages_bulk(zone, to_drain, pcp);
 		pcp->count -= to_drain;
@@ -2217,9 +2216,8 @@ void free_hot_cold_page(struct page *page, bool cold)
 		list_add_tail(&page->lru, &pcp->lists[migratetype]);
 	pcp->count++;
 	if (pcp->count >= pcp->high) {
-		unsigned long batch = READ_ONCE(pcp->batch);
-		free_pcppages_bulk(zone, batch, pcp);
-		pcp->count -= batch;
+		free_pcppages_bulk(zone, pcp->batch, pcp);
+		pcp->count -= pcp->batch;
 	}
 
 out:
-- 
1.8.5.2

[toc] | [next] | [standalone]


#1367082 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromMel Gorman <mgorman@techsingularity.net>
Date2016-03-30 12:40 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rilHA-3WZ-17@gated-at.bofh.it>
In reply to#1367077
On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
> This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
> 
> When local irq is disabled, a percpu variable does not change, so we can
> remove the access macros and let the compiler optimize the code safely.
> 

batch can be changed from other contexts. Why is this safe?

-- 
Mel Gorman
SUSE Labs

[toc] | [prev] | [next] | [standalone]


#1367095 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromHekuang <hekuang@huawei.com>
Date2016-03-30 13:00 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rim0W-44B-9@gated-at.bofh.it>
In reply to#1367082
hi

在 2016/3/30 18:38, Mel Gorman 写道:
> On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
>> This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
>>
>> When local irq is disabled, a percpu variable does not change, so we can
>> remove the access macros and let the compiler optimize the code safely.
>>
> batch can be changed from other contexts. Why is this safe?
>
I've mistakenly thought that per_cpu variable can only be accessed by 
that cpu.
Thanks.

[toc] | [prev] | [next] | [standalone]


#1367110 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromMichal Hocko <mhocko@kernel.org>
Date2016-03-30 13:20 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rimkh-4wo-11@gated-at.bofh.it>
In reply to#1367095
On Wed 30-03-16 18:51:12, Hekuang wrote:
> hi
> 
> 在 2016/3/30 18:38, Mel Gorman 写道:
> >On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
> >>This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
> >>
> >>When local irq is disabled, a percpu variable does not change, so we can
> >>remove the access macros and let the compiler optimize the code safely.
> >>
> >batch can be changed from other contexts. Why is this safe?
> >
> I've mistakenly thought that per_cpu variable can only be accessed by that
> cpu.

git blame would point you to 998d39cb236f ("mm/page_alloc: protect
pcp->batch accesses with ACCESS_ONCE"). I haven't looked into the code
deeply to confirm this is still the case but it would be a good lead
that this is not that simple. ACCESS_ONCE resp. {READ,WRITE}_ONCE are
usually quite subtle so I would encourage you or anybody else who try to
remove them to study the code and the history deeper before removing
them.

-- 
Michal Hocko
SUSE Labs

[toc] | [prev] | [next] | [standalone]


#1367731 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromHekuang <hekuang@huawei.com>
Date2016-03-31 03:20 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rizrc-5wZ-1@gated-at.bofh.it>
In reply to#1367110
Hi

在 2016/3/30 19:10, Michal Hocko 写道:
> On Wed 30-03-16 18:51:12, Hekuang wrote:
>> hi
>>
>> 在 2016/3/30 18:38, Mel Gorman 写道:
>>> On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
>>>> This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
>>>>
>>>> When local irq is disabled, a percpu variable does not change, so we can
>>>> remove the access macros and let the compiler optimize the code safely.
>>>>
>>> batch can be changed from other contexts. Why is this safe?
>>>
>> I've mistakenly thought that per_cpu variable can only be accessed by that
>> cpu.
> git blame would point you to 998d39cb236f ("mm/page_alloc: protect
> pcp->batch accesses with ACCESS_ONCE"). I haven't looked into the code
> deeply to confirm this is still the case but it would be a good lead
> that this is not that simple. ACCESS_ONCE resp. {READ,WRITE}_ONCE are
> usually quite subtle so I would encourage you or anybody else who try to
> remove them to study the code and the history deeper before removing
> them.
>
Thank you for responding, I've read that commit and related articles and 
not sending
mail casually, though you may think it's a stupid patch. I'm a beginner 
and I think
sending mails to maillist is a effective way to learn kernel, And, sure 
i'll be more careful and
well prepared next time :)

[toc] | [prev] | [next] | [standalone]


#1367742 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromHekuang <hekuang@huawei.com>
Date2016-03-31 03:50 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rizUe-5Lv-7@gated-at.bofh.it>
In reply to#1367731
hi

在 2016/3/31 9:39, Zefan Li 写道:
> On 2016/3/31 9:14, Hekuang wrote:
>> Hi
>>
>> 在 2016/3/30 19:10, Michal Hocko 写道:
>>> On Wed 30-03-16 18:51:12, Hekuang wrote:
>>>> hi
>>>>
>>>> 在 2016/3/30 18:38, Mel Gorman 写道:
>>>>> On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
>>>>>> This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
>>>>>>
>>>>>> When local irq is disabled, a percpu variable does not change, so we can
>>>>>> remove the access macros and let the compiler optimize the code safely.
>>>>>>
>>>>> batch can be changed from other contexts. Why is this safe?
>>>>>
>>>> I've mistakenly thought that per_cpu variable can only be accessed by that
>>>> cpu.
>>> git blame would point you to 998d39cb236f ("mm/page_alloc: protect
>>> pcp->batch accesses with ACCESS_ONCE"). I haven't looked into the code
>>> deeply to confirm this is still the case but it would be a good lead
>>> that this is not that simple. ACCESS_ONCE resp. {READ,WRITE}_ONCE are
>>> usually quite subtle so I would encourage you or anybody else who try to
>>> remove them to study the code and the history deeper before removing
>>> them.
>>>
>> Thank you for responding, I've read that commit and related articles and not sending
>> mail casually, though you may think it's a stupid patch. I'm a beginner and I think
>> sending mails to maillist is a effective way to learn kernel, And, sure i'll be more careful and
>> well prepared next time :)
>>
> pcp->batch can be changed in a different cpu. You may read percpu_pagelist_fraction_sysctl_handler()
> to see how that can happen.
>
>
OK. got it!

[toc] | [prev] | [next] | [standalone]


#1367743 — Re: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"

FromZefan Li <lizefan@huawei.com>
Date2016-03-31 03:50 +0200
SubjectRe: [PATCH] Revert "mm/page_alloc: protect pcp->batch accesses with ACCESS_ONCE"
Message-ID<rizUe-5Lv-9@gated-at.bofh.it>
In reply to#1367731
On 2016/3/31 9:14, Hekuang wrote:
> Hi
> 
> 在 2016/3/30 19:10, Michal Hocko 写道:
>> On Wed 30-03-16 18:51:12, Hekuang wrote:
>>> hi
>>>
>>> 在 2016/3/30 18:38, Mel Gorman 写道:
>>>> On Wed, Mar 30, 2016 at 10:22:07AM +0000, He Kuang wrote:
>>>>> This reverts commit 998d39cb236fe464af86a3492a24d2f67ee1efc2.
>>>>>
>>>>> When local irq is disabled, a percpu variable does not change, so we can
>>>>> remove the access macros and let the compiler optimize the code safely.
>>>>>
>>>> batch can be changed from other contexts. Why is this safe?
>>>>
>>> I've mistakenly thought that per_cpu variable can only be accessed by that
>>> cpu.
>> git blame would point you to 998d39cb236f ("mm/page_alloc: protect
>> pcp->batch accesses with ACCESS_ONCE"). I haven't looked into the code
>> deeply to confirm this is still the case but it would be a good lead
>> that this is not that simple. ACCESS_ONCE resp. {READ,WRITE}_ONCE are
>> usually quite subtle so I would encourage you or anybody else who try to
>> remove them to study the code and the history deeper before removing
>> them.
>>
> Thank you for responding, I've read that commit and related articles and not sending
> mail casually, though you may think it's a stupid patch. I'm a beginner and I think
> sending mails to maillist is a effective way to learn kernel, And, sure i'll be more careful and
> well prepared next time :)
> 

pcp->batch can be changed in a different cpu. You may read percpu_pagelist_fraction_sysctl_handler()
to see how that can happen.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web