search for: for_each_populated_zon

Displaying 20 results from an estimated 137 matches for "for_each_populated_zon".

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, > >>>>+