From: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
To: Baoquan He <bhe@redhat.com>
Cc: kexec@lists.infradead.org, kumagai-atsushi@mxc.nes.nec.co.jp,
chaowang@redhat.com
Subject: Re: [PATCH v2] makedumpfile: add parameters to update_cyclic_region
Date: Tue, 26 Nov 2013 17:50:50 +0900 [thread overview]
Message-ID: <529460EA.2080006@jp.fujitsu.com> (raw)
In-Reply-To: <20131126075742.GB22934@dhcp-16-252.nay.redhat.com>
(2013/11/26 16:57), Baoquan He wrote:
> 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.
>
For that, you need to pass a part with the currnet cycle to __exclude_unnecessary_pages(),
not a whole (mmd->pfn_start, mmd->pfn_end). There might be similar part that needs fix,
but sorry I don't have good memory...
int
exclude_unnecessary_pages_cyclic(void)
{
<cut>
if (mmd->pfn_end >= info->cyclic_start_pfn &&
mmd->pfn_start <= info->cyclic_end_pfn) {
if (!__exclude_unnecessary_pages(mmd->mem_map,
mmd->pfn_start, mmd->pfn_end))
return FALSE;
}
For ELF-to-ELF code, unfortunately, I gave up in the middle of source code reading.
At lesst, if I remember correctly, I think the code relied on the current
update_mmap_range() implementation. It might be hard to clean up there in a natural way.
--
Thanks.
HATAYAMA, Daisuke
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2013-11-26 8:51 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-22 12:07 [PATCH] makedumpfile: add a new function update_cyclic_region_without_exclude for partial_bitmap1 setting Baoquan He
2013-11-23 9:29 ` [PATCH v2] makedumpfile: add parameters to update_cyclic_region Baoquan He
2013-11-25 2:31 ` Baoquan He
2013-11-25 4:33 ` HATAYAMA Daisuke
2013-11-26 2:52 ` Baoquan He
2013-11-26 3:12 ` Atsushi Kumagai
2013-11-27 5:37 ` Baoquan He
2013-11-27 7:37 ` HATAYAMA Daisuke
2013-12-02 8:43 ` Baoquan He
2013-11-26 5:50 ` HATAYAMA Daisuke
2013-11-26 7:57 ` Baoquan He
2013-11-26 8:50 ` HATAYAMA Daisuke [this message]
2013-11-26 10:24 ` Baoquan He
2013-11-26 11:59 ` Baoquan He
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=529460EA.2080006@jp.fujitsu.com \
--to=d.hatayama@jp.fujitsu.com \
--cc=bhe@redhat.com \
--cc=chaowang@redhat.com \
--cc=kexec@lists.infradead.org \
--cc=kumagai-atsushi@mxc.nes.nec.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.