All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nico Boehr" <nrb@linux.ibm.com>
To: "Claudio Imbrenda" <imbrenda@linux.ibm.com>, <kvm@vger.kernel.org>
Cc: <frankja@linux.ibm.com>, <borntraeger@de.ibm.com>,
	<thuth@redhat.com>, <david@redhat.com>,
	<schlameuss@linux.ibm.com>, <linux-s390@vger.kernel.org>
Subject: Re: [kvm-unit-tests PATCH v3 3/3] s390x: pv: Add test for large host pages backing
Date: Fri, 20 Dec 2024 16:22:31 +0100	[thread overview]
Message-ID: <D6GMPV211UPF.CC1OSNJYEJ6T@linux.ibm.com> (raw)
In-Reply-To: <20241218135138.51348-4-imbrenda@linux.ibm.com>

On Wed Dec 18, 2024 at 2:51 PM CET, Claudio Imbrenda wrote:
[...]
> diff --git a/lib/s390x/asm/uv.h b/lib/s390x/asm/uv.h
> index 611dcd3f..7527be48 100644
> --- a/lib/s390x/asm/uv.h
> +++ b/lib/s390x/asm/uv.h
[...]
> +static inline int uv_merge(uint64_t handle, unsigned long gaddr)
> +{
> +	struct uv_cb_cts uvcb = {
> +		.header.cmd = UVC_CMD_VERIFY_LARGE_FRAME,
> +		.header.len = sizeof(uvcb),
> +		.guest_handle = handle,
> +		.gaddr = gaddr,
> +	};
> +
> +	return uv_call(0, (uint64_t)&uvcb);
> +}

This function seems unused and uvc_merge() below looks very similar.

[...]

> diff --git a/s390x/pv-edat1.c b/s390x/pv-edat1.c
> new file mode 100644
> index 00000000..3f96c716
> --- /dev/null
> +++ b/s390x/pv-edat1.c
[...]
> +#define FIRST		42
> +#define SECOND		23

It was not obvious to me what these mean. It would be easier for me to
understand if they had some name like GUEST_READ_DONE_GET_PARAM and
SHOULD_EXIT_LOOP (or so) and share the define with the guest or at least have
defines with the same name in the guest (see also below).

[...]
> +static inline void assert_diag500_val(struct vm *vm, uint64_t val)
> +{
> +	assert(pv_icptdata_check_diag(vm, 0x500));
> +	assert(vm->save_area.guest.grs[2] == val);
> +}

I would appreciate it if you could base on Ninas STFLE series and use
snippet_check_force_exit_value() here. See
https://lore.kernel.org/kvm/20240620141700.4124157-6-nsg@linux.ibm.com/
See also below.

[...]
> +static void test_run(void)
> +{
> +	int init1m, import1m, merge, run1m;
> +
> +	report_prefix_push("test run");
> +
> +	for (init1m = 0; init1m < 1; init1m++) {

Are you sure this does what you want it to do?

[...]
> +static void test_merge(void)
> +{
> +	uint64_t tmp, mem;
> +	int cc;
> +
> +	report_prefix_push("merge");
> +	init_snippet(&vm);
> +
> +	mem = guest_start(&vm);
> +
> +	map_identity_all(&vm, false);
> +	install_page(root, mem + 0x101000, (void *)(mem + 0x102000));
> +	install_page(root, mem + 0x102000, (void *)(mem + 0x101000));
> +	install_page(root, mem + 0x205000, (void *)(mem + 0x305000));

(see below)

[...]
> +	/* Not all pages are aligned correctly */
> +	report(uvc_merge(&vm, mem + 0x100000) == 0x104, "Pages not consecutive");
> +	report(uvc_merge(&vm, mem + 0x200000) == 0x104, "Pages not in the same 1M frame");

It would be easier for me to understand if the regions were named, e.g. with a
variable for each region, for example:

uint64_t non_consecutive = mem + 0x100000

and then above

install_page(root, mem + 0x101000, (void *)(non_consecutive + 0x2000));
install_page(root, mem + 0x102000, (void *)(non_consecutive + 0x1000));

[...]
> diff --git a/s390x/snippets/c/pv-memhog.c b/s390x/snippets/c/pv-memhog.c
> new file mode 100644
> index 00000000..43f0c2b1
> --- /dev/null
> +++ b/s390x/snippets/c/pv-memhog.c
> @@ -0,0 +1,59 @@
[...]
> +int main(void)
> +{
> +	uint64_t param, addr, i, n;
> +
> +	READ_ONCE(*MIDPAGE_PTR(SZ_1M + 42 * PAGE_SIZE));
> +	param = get_value(42);

(see below)

> +	n = (param >> 32) & 0x1fffffff;
> +	n = n ? n : N_PAGES;
> +	param &= 0x7fffffff;
> +
> +	while (true) {
> +		for (i = 0; i < n; i++) {
> +			addr = ((param ? i * param : i * i * i) * PAGE_SIZE) & MASK_2G;
> +			WRITE_ONCE(*MIDPAGE_PTR(addr), addr);
> +		}
> +
> +		i = get_value(23);
> +		if (i != 42)

I would like some defines for 23 and 42 and possibly share them with the host.

  reply	other threads:[~2024-12-20 15:22 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-18 13:51 [kvm-unit-tests PATCH v3 0/3] s390x: pv: Add test for large host pages backing Claudio Imbrenda
2024-12-18 13:51 ` [kvm-unit-tests PATCH v3 1/3] lib: s390: add ptlb wrapper Claudio Imbrenda
2024-12-18 13:51 ` [kvm-unit-tests PATCH v3 2/3] lib: s390x: add function to test available UV features Claudio Imbrenda
2024-12-18 13:51 ` [kvm-unit-tests PATCH v3 3/3] s390x: pv: Add test for large host pages backing Claudio Imbrenda
2024-12-20 15:22   ` Nico Boehr [this message]
2024-12-20 15:52     ` Claudio Imbrenda
2025-01-09  9:51       ` Nico Boehr
2024-12-20 15:40   ` Christoph Schlameuss

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=D6GMPV211UPF.CC1OSNJYEJ6T@linux.ibm.com \
    --to=nrb@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=schlameuss@linux.ibm.com \
    --cc=thuth@redhat.com \
    /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.