From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: David Vrabel <david.vrabel@citrix.com>
Cc: Daniel Kiper <daniel.kiper@oracle.com>,
Simon Horman <horms@verge.net.au>,
kexec@lists.infradead.org, xen-devel@lists.xen.org
Subject: Re: [Xen-devel] [PATCH 3/5] kexec/xen: use libxc to get location of crash notes
Date: Mon, 23 Sep 2013 10:05:50 -0400 [thread overview]
Message-ID: <20130923140550.GJ3175@phenom.dumpdata.com> (raw)
In-Reply-To: <1379016042-22510-4-git-send-email-david.vrabel@citrix.com>
On Thu, Sep 12, 2013 at 09:00:40PM +0100, David Vrabel wrote:
> From: David Vrabel <david.vrabel@citrix.com>
>
> Use xc_kexec_get_range(KEXEC_RANGE_MA_CPU) instead of parsing
> /proc/iomem (which is only populated by non-upstream ("classic") Xen
> kernels).
>
> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> ---
> kexec/crashdump-xen.c | 67 +++++++++++++++++++++++++++++-------------------
> 1 files changed, 40 insertions(+), 27 deletions(-)
>
> diff --git a/kexec/crashdump-xen.c b/kexec/crashdump-xen.c
> index ff4706c..4a5cd8a 100644
> --- a/kexec/crashdump-xen.c
> +++ b/kexec/crashdump-xen.c
> @@ -163,42 +163,55 @@ unsigned long xen_architecture(struct crash_elf_info *elf_info)
> return machine;
> }
>
> -static int xen_crash_note_callback(void *UNUSED(data), int nr,
> - char *UNUSED(str),
> - unsigned long base,
> - unsigned long length)
> -{
> - struct crash_note_info *note = xen_phys_notes + nr;
> -
> - note->base = base;
> - note->length = length;
> -
> - return 0;
> -}
> -
> +#ifdef HAVE_LIBXENCTRL
> int xen_get_nr_phys_cpus(void)
> {
> - char *match = "Crash note\n";
> - int cpus, n;
> + xc_interface *xc;
> + int max_cpus;
> + int cpu;
>
> if (xen_phys_cpus)
> return xen_phys_cpus;
>
> - if ((cpus = kexec_iomem_for_each_line(match, NULL, NULL))) {
> - n = sizeof(struct crash_note_info) * cpus;
> - xen_phys_notes = malloc(n);
> - if (!xen_phys_notes) {
> - fprintf(stderr, "failed to allocate xen_phys_notes.\n");
> - return -1;
> - }
> - memset(xen_phys_notes, 0, n);
> - kexec_iomem_for_each_line(match,
> - xen_crash_note_callback, NULL);
> - xen_phys_cpus = cpus;
> + xc = xc_interface_open(NULL, NULL, 0);
> + if (!xc) {
> + fprintf(stderr, "failed to open xen control interface.\n");
> + return -1;
> + }
> +
> + max_cpus = xc_get_max_cpus(xc);
> + if (max_cpus <= 0)
Shouldn't you also call xc_interface_close ?
> + return -1;
> +
> + xen_phys_notes = calloc(max_cpus, sizeof(*xen_phys_notes));
> + if (xen_phys_notes == NULL)
> + return -1;
Ditto - call xc_interface_close?
> +
> + for (cpu = 0; cpu < max_cpus; cpu++) {
> + uint64_t size, start;
> + int ret;
> +
> + ret = xc_kexec_get_range(xc, KEXEC_RANGE_MA_CPU, cpu, &size, &start);
> + if (ret < 0)
> + break;
> +
> + xen_phys_notes[cpu].base = start;
> + xen_phys_notes[cpu].length = size;
> }
>
> - return cpus;
> + xc_interface_close(xc);
> +
> + xen_phys_cpus = cpu;
> +
> + return cpu;
> }
> +#else
> +int xen_get_nr_phys_cpus(void)
> +{
> + return -1;
> +}
> +#endif
> +
>
> int xen_get_note(int cpu, uint64_t *addr, uint64_t *len)
> {
> --
> 1.7.2.5
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2013-09-23 14:06 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-12 20:00 [PATCHv4 0/5] kexec-tools: add support for Xen 4.3 David Vrabel
2013-09-12 20:00 ` [PATCH 1/5] purgatory: put variables altered by kexec in .data not .bss David Vrabel
2013-09-16 12:43 ` Daniel Kiper
2013-09-16 12:48 ` David Vrabel
2013-09-17 1:33 ` Daniel Kiper
2013-09-17 1:33 ` Daniel Kiper
2013-09-17 8:17 ` [Xen-devel] " Tim Deegan
2013-09-17 9:59 ` David Vrabel
2013-09-17 9:59 ` [Xen-devel] " David Vrabel
2013-09-17 10:02 ` David Vrabel
2013-09-17 10:02 ` [Xen-devel] " David Vrabel
2013-09-17 8:17 ` Tim Deegan
2013-09-16 12:48 ` David Vrabel
2013-09-16 12:43 ` Daniel Kiper
2013-09-12 20:00 ` David Vrabel
2013-09-12 20:00 ` [PATCH 2/5] kexec/xen: require libxc from Xen 4.4 David Vrabel
2013-09-12 20:00 ` David Vrabel
2013-09-12 20:00 ` [PATCH 3/5] kexec/xen: use libxc to get location of crash notes David Vrabel
2013-09-23 14:05 ` Konrad Rzeszutek Wilk
2013-09-23 14:05 ` Konrad Rzeszutek Wilk [this message]
2013-09-12 20:00 ` David Vrabel
2013-09-12 20:00 ` [PATCH 4/5] kexec/xen: switch to use xc_kexec_get_range for get_xen_vmcoreinfo David Vrabel
2013-09-12 20:00 ` David Vrabel
2013-09-12 20:00 ` [PATCH 5/5] kexec/xen: directly load images images into Xen David Vrabel
2013-09-12 20:00 ` David Vrabel
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=20130923140550.GJ3175@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=daniel.kiper@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=horms@verge.net.au \
--cc=kexec@lists.infradead.org \
--cc=xen-devel@lists.xen.org \
/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.