aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-02-21 14:51:42 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-21 14:51:42 -0500
commitcdc194705d26fdd7fc5446b5d830f2bbe2b22c30 (patch)
tree91a643f38d490e092855792576a7e903a419cfe1 /include
parent772c8f6f3bbd3ceb94a89373473083e3e1113554 (diff)
parentd1da522fb8a70b8c527d4ad15f9e62218cc00f2c (diff)
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This update includes the usual round of major driver updates (ncr5380, ufs, lpfc, be2iscsi, hisi_sas, storvsc, cxlflash, aacraid, megaraid_sas, ...). There's also an assortment of minor fixes and the major update of switching a bunch of drivers to pci_alloc_irq_vectors from Christoph" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (188 commits) scsi: megaraid_sas: handle dma_addr_t right on 32-bit scsi: megaraid_sas: array overflow in megasas_dump_frame() scsi: snic: switch to pci_irq_alloc_vectors scsi: megaraid_sas: driver version upgrade scsi: megaraid_sas: Change RAID_1_10_RMW_CMDS to RAID_1_PEER_CMDS and set value to 2 scsi: megaraid_sas: Indentation and smatch warning fixes scsi: megaraid_sas: Cleanup VD_EXT_DEBUG and SPAN_DEBUG related debug prints scsi: megaraid_sas: Increase internal command pool scsi: megaraid_sas: Use synchronize_irq to wait for IRQs to complete scsi: megaraid_sas: Bail out the driver load if ld_list_query fails scsi: megaraid_sas: Change build_mpt_mfi_pass_thru to return void scsi: megaraid_sas: During OCR, if get_ctrl_info fails do not continue with OCR scsi: megaraid_sas: Do not set fp_possible if TM capable for non-RW syspdIO, change fp_possible to bool scsi: megaraid_sas: Remove unused pd_index from megasas_build_ld_nonrw_fusion scsi: megaraid_sas: megasas_return_cmd does not memset IO frame to zero scsi: megaraid_sas: max_fw_cmds are decremented twice, remove duplicate scsi: megaraid_sas: update can_queue only if the new value is less scsi: megaraid_sas: Change max_cmd from u32 to u16 in all functions scsi: megaraid_sas: set pd_after_lb from MR_BuildRaidContext and initialize pDevHandle to MR_DEVHANDLE_INVALID scsi: megaraid_sas: latest controller OCR capability from FW before sending shutdown DCMD ...
Diffstat (limited to 'include')
-rw-r--r--include/linux/libata.h2
-rw-r--r--include/scsi/libiscsi.h1
-rw-r--r--include/scsi/scsi.h10
-rw-r--r--include/scsi/scsi_transport.h23
-rw-r--r--include/scsi/scsi_transport_fc.h1
-rw-r--r--include/scsi/scsi_transport_srp.h8
-rw-r--r--include/trace/events/ufs.h263
-rw-r--r--include/uapi/scsi/cxlflash_ioctl.h1
8 files changed, 269 insertions, 40 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index c170be548b7f..46e18c0619c6 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1130,6 +1130,7 @@ extern int ata_sas_port_start(struct ata_port *ap);
1130extern void ata_sas_port_stop(struct ata_port *ap); 1130extern void ata_sas_port_stop(struct ata_port *ap);
1131extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *); 1131extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
1132extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap); 1132extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);
1133extern enum blk_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd);
1133extern int sata_scr_valid(struct ata_link *link); 1134extern int sata_scr_valid(struct ata_link *link);
1134extern int sata_scr_read(struct ata_link *link, int reg, u32 *val); 1135extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);
1135extern int sata_scr_write(struct ata_link *link, int reg, u32 val); 1136extern int sata_scr_write(struct ata_link *link, int reg, u32 val);
@@ -1355,6 +1356,7 @@ extern struct device_attribute *ata_common_sdev_attrs[];
1355 .proc_name = drv_name, \ 1356 .proc_name = drv_name, \
1356 .slave_configure = ata_scsi_slave_config, \ 1357 .slave_configure = ata_scsi_slave_config, \
1357 .slave_destroy = ata_scsi_slave_destroy, \ 1358 .slave_destroy = ata_scsi_slave_destroy, \
1359 .eh_timed_out = ata_scsi_timed_out, \
1358 .bios_param = ata_std_bios_param, \ 1360 .bios_param = ata_std_bios_param, \
1359 .unlock_native_capacity = ata_scsi_unlock_native_capacity, \ 1361 .unlock_native_capacity = ata_scsi_unlock_native_capacity, \
1360 .sdev_attrs = ata_common_sdev_attrs 1362 .sdev_attrs = ata_common_sdev_attrs
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
index 4d1c46aac331..b0e275de6dec 100644
--- a/include/scsi/libiscsi.h
+++ b/include/scsi/libiscsi.h
@@ -383,6 +383,7 @@ extern int iscsi_eh_recover_target(struct scsi_cmnd *sc);
383extern int iscsi_eh_session_reset(struct scsi_cmnd *sc); 383extern int iscsi_eh_session_reset(struct scsi_cmnd *sc);
384extern int iscsi_eh_device_reset(struct scsi_cmnd *sc); 384extern int iscsi_eh_device_reset(struct scsi_cmnd *sc);
385extern int iscsi_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc); 385extern int iscsi_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc);
386extern enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc);
386 387
387/* 388/*
388 * iSCSI host helpers. 389 * iSCSI host helpers.
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
index 8ec7c30e35af..a1e1930b7a87 100644
--- a/include/scsi/scsi.h
+++ b/include/scsi/scsi.h
@@ -29,16 +29,6 @@ enum scsi_timeouts {
29 */ 29 */
30#define SCAN_WILD_CARD ~0 30#define SCAN_WILD_CARD ~0
31 31
32#ifdef CONFIG_ACPI
33struct acpi_bus_type;
34
35extern int
36scsi_register_acpi_bus_type(struct acpi_bus_type *bus);
37
38extern void
39scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus);
40#endif
41
42/** scsi_status_is_good - check the status return. 32/** scsi_status_is_good - check the status return.
43 * 33 *
44 * @status: the status passed up from the driver (including host and 34 * @status: the status passed up from the driver (including host and
diff --git a/include/scsi/scsi_transport.h b/include/scsi/scsi_transport.h
index b6e07b56d013..a3dcb1bfb362 100644
--- a/include/scsi/scsi_transport.h
+++ b/include/scsi/scsi_transport.h
@@ -56,29 +56,6 @@ struct scsi_transport_template {
56 * Allows a transport to override the default error handler. 56 * Allows a transport to override the default error handler.
57 */ 57 */
58 void (* eh_strategy_handler)(struct Scsi_Host *); 58 void (* eh_strategy_handler)(struct Scsi_Host *);
59
60 /*
61 * This is an optional routine that allows the transport to become
62 * involved when a scsi io timer fires. The return value tells the
63 * timer routine how to finish the io timeout handling:
64 * EH_HANDLED: I fixed the error, please complete the command
65 * EH_RESET_TIMER: I need more time, reset the timer and
66 * begin counting again
67 * EH_NOT_HANDLED Begin normal error recovery
68 */
69 enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
70
71 /*
72 * Used as callback for the completion of i_t_nexus request
73 * for target drivers.
74 */
75 int (* it_nexus_response)(struct Scsi_Host *, u64, int);
76
77 /*
78 * Used as callback for the completion of task management
79 * request for target drivers.
80 */
81 int (* tsk_mgmt_response)(struct Scsi_Host *, u64, u64, int);
82}; 59};
83 60
84#define transport_class_to_shost(tc) \ 61#define transport_class_to_shost(tc) \
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h
index 924c8e614b45..b21b8aa58c4d 100644
--- a/include/scsi/scsi_transport_fc.h
+++ b/include/scsi/scsi_transport_fc.h
@@ -808,6 +808,7 @@ struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
808 struct fc_vport_identifiers *); 808 struct fc_vport_identifiers *);
809int fc_vport_terminate(struct fc_vport *vport); 809int fc_vport_terminate(struct fc_vport *vport);
810int fc_block_scsi_eh(struct scsi_cmnd *cmnd); 810int fc_block_scsi_eh(struct scsi_cmnd *cmnd);
811enum blk_eh_timer_return fc_eh_timed_out(struct scsi_cmnd *scmd);
811 812
812static inline struct Scsi_Host *fc_bsg_to_shost(struct bsg_job *job) 813static inline struct Scsi_Host *fc_bsg_to_shost(struct bsg_job *job)
813{ 814{
diff --git a/include/scsi/scsi_transport_srp.h b/include/scsi/scsi_transport_srp.h
index d40d3ef25707..dd096330734e 100644
--- a/include/scsi/scsi_transport_srp.h
+++ b/include/scsi/scsi_transport_srp.h
@@ -88,10 +88,6 @@ struct srp_rport {
88 * @terminate_rport_io: Callback function for terminating all outstanding I/O 88 * @terminate_rport_io: Callback function for terminating all outstanding I/O
89 * requests for an rport. 89 * requests for an rport.
90 * @rport_delete: Callback function that deletes an rport. 90 * @rport_delete: Callback function that deletes an rport.
91 *
92 * Fields that are only relevant for SRP target drivers:
93 * @tsk_mgmt_response: Callback function for sending a task management response.
94 * @it_nexus_response: Callback function for processing an IT nexus response.
95 */ 91 */
96struct srp_function_template { 92struct srp_function_template {
97 /* for initiator drivers */ 93 /* for initiator drivers */
@@ -103,9 +99,6 @@ struct srp_function_template {
103 int (*reconnect)(struct srp_rport *rport); 99 int (*reconnect)(struct srp_rport *rport);
104 void (*terminate_rport_io)(struct srp_rport *rport); 100 void (*terminate_rport_io)(struct srp_rport *rport);
105 void (*rport_delete)(struct srp_rport *rport); 101 void (*rport_delete)(struct srp_rport *rport);
106 /* for target drivers */
107 int (* tsk_mgmt_response)(struct Scsi_Host *, u64, u64, int);
108 int (* it_nexus_response)(struct Scsi_Host *, u64, int);
109}; 102};
110 103
111extern struct scsi_transport_template * 104extern struct scsi_transport_template *
@@ -124,6 +117,7 @@ extern int srp_reconnect_rport(struct srp_rport *rport);
124extern void srp_start_tl_fail_timers(struct srp_rport *rport); 117extern void srp_start_tl_fail_timers(struct srp_rport *rport);
125extern void srp_remove_host(struct Scsi_Host *); 118extern void srp_remove_host(struct Scsi_Host *);
126extern void srp_stop_rport_timers(struct srp_rport *rport); 119extern void srp_stop_rport_timers(struct srp_rport *rport);
120enum blk_eh_timer_return srp_timed_out(struct scsi_cmnd *scmd);
127 121
128/** 122/**
129 * srp_chkready() - evaluate the transport layer state before I/O 123 * srp_chkready() - evaluate the transport layer state before I/O
diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h
new file mode 100644
index 000000000000..bf6f82673492
--- /dev/null
+++ b/include/trace/events/ufs.h
@@ -0,0 +1,263 @@
1/*
2 * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#undef TRACE_SYSTEM
15#define TRACE_SYSTEM ufs
16
17#if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ)
18#define _TRACE_UFS_H
19
20#include <linux/tracepoint.h>
21
22#define UFS_LINK_STATES \
23 EM(UIC_LINK_OFF_STATE) \
24 EM(UIC_LINK_ACTIVE_STATE) \
25 EMe(UIC_LINK_HIBERN8_STATE)
26
27#define UFS_PWR_MODES \
28 EM(UFS_ACTIVE_PWR_MODE) \
29 EM(UFS_SLEEP_PWR_MODE) \
30 EMe(UFS_POWERDOWN_PWR_MODE)
31
32#define UFSCHD_CLK_GATING_STATES \
33 EM(CLKS_OFF) \
34 EM(CLKS_ON) \
35 EM(REQ_CLKS_OFF) \
36 EMe(REQ_CLKS_ON)
37
38/* Enums require being exported to userspace, for user tool parsing */
39#undef EM
40#undef EMe
41#define EM(a) TRACE_DEFINE_ENUM(a);
42#define EMe(a) TRACE_DEFINE_ENUM(a);
43
44UFS_LINK_STATES;
45UFS_PWR_MODES;
46UFSCHD_CLK_GATING_STATES;
47
48/*
49 * Now redefine the EM() and EMe() macros to map the enums to the strings
50 * that will be printed in the output.
51 */
52#undef EM
53#undef EMe
54#define EM(a) { a, #a },
55#define EMe(a) { a, #a }
56
57TRACE_EVENT(ufshcd_clk_gating,
58
59 TP_PROTO(const char *dev_name, int state),
60
61 TP_ARGS(dev_name, state),
62
63 TP_STRUCT__entry(
64 __string(dev_name, dev_name)
65 __field(int, state)
66 ),
67
68 TP_fast_assign(
69 __assign_str(dev_name, dev_name);
70 __entry->state = state;
71 ),
72
73 TP_printk("%s: gating state changed to %s",
74 __get_str(dev_name),
75 __print_symbolic(__entry->state, UFSCHD_CLK_GATING_STATES))
76);
77
78TRACE_EVENT(ufshcd_clk_scaling,
79
80 TP_PROTO(const char *dev_name, const char *state, const char *clk,
81 u32 prev_state, u32 curr_state),
82
83 TP_ARGS(dev_name, state, clk, prev_state, curr_state),
84
85 TP_STRUCT__entry(
86 __string(dev_name, dev_name)
87 __string(state, state)
88 __string(clk, clk)
89 __field(u32, prev_state)
90 __field(u32, curr_state)
91 ),
92
93 TP_fast_assign(
94 __assign_str(dev_name, dev_name);
95 __assign_str(state, state);
96 __assign_str(clk, clk);
97 __entry->prev_state = prev_state;
98 __entry->curr_state = curr_state;
99 ),
100
101 TP_printk("%s: %s %s from %u to %u Hz",
102 __get_str(dev_name), __get_str(state), __get_str(clk),
103 __entry->prev_state, __entry->curr_state)
104);
105
106TRACE_EVENT(ufshcd_auto_bkops_state,
107
108 TP_PROTO(const char *dev_name, const char *state),
109
110 TP_ARGS(dev_name, state),
111
112 TP_STRUCT__entry(
113 __string(dev_name, dev_name)
114 __string(state, state)
115 ),
116
117 TP_fast_assign(
118 __assign_str(dev_name, dev_name);
119 __assign_str(state, state);
120 ),
121
122 TP_printk("%s: auto bkops - %s",
123 __get_str(dev_name), __get_str(state))
124);
125
126DECLARE_EVENT_CLASS(ufshcd_profiling_template,
127 TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
128 int err),
129
130 TP_ARGS(dev_name, profile_info, time_us, err),
131
132 TP_STRUCT__entry(
133 __string(dev_name, dev_name)
134 __string(profile_info, profile_info)
135 __field(s64, time_us)
136 __field(int, err)
137 ),
138
139 TP_fast_assign(
140 __assign_str(dev_name, dev_name);
141 __assign_str(profile_info, profile_info);
142 __entry->time_us = time_us;
143 __entry->err = err;
144 ),
145
146 TP_printk("%s: %s: took %lld usecs, err %d",
147 __get_str(dev_name), __get_str(profile_info),
148 __entry->time_us, __entry->err)
149);
150
151DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_hibern8,
152 TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
153 int err),
154 TP_ARGS(dev_name, profile_info, time_us, err));
155
156DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_gating,
157 TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
158 int err),
159 TP_ARGS(dev_name, profile_info, time_us, err));
160
161DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_scaling,
162 TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
163 int err),
164 TP_ARGS(dev_name, profile_info, time_us, err));
165
166DECLARE_EVENT_CLASS(ufshcd_template,
167 TP_PROTO(const char *dev_name, int err, s64 usecs,
168 int dev_state, int link_state),
169
170 TP_ARGS(dev_name, err, usecs, dev_state, link_state),
171
172 TP_STRUCT__entry(
173 __field(s64, usecs)
174 __field(int, err)
175 __string(dev_name, dev_name)
176 __field(int, dev_state)
177 __field(int, link_state)
178 ),
179
180 TP_fast_assign(
181 __entry->usecs = usecs;
182 __entry->err = err;
183 __assign_str(dev_name, dev_name);
184 __entry->dev_state = dev_state;
185 __entry->link_state = link_state;
186 ),
187
188 TP_printk(
189 "%s: took %lld usecs, dev_state: %s, link_state: %s, err %d",
190 __get_str(dev_name),
191 __entry->usecs,
192 __print_symbolic(__entry->dev_state, UFS_PWR_MODES),
193 __print_symbolic(__entry->link_state, UFS_LINK_STATES),
194 __entry->err
195 )
196);
197
198DEFINE_EVENT(ufshcd_template, ufshcd_system_suspend,
199 TP_PROTO(const char *dev_name, int err, s64 usecs,
200 int dev_state, int link_state),
201 TP_ARGS(dev_name, err, usecs, dev_state, link_state));
202
203DEFINE_EVENT(ufshcd_template, ufshcd_system_resume,
204 TP_PROTO(const char *dev_name, int err, s64 usecs,
205 int dev_state, int link_state),
206 TP_ARGS(dev_name, err, usecs, dev_state, link_state));
207
208DEFINE_EVENT(ufshcd_template, ufshcd_runtime_suspend,
209 TP_PROTO(const char *dev_name, int err, s64 usecs,
210 int dev_state, int link_state),
211 TP_ARGS(dev_name, err, usecs, dev_state, link_state));
212
213DEFINE_EVENT(ufshcd_template, ufshcd_runtime_resume,
214 TP_PROTO(const char *dev_name, int err, s64 usecs,
215 int dev_state, int link_state),
216 TP_ARGS(dev_name, err, usecs, dev_state, link_state));
217
218DEFINE_EVENT(ufshcd_template, ufshcd_init,
219 TP_PROTO(const char *dev_name, int err, s64 usecs,
220 int dev_state, int link_state),
221 TP_ARGS(dev_name, err, usecs, dev_state, link_state));
222
223TRACE_EVENT(ufshcd_command,
224 TP_PROTO(const char *dev_name, const char *str, unsigned int tag,
225 u32 doorbell, int transfer_len, u32 intr, u64 lba,
226 u8 opcode),
227
228 TP_ARGS(dev_name, str, tag, doorbell, transfer_len, intr, lba, opcode),
229
230 TP_STRUCT__entry(
231 __string(dev_name, dev_name)
232 __string(str, str)
233 __field(unsigned int, tag)
234 __field(u32, doorbell)
235 __field(int, transfer_len)
236 __field(u32, intr)
237 __field(u64, lba)
238 __field(u8, opcode)
239 ),
240
241 TP_fast_assign(
242 __assign_str(dev_name, dev_name);
243 __assign_str(str, str);
244 __entry->tag = tag;
245 __entry->doorbell = doorbell;
246 __entry->transfer_len = transfer_len;
247 __entry->intr = intr;
248 __entry->lba = lba;
249 __entry->opcode = opcode;
250 ),
251
252 TP_printk(
253 "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x",
254 __get_str(str), __get_str(dev_name), __entry->tag,
255 __entry->doorbell, __entry->transfer_len,
256 __entry->intr, __entry->lba, (u32)__entry->opcode
257 )
258);
259
260#endif /* if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) */
261
262/* This part must be outside protection */
263#include <trace/define_trace.h>
diff --git a/include/uapi/scsi/cxlflash_ioctl.h b/include/uapi/scsi/cxlflash_ioctl.h
index 6bf1f8a022b1..e9fdc12ad984 100644
--- a/include/uapi/scsi/cxlflash_ioctl.h
+++ b/include/uapi/scsi/cxlflash_ioctl.h
@@ -40,6 +40,7 @@ struct dk_cxlflash_hdr {
40 */ 40 */
41#define DK_CXLFLASH_ALL_PORTS_ACTIVE 0x0000000000000001ULL 41#define DK_CXLFLASH_ALL_PORTS_ACTIVE 0x0000000000000001ULL
42#define DK_CXLFLASH_APP_CLOSE_ADAP_FD 0x0000000000000002ULL 42#define DK_CXLFLASH_APP_CLOSE_ADAP_FD 0x0000000000000002ULL
43#define DK_CXLFLASH_CONTEXT_SQ_CMD_MODE 0x0000000000000004ULL
43 44
44/* 45/*
45 * General Notes: 46 * General Notes: