[PATCH v2] makedumpfile: add parameters to update_cyclic_region

Baoquan He bhe at redhat.com
Tue Nov 26 02:57:42 EST 2013


On 11/26/13 at 02:50pm, HATAYAMA Daisuke wrote:
> (2013/11/26 11:52), Baoquan He wrote:
> >On 11/25/13 at 01:33pm, HATAYAMA Daisuke wrote:
> >>(2013/11/25 11:31), Baoquan He wrote:

> 
> To be honest, I don't like current implementation of cyclic mode, too,
> in particular part of update_cyclic_range() and is_cyclic_region() doing
> much verbose processing.
> 
> I think update of cycle should appear topmost level only. For example,
> current implementation in write_kdump_pages_and_bitmap_cyclic()is
> 
>         for (pfn = 0; pfn < info->max_mapnr; pfn++) {
>                 if (is_cyclic_region(pfn))
>                         continue;
>                 if (!update_cyclic_region(pfn))
>                         return FALSE;
>                 if (!create_1st_bitmap_cyclic())
>                         return FALSE;
>                 if (!write_kdump_bitmap1_cyclic())
>                         return FALSE;
>         }
> 
> and the implementation like this needs dull sanity check in various
> positions, for example, in:
> 
> int
> set_bitmap_cyclic(char *bitmap, unsigned long long pfn, int val)
> {
>         int byte, bit;
> 
>         if (pfn < info->cyclic_start_pfn || info->cyclic_end_pfn <= pfn)
>                 return FALSE;
> 
> This is due to the implementation above that doesn't satisfy the condition that
> any pfn passed to inner function call always within the range of the current
> cycle.
> 
> Instead, I think it better to change the implementation so the condition
> that all the pfns passed to inner functions always within the range of
> current cycle.
> 
> For example, I locally tried to introduce a kind of for_each_cycle()
> statement. See the following. (please ignore details,
>  please feel
> the atmosphere from the above code.)
> 
> struct cycle {
>   uint64_t start_pfn;
>   uint64_t end_pfn;
> };
> 
> #define for_each_cycle(C, MAX_MAPNR) \
>   for (first_cycle((C), (MAX_MAPNR)); !end_cycle(C); \
>        update_cycle(C))
> 
> for_each_cycle(&cycle, info->max_mapnr) {
>   if (!create_1st_bitmap_cyclic(&cycle))
>     return FALSE;
>   if (!exclude_unnecessary_pages_cyclic(&cycle))
>     return FALSE;
>   if (!write_kdump_bitmap1_cyclic(&cycle))
>     return FALSE;
> }
> 
> where it's my preference that range of the current cycle is explicitly
> passed to inner functions as a variable cycle.
> 
> Anyway, what I'd like to say is: is_cyclic_region(pfn) is unnecessary,
> and the part of updating cycle should be done in a fixed one position
> for code readability.
> 
> BTW, I could successfully clean up the code in this way in kdump-compressed code,
> but I couldn't do that in the code from ELF to ELF... So I have yet to post
> such clean up patch.

This is cool, cleanup like this would make code clearer. Let's wait your
clean up patch, I can help review and test.


> 
> -- 
> Thanks.
> HATAYAMA, Daisuke
> 



More information about the kexec mailing list