From: Janosch Frank <frankja@linux.ibm.com>
To: pbonzini@redhat.com
Cc: kvm@vger.kernel.org, frankja@linux.ibm.com, david@redhat.com,
borntraeger@de.ibm.com, cohuck@redhat.com,
linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
thuth@redhat.com
Subject: [kvm-unit-tests GIT PULL 4/9] s390x: css: extending the subchannel modifying functions
Date: Wed, 5 May 2021 10:42:56 +0200 [thread overview]
Message-ID: <20210505084301.17395-5-frankja@linux.ibm.com> (raw)
In-Reply-To: <20210505084301.17395-1-frankja@linux.ibm.com>
From: Pierre Morel <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>
Link: https://lore.kernel.org/kvm/1615545714-13747-4-git-send-email-pmorel@linux.ibm.com/
Signed-off-by: Janosch Frank <frankja@linux.ibm.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 b9e4c08f..7dddb422 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 a97d61e7..8f093839 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.30.2
next prev parent reply other threads:[~2021-05-05 8:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 8:42 [kvm-unit-tests GIT PULL 0/9] s390x update 2021-05-05 Janosch Frank
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 1/9] s390x: mvpg: add checks for op_acc_id Janosch Frank
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 2/9] s390x: css: Store CSS Characteristics Janosch Frank
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 3/9] s390x: css: simplifications of the tests Janosch Frank
2021-05-05 8:42 ` Janosch Frank [this message]
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 5/9] s390x: css: implementing Set CHannel Monitor Janosch Frank
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 6/9] s390x: css: testing measurement block format 0 Janosch Frank
2021-05-05 8:42 ` [kvm-unit-tests GIT PULL 7/9] s390x: css: testing measurement block format 1 Janosch Frank
2021-05-05 8:43 ` [kvm-unit-tests GIT PULL 8/9] MAINTAINERS: s390x: add myself as reviewer Janosch Frank
2021-05-05 8:43 ` [kvm-unit-tests GIT PULL 9/9] s390x: Fix vector stfle checks Janosch Frank
2021-05-05 9:40 ` [kvm-unit-tests GIT PULL 0/9] s390x update 2021-05-05 Paolo Bonzini
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=20210505084301.17395-5-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pbonzini@redhat.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 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).