From: Pierre Morel <pmorel@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: frankja@linux.ibm.com, david@redhat.com, thuth@redhat.com,
cohuck@redhat.com, imbrenda@linux.ibm.com
Subject: [kvm-unit-tests PATCH v6 3/6] s390x: css: extending the subchannel modifying functions
Date: Fri, 12 Mar 2021 11:41:51 +0100 [thread overview]
Message-ID: <1615545714-13747-4-git-send-email-pmorel@linux.ibm.com> (raw)
In-Reply-To: <1615545714-13747-1-git-send-email-pmorel@linux.ibm.com>
To enable or disable measurement we will need specific
modifications on the subchannel.
Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
---
lib/s390x/css.h | 9 +++-
lib/s390x/css_lib.c | 100 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 108 insertions(+), 1 deletion(-)
diff --git a/lib/s390x/css.h b/lib/s390x/css.h
index b9e4c08..7dddb42 100644
--- a/lib/s390x/css.h
+++ b/lib/s390x/css.h
@@ -82,6 +82,8 @@ struct pmcw {
uint32_t intparm;
#define PMCW_DNV 0x0001
#define PMCW_ENABLE 0x0080
+#define PMCW_MBUE 0x0010
+#define PMCW_DCTME 0x0008
#define PMCW_ISC_MASK 0x3800
#define PMCW_ISC_SHIFT 11
uint16_t flags;
@@ -94,6 +96,7 @@ struct pmcw {
uint8_t pom;
uint8_t pam;
uint8_t chpid[8];
+#define PMCW_MBF1 0x0004
uint32_t flags2;
};
#define PMCW_CHANNEL_TYPE(pmcw) (pmcw->flags2 >> 21)
@@ -101,7 +104,8 @@ struct pmcw {
struct schib {
struct pmcw pmcw;
struct scsw scsw;
- uint8_t md[12];
+ uint64_t mbo;
+ uint8_t md[4];
} __attribute__ ((aligned(4)));
struct irb {
@@ -355,4 +359,7 @@ bool chsc(void *p, uint16_t code, uint16_t len);
#define css_test_general_feature(bit) test_bit_inv(bit, chsc_scsc->general_char)
#define css_test_chsc_feature(bit) test_bit_inv(bit, chsc_scsc->chsc_char)
+bool css_enable_mb(int sid, uint64_t mb, uint16_t mbi, uint16_t flg, bool fmt1);
+bool css_disable_mb(int schid);
+
#endif
diff --git a/lib/s390x/css_lib.c b/lib/s390x/css_lib.c
index a97d61e..8f09383 100644
--- a/lib/s390x/css_lib.c
+++ b/lib/s390x/css_lib.c
@@ -248,6 +248,106 @@ retry:
return -1;
}
+/*
+ * schib_update_mb: update the subchannel Measurement Block
+ * @schid: Subchannel Identifier
+ * @mb : 64bit address of the measurement block
+ * @mbi : the measurement block offset
+ * @flags : PMCW_MBUE to enable measurement block update
+ * PMCW_DCTME to enable device connect time
+ * 0 to disable measurement
+ * @format1: set if format 1 is to be used
+ */
+static bool schib_update_mb(int schid, uint64_t mb, uint16_t mbi,
+ uint16_t flags, bool format1)
+{
+ struct pmcw *pmcw = &schib.pmcw;
+ int cc;
+
+ /* Read the SCHIB for this subchannel */
+ cc = stsch(schid, &schib);
+ if (cc) {
+ report_info("stsch: sch %08x failed with cc=%d", schid, cc);
+ return false;
+ }
+
+ /* Update the SCHIB to enable the measurement block */
+ if (flags) {
+ pmcw->flags |= flags;
+
+ if (format1)
+ pmcw->flags2 |= PMCW_MBF1;
+ else
+ pmcw->flags2 &= ~PMCW_MBF1;
+
+ pmcw->mbi = mbi;
+ schib.mbo = mb & ~0x3f;
+ } else {
+ pmcw->flags &= ~(PMCW_MBUE | PMCW_DCTME);
+ }
+
+ /* Tell the CSS we want to modify the subchannel */
+ cc = msch(schid, &schib);
+ if (cc) {
+ /*
+ * If the subchannel is status pending or
+ * if a function is in progress,
+ * we consider both cases as errors.
+ */
+ report_info("msch: sch %08x failed with cc=%d", schid, cc);
+ return false;
+ }
+
+ /*
+ * Read the SCHIB again
+ */
+ cc = stsch(schid, &schib);
+ if (cc) {
+ report_info("stsch: updating sch %08x failed with cc=%d",
+ schid, cc);
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * css_enable_mb: enable the subchannel Measurement Block
+ * @schid: Subchannel Identifier
+ * @mb : 64bit address of the measurement block
+ * @format1: set if format 1 is to be used
+ * @mbi : the measurement block offset
+ * @flags : PMCW_MBUE to enable measurement block update
+ * PMCW_DCTME to enable device connect time
+ */
+bool css_enable_mb(int schid, uint64_t mb, uint16_t mbi, uint16_t flags,
+ bool format1)
+{
+ int retry_count = MAX_ENABLE_RETRIES;
+ struct pmcw *pmcw = &schib.pmcw;
+
+ while (retry_count-- &&
+ !schib_update_mb(schid, mb, mbi, flags, format1))
+ mdelay(10); /* the hardware was not ready, give it some time */
+
+ return schib.mbo == mb && pmcw->mbi == mbi;
+}
+
+/*
+ * css_disable_mb: disable the subchannel Measurement Block
+ * @schid: Subchannel Identifier
+ */
+bool css_disable_mb(int schid)
+{
+ int retry_count = MAX_ENABLE_RETRIES;
+
+ while (retry_count-- &&
+ !schib_update_mb(schid, 0, 0, 0, 0))
+ mdelay(10); /* the hardware was not ready, give it some time */
+
+ return retry_count > 0;
+}
+
static struct irb irb;
void css_irq_io(void)
--
2.17.1
next prev parent reply other threads:[~2021-03-12 10:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-12 10:41 [kvm-unit-tests PATCH v6 0/6] CSS Mesurement Block Pierre Morel
2021-03-12 10:41 ` [kvm-unit-tests PATCH v6 1/6] s390x: css: Store CSS Characteristics Pierre Morel
2021-03-12 10:41 ` [kvm-unit-tests PATCH v6 2/6] s390x: css: simplifications of the tests Pierre Morel
2021-03-15 10:48 ` Janosch Frank
2021-03-16 10:27 ` Pierre Morel
2021-03-12 10:41 ` Pierre Morel [this message]
2021-03-15 10:50 ` [kvm-unit-tests PATCH v6 3/6] s390x: css: extending the subchannel modifying functions Janosch Frank
2021-03-16 10:26 ` Pierre Morel
2021-03-12 10:41 ` [kvm-unit-tests PATCH v6 4/6] s390x: css: implementing Set CHannel Monitor Pierre Morel
2021-03-12 10:41 ` [kvm-unit-tests PATCH v6 5/6] s390x: css: testing measurement block format 0 Pierre Morel
2021-03-12 11:17 ` Cornelia Huck
2021-03-16 10:26 ` Pierre Morel
2021-03-15 10:53 ` Janosch Frank
2021-03-16 10:27 ` Pierre Morel
2021-03-12 10:41 ` [kvm-unit-tests PATCH v6 6/6] s390x: css: testing measurement block format 1 Pierre Morel
2021-03-12 11:18 ` [kvm-unit-tests PATCH v6 0/6] CSS Mesurement Block Cornelia Huck
2021-03-12 14:17 ` Janosch Frank
2021-03-16 9:39 ` Pierre Morel
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=1615545714-13747-4-git-send-email-pmorel@linux.ibm.com \
--to=pmorel@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).