Skip to content

Commit 25b7bcf

Browse files
committed
Merge: [s390] Upgrade the zFCP driver to latest from upstream
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/6862 JIRA: https://issues.redhat.com/browse/RHEL-73492 Commits: ``` 0aa4daa 9fe5b61 32574fe bc3d440 30e037a ``` Signed-off-by: Mete Durlu <mdurlu@redhat.com> Approved-by: Steve Best <sbest@redhat.com> Approved-by: Tony Camuso <tcamuso@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: Augusto Caringi <acaringi@redhat.com>
2 parents e054477 + 551909d commit 25b7bcf

File tree

6 files changed

+67
-58
lines changed

6 files changed

+67
-58
lines changed

arch/s390/include/asm/css_chars.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ struct css_general_char {
2525
u64 : 2;
2626

2727
u64 : 3;
28-
u64 aif_osa : 1; /* bit 67 */
28+
u64 aif_qdio : 1;/* bit 67 */
2929
u64 : 12;
3030
u64 eadm_rf : 1; /* bit 80 */
3131
u64 : 1;

drivers/s390/cio/qdio.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,10 @@ struct qdio_q {
210210
qdio_handler_t (*handler);
211211

212212
struct qdio_irq *irq_ptr;
213+
214+
/* memory page (PAGE_SIZE) used to place slib and sl on */
215+
void *sl_page;
213216
struct sl *sl;
214-
/*
215-
* A page is allocated under this pointer and used for slib and sl.
216-
* slib is 2048 bytes big and sl points to offset PAGE_SIZE / 2.
217-
*/
218217
struct slib *slib;
219218
} __attribute__ ((aligned(256)));
220219

@@ -266,7 +265,7 @@ struct qdio_irq {
266265

267266
#define is_thinint_irq(irq) \
268267
(irq->qib.qfmt == QDIO_IQDIO_QFMT || \
269-
css_general_characteristics.aif_osa)
268+
css_general_characteristics.aif_qdio)
270269

271270
#define qperf(__qdev, __attr) ((__qdev)->perf_stat.(__attr))
272271

drivers/s390/cio/qdio_setup.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static void __qdio_free_queues(struct qdio_q **queues, unsigned int count)
8383

8484
for (i = 0; i < count; i++) {
8585
q = queues[i];
86-
free_page((unsigned long) q->slib);
86+
free_page((unsigned long)q->sl_page);
8787
kmem_cache_free(qdio_q_cache, q);
8888
}
8989
}
@@ -109,12 +109,16 @@ static int __qdio_allocate_qs(struct qdio_q **irq_ptr_qs, int nr_queues)
109109
return -ENOMEM;
110110
}
111111

112-
q->slib = (struct slib *) __get_free_page(GFP_KERNEL);
113-
if (!q->slib) {
112+
q->sl_page = (void *)__get_free_page(GFP_KERNEL);
113+
if (!q->sl_page) {
114114
kmem_cache_free(qdio_q_cache, q);
115115
__qdio_free_queues(irq_ptr_qs, i);
116116
return -ENOMEM;
117117
}
118+
q->slib = q->sl_page;
119+
/* As per architecture: SLIB is 2K bytes long, and SL 1K. */
120+
q->sl = (struct sl *)(q->slib + 1);
121+
118122
irq_ptr_qs[i] = q;
119123
}
120124
return 0;
@@ -142,11 +146,15 @@ int qdio_allocate_qs(struct qdio_irq *irq_ptr, int nr_input_qs, int nr_output_qs
142146
static void setup_queues_misc(struct qdio_q *q, struct qdio_irq *irq_ptr,
143147
qdio_handler_t *handler, int i)
144148
{
145-
struct slib *slib = q->slib;
149+
struct slib *const slib = q->slib;
150+
void *const sl_page = q->sl_page;
151+
struct sl *const sl = q->sl;
146152

147153
/* queue must be cleared for qdio_establish */
148154
memset(q, 0, sizeof(*q));
149-
memset(slib, 0, PAGE_SIZE);
155+
memset(sl_page, 0, PAGE_SIZE);
156+
q->sl_page = sl_page;
157+
q->sl = sl;
150158
q->slib = slib;
151159
q->irq_ptr = irq_ptr;
152160
q->mask = 1 << (31 - i);
@@ -161,7 +169,6 @@ static void setup_storage_lists(struct qdio_q *q, struct qdio_irq *irq_ptr,
161169
int j;
162170

163171
DBF_HEX(&q, sizeof(void *));
164-
q->sl = (struct sl *)((char *)q->slib + PAGE_SIZE / 2);
165172

166173
/* fill in sbal */
167174
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; j++)
@@ -423,7 +430,7 @@ int __init qdio_setup_init(void)
423430

424431
/* Check for OSA/FCP thin interrupts (bit 67). */
425432
DBF_EVENT("thinint:%1d",
426-
(css_general_characteristics.aif_osa) ? 1 : 0);
433+
(css_general_characteristics.aif_qdio) ? 1 : 0);
427434

428435
/* Check for QEBSM support in general (bit 58). */
429436
DBF_EVENT("cssQEBSM:%1d", css_general_characteristics.qebsm);

drivers/s390/scsi/zfcp_fc.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,11 @@ static void zfcp_fc_adisc_handler(void *data)
537537
/* port is still good, nothing to do */
538538
out:
539539
atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status);
540+
/*
541+
* port ref comes from get_device() in zfcp_fc_test_link() and
542+
* work item zfcp_fc_link_test_work() passes ref via
543+
* zfcp_fc_adisc() to here, if zfcp_fc_adisc() could send ADISC
544+
*/
540545
put_device(&port->dev);
541546
kmem_cache_free(zfcp_fc_req_cache, fc_req);
542547
}
@@ -603,7 +608,7 @@ void zfcp_fc_link_test_work(struct work_struct *work)
603608

