Displaying 20 results from an estimated 137 matches for "for_each_populated_zon".
Did you mean:
for_each_populated_zone
2017 Jul 13
1
[PATCH v12 7/8] mm: export symbol of next_zone and first_online_pgdat
On Wed, Jul 12, 2017 at 08:40:20PM +0800, Wei Wang wrote:
> This patch enables for_each_zone()/for_each_populated_zone() to be
> invoked by a kernel module.
... for use by virtio balloon.
> Signed-off-by: Wei Wang <wei.w.wang at intel.com>
balloon seems to only use
+ for_each_populated_zone(zone)
+ for_each_migratetype_order(order, type)
> ---
> mm/mmzone.c | 2 ++
>...
2017 Jul 13
1
[PATCH v12 7/8] mm: export symbol of next_zone and first_online_pgdat
On Wed, Jul 12, 2017 at 08:40:20PM +0800, Wei Wang wrote:
> This patch enables for_each_zone()/for_each_populated_zone() to be
> invoked by a kernel module.
... for use by virtio balloon.
> Signed-off-by: Wei Wang <wei.w.wang at intel.com>
balloon seems to only use
+ for_each_populated_zone(zone)
+ for_each_migratetype_order(order, type)
> ---
> mm/mmzone.c | 2 ++
>...
2017 Aug 08
2
[virtio-dev] Re: [PATCH v13 4/5] mm: support reporting free page blocks
...for each
>> one.
>> Something as simple as
>>
>> for (i = 0; i < MAX_NR_ZONES; i++) {
>> struct zone *zone = &pgdat->node_zones[i];
>>
>> if (!populated_zone(zone))
>> continue;
>
> Can we directly use for_each_populated_zone(zone) here?
>
>
>> spin_lock_irqsave(&zone->lock, flags);
>> for (order = min_order; order < MAX_ORDER; ++order) {
>
>
> This appears to be covered by for_each_migratetype_order(order, mt)
> below.
>
>
>> struct free_area *fr...
2017 Aug 08
2
[virtio-dev] Re: [PATCH v13 4/5] mm: support reporting free page blocks
...for each
>> one.
>> Something as simple as
>>
>> for (i = 0; i < MAX_NR_ZONES; i++) {
>> struct zone *zone = &pgdat->node_zones[i];
>>
>> if (!populated_zone(zone))
>> continue;
>
> Can we directly use for_each_populated_zone(zone) here?
>
>
>> spin_lock_irqsave(&zone->lock, flags);
>> for (order = min_order; order < MAX_ORDER; ++order) {
>
>
> This appears to be covered by for_each_migratetype_order(order, mt)
> below.
>
>
>> struct free_area *fr...
2018 Jun 16
2
[PATCH v33 1/4] mm: add a function to get free page blocks
...rom process context only.
> +uint32_t get_from_free_page_list(int order, __le64 buf[], uint32_t size)
> +{
> + struct zone *zone;
> + enum migratetype mt;
> + struct page *page;
> + struct list_head *list;
> + unsigned long addr, flags;
> + uint32_t index = 0;
> +
> + for_each_populated_zone(zone) {
> + spin_lock_irqsave(&zone->lock, flags);
> + for (mt = 0; mt < MIGRATE_TYPES; mt++) {
> + list = &zone->free_area[order].free_list[mt];
> + list_for_each_entry(page, list, lru) {
> + addr = page_to_pfn(page) << PAGE_SHIFT;
> + if (like...
2017 Aug 03
4
[PATCH v13 4/5] mm: support reporting free page blocks
...wants this per node then it would be trivial to extend I was
just wondering whether this is a deliberate decision or an omission.
> +{
> + struct zone *zone = NULL;
> + struct page *page = NULL;
> + unsigned int order;
> + unsigned long pfn, nr_pages;
> + int type;
> +
> + for_each_populated_zone(zone) {
> + for_each_migratetype_order_decend(min_order, order, type) {
> + while (!report_free_page_block(zone, order, type,
> + &page)) {
> + pfn = page_to_pfn(page);
> + nr_pages = 1 << order;
> + visit(opaque1, pfn, nr_pages);
> + }
>...
2017 Aug 03
4
[PATCH v13 4/5] mm: support reporting free page blocks
...wants this per node then it would be trivial to extend I was
just wondering whether this is a deliberate decision or an omission.
> +{
> + struct zone *zone = NULL;
> + struct page *page = NULL;
> + unsigned int order;
> + unsigned long pfn, nr_pages;
> + int type;
> +
> + for_each_populated_zone(zone) {
> + for_each_migratetype_order_decend(min_order, order, type) {
> + while (!report_free_page_block(zone, order, type,
> + &page)) {
> + pfn = page_to_pfn(page);
> + nr_pages = 1 << order;
> + visit(opaque1, pfn, nr_pages);
> + }
>...
2017 Jun 12
1
[PATCH v11 6/6] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ
On 06/09/2017 03:41 AM, Wei Wang wrote:
> + for_each_populated_zone(zone) {
> + for (order = MAX_ORDER - 1; order > 0; order--) {
> + for (migratetype = 0; migratetype < MIGRATE_TYPES;
> + migratetype++) {
> + do {
> + ret = report_unused_page_block(zone,
> + order, migratetype, &page);
> + if (!ret) {
>...
2017 Aug 08
0
[PATCH v13 4/5] mm: support reporting free page blocks
...simply
> walk free lists of the suitable order and call the callback for each one.
> Something as simple as
>
> for (i = 0; i < MAX_NR_ZONES; i++) {
> struct zone *zone = &pgdat->node_zones[i];
>
> if (!populated_zone(zone))
> continue;
Can we directly use for_each_populated_zone(zone) here?
> spin_lock_irqsave(&zone->lock, flags);
> for (order = min_order; order < MAX_ORDER; ++order) {
This appears to be covered by for_each_migratetype_order(order, mt) below.
> struct free_area *free_area = &zone->free_area[order];
> enum migra...
2017 Jun 12
1
[PATCH v11 6/6] virtio-balloon: VIRTIO_BALLOON_F_CMD_VQ
On 06/09/2017 03:41 AM, Wei Wang wrote:
> + for_each_populated_zone(zone) {
> + for (order = MAX_ORDER - 1; order > 0; order--) {
> + for (migratetype = 0; migratetype < MIGRATE_TYPES;
> + migratetype++) {
> + do {
> + ret = report_unused_page_block(zone,
> + order, migratetype, &page);
> + if (!ret) {
>...
2017 Jul 26
1
[PATCH v12 6/8] mm: support reporting free page blocks
...Wei Wang wrote:
[...]
> I thought about it more. Probably we can use the callback function with a
> little change like this:
>
> void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned long
> pfn,
> unsigned long nr_pages))
> {
> ...
> for_each_populated_zone(zone) {
> for_each_migratetype_order(order, type) {
> report_unused_page_block(zone, order, type, &page);
> // from patch 6
> pfn = page_to_pfn(page);
> visit(opaque1, pfn, 1 << orde...
2017 Jul 26
1
[PATCH v12 6/8] mm: support reporting free page blocks
...Wei Wang wrote:
[...]
> I thought about it more. Probably we can use the callback function with a
> little change like this:
>
> void walk_free_mem(void *opaque1, void (*visit)(void *opaque2, unsigned long
> pfn,
> unsigned long nr_pages))
> {
> ...
> for_each_populated_zone(zone) {
> for_each_migratetype_order(order, type) {
> report_unused_page_block(zone, order, type, &page);
> // from patch 6
> pfn = page_to_pfn(page);
> visit(opaque1, pfn, 1 << orde...
2017 Aug 10
1
[virtio-dev] Re: [PATCH v13 4/5] mm: support reporting free page blocks
...le as
>>>>
>>>> for (i = 0; i < MAX_NR_ZONES; i++) {
>>>> struct zone *zone = &pgdat->node_zones[i];
>>>>
>>>> if (!populated_zone(zone))
>>>> continue;
>>> Can we directly use for_each_populated_zone(zone) here?
> yes, my example couldn't because I was still assuming per-node API
>
>>>> spin_lock_irqsave(&zone->lock, flags);
>>>> for (order = min_order; order < MAX_ORDER; ++order) {
>>>
>>> This appears to be covered by for_...
2017 Aug 10
1
[virtio-dev] Re: [PATCH v13 4/5] mm: support reporting free page blocks
...le as
>>>>
>>>> for (i = 0; i < MAX_NR_ZONES; i++) {
>>>> struct zone *zone = &pgdat->node_zones[i];
>>>>
>>>> if (!populated_zone(zone))
>>>> continue;
>>> Can we directly use for_each_populated_zone(zone) here?
> yes, my example couldn't because I was still assuming per-node API
>
>>>> spin_lock_irqsave(&zone->lock, flags);
>>>> for (order = min_order; order < MAX_ORDER; ++order) {
>>>
>>> This appears to be covered by for_...
2017 Mar 16
0
[PATCH kernel v8 3/4] mm: add inerface to offer info about unused pages
...e,
+ unsigned int *offset, bool part_fill)
+{
+ struct zone *zone;
+ int ret = 0;
+ bool skip_check = false;
+
+ /* Make sure all the parameters are valid */
+ if (buf == NULL || offset == NULL || order >= MAX_ORDER)
+ return -EINVAL;
+
+ if (*start_zone != NULL) {
+ bool found = false;
+
+ for_each_populated_zone(zone) {
+ if (zone != *start_zone)
+ continue;
+ found = true;
+ break;
+ }
+ if (!found)
+ return -EINVAL;
+ } else
+ skip_check = true;
+
+ for_each_populated_zone(zone) {
+ /* Start from *start_zone if it's not NULL */
+ if (!skip_check) {
+ if (*start_zone != zone)
+ c...
2017 Aug 03
2
[PATCH v13 4/5] mm: support reporting free page blocks
...prone. Consider that struct page pointer
> >itself could get invalid in the meantime. Please always keep robustness
> >in mind first. Optimizations are nice but it is even not clear whether
> >the simple variant will cause any problems.
>
>
> how about this:
>
> for_each_populated_zone(zone) {
> for_each_migratetype_order_decend(min_order, order, type) {
> do {
> => spin_lock_irqsave(&zone->lock, flags);
> ret = report_free_page_block(zone, order, type,
>...
2017 Aug 03
2
[PATCH v13 4/5] mm: support reporting free page blocks
...prone. Consider that struct page pointer
> >itself could get invalid in the meantime. Please always keep robustness
> >in mind first. Optimizations are nice but it is even not clear whether
> >the simple variant will cause any problems.
>
>
> how about this:
>
> for_each_populated_zone(zone) {
> for_each_migratetype_order_decend(min_order, order, type) {
> do {
> => spin_lock_irqsave(&zone->lock, flags);
> ret = report_free_page_block(zone, order, type,
>...
2017 Apr 13
2
[PATCH v9 5/5] virtio-balloon: VIRTIO_BALLOON_F_MISC_VQ
...truct zone *zone = NULL;
> + struct page *page = NULL;
> + u64 pfn;
> +
> + miscq_out_hdr->cmd = VIRTIO_BALLOON_MISCQ_INQUIRE_UNUSED_PAGES;
Gets endian-ness and whitespace wrong. Pls use static checkers to catch
this type of error.
> + miscq_out_hdr->flags = 0;
> +
> + for_each_populated_zone(zone) {
> + for (order = MAX_ORDER - 1; order > 0; order--) {
> + for (migratetype = 0; migratetype < MIGRATE_TYPES;
> + migratetype++) {
> + do {
> + ret = inquire_unused_page_block(zone,
> + order, migratetype, &page);
> + if (!ret) {
>...
2017 Apr 13
2
[PATCH v9 5/5] virtio-balloon: VIRTIO_BALLOON_F_MISC_VQ
...truct zone *zone = NULL;
> + struct page *page = NULL;
> + u64 pfn;
> +
> + miscq_out_hdr->cmd = VIRTIO_BALLOON_MISCQ_INQUIRE_UNUSED_PAGES;
Gets endian-ness and whitespace wrong. Pls use static checkers to catch
this type of error.
> + miscq_out_hdr->flags = 0;
> +
> + for_each_populated_zone(zone) {
> + for (order = MAX_ORDER - 1; order > 0; order--) {
> + for (migratetype = 0; migratetype < MIGRATE_TYPES;
> + migratetype++) {
> + do {
> + ret = inquire_unused_page_block(zone,
> + order, migratetype, &page);
> + if (!ret) {
>...
2017 Aug 03
2
[PATCH v13 4/5] mm: support reporting free page blocks
On Thu 03-08-17 19:27:19, Wei Wang wrote:
> On 08/03/2017 06:44 PM, Michal Hocko wrote:
> >On Thu 03-08-17 18:42:15, Wei Wang wrote:
> >>On 08/03/2017 05:11 PM, Michal Hocko wrote:
> >>>On Thu 03-08-17 14:38:18, Wei Wang wrote:
> >[...]
> >>>>+static int report_free_page_block(struct zone *zone, unsigned int order,
> >>>>+