s390/qdio: pass ISC as parameter to chsc_sadc()
authorJulian Wiedmann <jwi@linux.ibm.com>
Mon, 16 Mar 2020 08:20:38 +0000 (09:20 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 23 Mar 2020 12:41:55 +0000 (13:41 +0100)
When issuing a SADC for a QDIO device, don't hardcode the ISC but use
whatever is specified in qdio's handler for Adapter Interrupts.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
drivers/s390/cio/chsc.c
drivers/s390/cio/chsc.h
drivers/s390/cio/qdio_thinint.c

index 6392a1b..1ca73c2 100644 (file)
@@ -180,11 +180,12 @@ EXPORT_SYMBOL_GPL(chsc_ssqd);
  * @scssc: request and response block for SADC
  * @summary_indicator_addr: summary indicator address
  * @subchannel_indicator_addr: subchannel indicator address
+ * @isc: Interruption Subclass for this subchannel
  *
  * Returns 0 on success.
  */
 int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc,
-             u64 summary_indicator_addr, u64 subchannel_indicator_addr)
+             u64 summary_indicator_addr, u64 subchannel_indicator_addr, u8 isc)
 {
        memset(scssc, 0, sizeof(*scssc));
        scssc->request.length = 0x0fe0;
@@ -196,7 +197,7 @@ int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc,
 
        scssc->ks = PAGE_DEFAULT_KEY >> 4;
        scssc->kc = PAGE_DEFAULT_KEY >> 4;
-       scssc->isc = QDIO_AIRQ_ISC;
+       scssc->isc = isc;
        scssc->schid = schid;
 
        /* enable the time delay disablement facility */
index e57d68e..34de6d7 100644 (file)
@@ -163,7 +163,8 @@ void chsc_chp_offline(struct chp_id chpid);
 int chsc_get_channel_measurement_chars(struct channel_path *chp);
 int chsc_ssqd(struct subchannel_id schid, struct chsc_ssqd_area *ssqd);
 int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc,
-             u64 summary_indicator_addr, u64 subchannel_indicator_addr);
+             u64 summary_indicator_addr, u64 subchannel_indicator_addr,
+             u8 isc);
 int chsc_sgib(u32 origin);
 int chsc_error_from_response(int response);
 
index 7c4e4ec..999b998 100644 (file)
@@ -211,7 +211,7 @@ static int set_subchannel_ind(struct qdio_irq *irq_ptr, int reset)
        }
 
        rc = chsc_sadc(irq_ptr->schid, scssc, summary_indicator_addr,
-                      subchannel_indicator_addr);
+                      subchannel_indicator_addr, tiqdio_airq.isc);
        if (rc) {
                DBF_ERROR("%4x SSI r:%4x", irq_ptr->schid.sch_no,
                          scssc->response.code);