604609
retval = zfcp_fc_adisc(port);
605610
if (retval == 0)
606-
return;
611+
return; /* port ref passed to zfcp_fc_adisc(), no put here */
607612

608613
/* send of ADISC was not possible */
609614
atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status);

drivers/s390/scsi/zfcp_fsf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,7 +1218,7 @@ static int zfcp_fsf_setup_ct_els(struct zfcp_fsf_req *req,
12181218
/**
12191219
* zfcp_fsf_send_ct - initiate a Generic Service request (FC-GS)
12201220
* @wka_port: pointer to zfcp WKA port to send CT/GS to
1221-
* @ct: pointer to struct zfcp_send_ct with data for request
1221+
* @ct: pointer to struct zfcp_fsf_ct_els with data for CT request
12221222
* @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req
12231223
* @timeout: timeout that hardware should use, and a later software timeout
12241224
*/
@@ -1316,7 +1316,7 @@ static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
13161316
* zfcp_fsf_send_els - initiate an ELS command (FC-FS)
13171317
* @adapter: pointer to zfcp adapter
13181318
* @d_id: N_Port_ID to send ELS to
1319-
* @els: pointer to struct zfcp_send_els with data for the command
1319+
* @els: pointer to struct zfcp_fsf_ct_els with data for the ELS command
13201320
* @timeout: timeout that hardware should use, and a later software timeout
13211321
*/
13221322
int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,

drivers/s390/scsi/zfcp_sysfs.c

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static ssize_t zfcp_sysfs_##_feat##_##_name##_show(struct device *dev, \
2424
{ \
2525
struct _feat_def *_feat = container_of(dev, struct _feat_def, dev); \
2626
\
27-
return sprintf(buf, _format, _value); \
27+
return sysfs_emit(buf, _format, _value); \
2828
} \
2929
static ZFCP_DEV_ATTR(_feat, _name, S_IRUGO, \
3030
zfcp_sysfs_##_feat##_##_name##_show, NULL);
@@ -34,7 +34,7 @@ static ssize_t zfcp_sysfs_##_feat##_##_name##_show(struct device *dev, \
3434
struct device_attribute *at,\
3535
char *buf) \
3636
{ \
37-
return sprintf(buf, _format, _value); \
37+
return sysfs_emit(buf, _format, _value); \
3838
} \
3939
static ZFCP_DEV_ATTR(_feat, _name, S_IRUGO, \
4040
zfcp_sysfs_##_feat##_##_name##_show, NULL);
@@ -51,7 +51,7 @@ static ssize_t zfcp_sysfs_adapter_##_name##_show(struct device *dev, \
5151
if (!adapter) \
5252
return -ENODEV; \
5353
\
54-
i = sprintf(buf, _format, _value); \
54+
i = sysfs_emit(buf, _format, _value); \
5555
zfcp_ccw_adapter_put(adapter); \
5656
return i; \
5757
} \
@@ -95,9 +95,9 @@ static ssize_t zfcp_sysfs_port_failed_show(struct device *dev,
9595
struct zfcp_port *port = container_of(dev, struct zfcp_port, dev);
9696

9797
if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
98-
return sprintf(buf, "1\n");
98+
return sysfs_emit(buf, "1\n");
9999

100-
return sprintf(buf, "0\n");
100+
return sysfs_emit(buf, "0\n");
101101
}
102102

103103
static ssize_t zfcp_sysfs_port_failed_store(struct device *dev,
@@ -135,7 +135,7 @@ static ssize_t zfcp_sysfs_unit_failed_show(struct device *dev,
135135
scsi_device_put(sdev);
136136
}
137137

138-
return sprintf(buf, "%d\n", failed);
138+
return sysfs_emit(buf, "%d\n", failed);
139139
}
140140

141141
static ssize_t zfcp_sysfs_unit_failed_store(struct device *dev,
@@ -176,9 +176,9 @@ static ssize_t zfcp_sysfs_adapter_failed_show(struct device *dev,
176176
return -ENODEV;
177177

178178
if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
179-
i = sprintf(buf, "1\n");
179+
i = sysfs_emit(buf, "1\n");
180180
else
181-
i = sprintf(buf, "0\n");
181+
i = sysfs_emit(buf, "0\n");
182182

183183
zfcp_ccw_adapter_put(adapter);
184184
return i;
@@ -348,8 +348,7 @@ zfcp_sysfs_adapter_diag_max_age_show(struct device *dev,
348348
if (!adapter)
349349
return -ENODEV;
350350

351-
/* ceil(log(2^64 - 1) / log(10)) = 20 */
352-
rc = scnprintf(buf, 20 + 2, "%lu\n", adapter->diagnostics->max_age);
351+
rc = sysfs_emit(buf, "%lu\n", adapter->diagnostics->max_age);
353352

354353
zfcp_ccw_adapter_put(adapter);
355354
return rc;
@@ -401,14 +400,14 @@ static ssize_t zfcp_sysfs_adapter_fc_security_show(
401400
*/
402401
status = atomic_read(&adapter->status);
403402
if (0 == (status & ZFCP_STATUS_COMMON_OPEN))
404-
i = sprintf(buf, "unknown\n");
403+
i = sysfs_emit(buf, "unknown\n");
405404
else if (!(adapter->adapter_features & FSF_FEATURE_FC_SECURITY))
406-
i = sprintf(buf, "unsupported\n");
405+
i = sysfs_emit(buf, "unsupported\n");
407406
else {
408407
i = zfcp_fsf_scnprint_fc_security(
409408
buf, PAGE_SIZE - 1, adapter->fc_security_algorithms,
410409
ZFCP_FSF_PRINT_FMT_LIST);
411-
i += scnprintf(buf + i, PAGE_SIZE - i, "\n");
410+
i += sysfs_emit_at(buf, i, "\n");
412411
}
413412

414413
zfcp_ccw_adapter_put(adapter);
@@ -490,14 +489,14 @@ static ssize_t zfcp_sysfs_port_fc_security_show(struct device *dev,
490489
0 != (status & ZFCP_STATUS_PORT_LINK_TEST) ||
491490
0 != (status & ZFCP_STATUS_COMMON_ERP_FAILED) ||
492491
0 != (status & ZFCP_STATUS_COMMON_ACCESS_BOXED))
493-
i = sprintf(buf, "unknown\n");
492+
i = sysfs_emit(buf, "unknown\n");
494493
else if (!(adapter->adapter_features & FSF_FEATURE_FC_SECURITY))
495-
i = sprintf(buf, "unsupported\n");
494+
i = sysfs_emit(buf, "unsupported\n");
496495
else {
497496
i = zfcp_fsf_scnprint_fc_security(
498497
buf, PAGE_SIZE - 1, port->connection_info,
499498
ZFCP_FSF_PRINT_FMT_SINGLEITEM);
500-
i += scnprintf(buf + i, PAGE_SIZE - i, "\n");
499+
i += sysfs_emit_at(buf, i, "\n");
501500
}
502501

503502
return i;
@@ -569,8 +568,8 @@ zfcp_sysfs_unit_##_name##_latency_show(struct device *dev, \
569568
do_div(cmin, 1000); \
570569
do_div(cmax, 1000); \
571570
\
572-
return sprintf(buf, "%llu %llu %llu %llu %llu %llu %llu\n", \
573-
fmin, fmax, fsum, cmin, cmax, csum, cc); \
571+
return sysfs_emit(buf, "%llu %llu %llu %llu %llu %llu %llu\n", \
572+
fmin, fmax, fsum, cmin, cmax, csum, cc); \
574573
} \
575574
static ssize_t \
576575
zfcp_sysfs_unit_##_name##_latency_store(struct device *dev, \
@@ -610,8 +609,8 @@ static ssize_t zfcp_sysfs_scsi_##_name##_show(struct device *dev, \
610609
struct scsi_device *sdev = to_scsi_device(dev); \
611610
struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); \
612611
\
613-
return sprintf(buf, _format, _value); \
614-
} \
612+
return sysfs_emit(buf, _format, _value); \
613+
} \
615614
static DEVICE_ATTR(_name, S_IRUGO, zfcp_sysfs_scsi_##_name##_show, NULL);
616615

617616
ZFCP_DEFINE_SCSI_ATTR(hba_id, "%s\n",
@@ -625,7 +624,7 @@ static ssize_t zfcp_sysfs_scsi_fcp_lun_show(struct device *dev,
625624
{
626625
struct scsi_device *sdev = to_scsi_device(dev);
627626

628-
return sprintf(buf, "0x%016llx\n", zfcp_scsi_dev_lun(sdev));
627+
return sysfs_emit(buf, "0x%016llx\n", zfcp_scsi_dev_lun(sdev));
629628
}
630629
static DEVICE_ATTR(fcp_lun, S_IRUGO, zfcp_sysfs_scsi_fcp_lun_show, NULL);
631630

@@ -641,7 +640,7 @@ static ssize_t zfcp_sysfs_scsi_zfcp_failed_show(struct device *dev,
641640
unsigned int status = atomic_read(&sdev_to_zfcp(sdev)->status);
642641
unsigned int failed = status & ZFCP_STATUS_COMMON_ERP_FAILED ? 1 : 0;
643642

644-
return sprintf(buf, "%d\n", failed);
643+
return sysfs_emit(buf, "%d\n", failed);
645644
}
646645

647646
static ssize_t zfcp_sysfs_scsi_zfcp_failed_store(struct device *dev,
@@ -705,8 +704,8 @@ static ssize_t zfcp_sysfs_adapter_util_show(struct device *dev,
705704

706705
retval = zfcp_fsf_exchange_port_data_sync(adapter->qdio, qtcb_port);
707706
if (retval == 0 || retval == -EAGAIN)
708-
retval = sprintf(buf, "%u %u %u\n", qtcb_port->cp_util,
709-
qtcb_port->cb_util, qtcb_port->a_util);
707+
retval = sysfs_emit(buf, "%u %u %u\n", qtcb_port->cp_util,
708+
qtcb_port->cb_util, qtcb_port->a_util);
710709
kfree(qtcb_port);
711710
return retval;
712711
}
@@ -749,7 +748,7 @@ static ssize_t zfcp_sysfs_adapter_##_name##_show(struct device *dev, \
749748
if (retval) \
750749
return retval; \
751750
\
752-
return sprintf(buf, _format, ## _arg); \
751+
return sysfs_emit(buf, _format, ## _arg); \
753752
} \
754753
static DEVICE_ATTR(_name, S_IRUGO, zfcp_sysfs_adapter_##_name##_show, NULL);
755754

@@ -778,8 +777,8 @@ static ssize_t zfcp_sysfs_adapter_q_full_show(struct device *dev,
778777
util = qdio->req_q_util;
779778
spin_unlock_bh(&qdio->stat_lock);
780779

781-
return sprintf(buf, "%d %llu\n", atomic_read(&qdio->req_q_full),
782-
(unsigned long long)util);
780+
return sysfs_emit(buf, "%d %llu\n", atomic_read(&qdio->req_q_full),
781+
(unsigned long long)util);
783782
}
784783
static DEVICE_ATTR(queue_full, S_IRUGO, zfcp_sysfs_adapter_q_full_show, NULL);
785784

@@ -825,8 +824,7 @@ static ssize_t zfcp_sysfs_adapter_diag_b2b_credit_show(
825824
.data.nport_serv_param -
826825
sizeof(u32));
827826

828-
rc = scnprintf(buf, 5 + 2, "%hu\n",
829-
be16_to_cpu(nsp->fl_csp.sp_bb_cred));
827+
rc = sysfs_emit(buf, "%hu\n", be16_to_cpu(nsp->fl_csp.sp_bb_cred));
830828
spin_unlock_irqrestore(&diag_hdr->access_lock, flags);
831829

832830
out:
@@ -836,7 +834,7 @@ static ssize_t zfcp_sysfs_adapter_diag_b2b_credit_show(
836834
static ZFCP_DEV_ATTR(adapter_diag, b2b_credit, 0400,
837835
zfcp_sysfs_adapter_diag_b2b_credit_show, NULL);
838836

839-
#define ZFCP_DEFINE_DIAG_SFP_ATTR(_name, _qtcb_member, _prtsize, _prtfmt) \
837+
#define ZFCP_DEFINE_DIAG_SFP_ATTR(_name, _qtcb_member, _prtfmt) \
840838
static ssize_t zfcp_sysfs_adapter_diag_sfp_##_name##_show( \
841839
struct device *dev, struct device_attribute *attr, char *buf) \
842840
{ \
@@ -869,8 +867,8 @@ static ZFCP_DEV_ATTR(adapter_diag, b2b_credit, 0400,
869867
goto out; \
870868
\
871869
spin_lock_irqsave(&diag_hdr->access_lock, flags); \
872-
rc = scnprintf( \
873-
buf, (_prtsize) + 2, _prtfmt "\n", \
870+
rc = sysfs_emit( \
871+
buf, _prtfmt "\n", \
874872
adapter->diagnostics->port_data.data._qtcb_member); \
875873
spin_unlock_irqrestore(&diag_hdr->access_lock, flags); \
876874
\
@@ -881,16 +879,16 @@ static ZFCP_DEV_ATTR(adapter_diag, b2b_credit, 0400,
881879
static ZFCP_DEV_ATTR(adapter_diag_sfp, _name, 0400, \
882880
zfcp_sysfs_adapter_diag_sfp_##_name##_show, NULL)
883881

884-
ZFCP_DEFINE_DIAG_SFP_ATTR(temperature, temperature, 6, "%hd");
885-
ZFCP_DEFINE_DIAG_SFP_ATTR(vcc, vcc, 5, "%hu");
886-
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_bias, tx_bias, 5, "%hu");
887-
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_power, tx_power, 5, "%hu");
888-
ZFCP_DEFINE_DIAG_SFP_ATTR(rx_power, rx_power, 5, "%hu");
889-
ZFCP_DEFINE_DIAG_SFP_ATTR(port_tx_type, sfp_flags.port_tx_type, 2, "%hu");
890-
ZFCP_DEFINE_DIAG_SFP_ATTR(optical_port, sfp_flags.optical_port, 1, "%hu");
891-
ZFCP_DEFINE_DIAG_SFP_ATTR(sfp_invalid, sfp_flags.sfp_invalid, 1, "%hu");
892-
ZFCP_DEFINE_DIAG_SFP_ATTR(connector_type, sfp_flags.connector_type, 1, "%hu");
893-
ZFCP_DEFINE_DIAG_SFP_ATTR(fec_active, sfp_flags.fec_active, 1, "%hu");
882+
ZFCP_DEFINE_DIAG_SFP_ATTR(temperature, temperature, "%hd");
883+
ZFCP_DEFINE_DIAG_SFP_ATTR(vcc, vcc, "%hu");
884+
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_bias, tx_bias, "%hu");
885+
ZFCP_DEFINE_DIAG_SFP_ATTR(tx_power, tx_power, "%hu");
886+
ZFCP_DEFINE_DIAG_SFP_ATTR(rx_power, rx_power, "%hu");
887+
ZFCP_DEFINE_DIAG_SFP_ATTR(port_tx_type, sfp_flags.port_tx_type, "%hu");
888+
ZFCP_DEFINE_DIAG_SFP_ATTR(optical_port, sfp_flags.optical_port, "%hu");
889+
ZFCP_DEFINE_DIAG_SFP_ATTR(sfp_invalid, sfp_flags.sfp_invalid, "%hu");
890+
ZFCP_DEFINE_DIAG_SFP_ATTR(connector_type, sfp_flags.connector_type, "%hu");
891+
ZFCP_DEFINE_DIAG_SFP_ATTR(fec_active, sfp_flags.fec_active, "%hu");
894892

895893
static struct attribute *zfcp_sysfs_diag_attrs[] = {
896894
&dev_attr_adapter_diag_sfp_temperature.attr,

0 commit comments

Comments
 (0)