mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Main batch of InfiniBand/RDMA changes for 3.13:
- Re-enable flow steering verbs with new improved userspace ABI - Fixes for slow connection due to GID lookup scalability - IPoIB fixes - Many fixes to HW drivers including mlx4, mlx5, ocrdma and qib - Further improvements to SRP error handling - Add new transport type for Cisco usNIC -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIcBAABCAAGBQJSil7BAAoJEENa44ZhAt0hbtgP/A+AmUalbOX6ZKzuOFxsrtY2 r55CX9b1JBeFM/Zhn2o6y+81lpCjkckJSggESMe4izNgocGw0nW4vYGN4SBynatj y8sR9OSn+G3ihuENrzG41MJUGEa5WbcNMy4boN+Oa+qyTlV/WjLR7Fv4WbikK7Wm o8FNlXiiDhMoGfHHG5J0MD0EQsnxuLDk2XP+ciu4tLtTs+wBka+gFK8WnMvztle3 gTeMNna5ilvCS2fdBxteuPA3KeDnJE9AgJSMJ2a4Rh+DR8uTgWYQ6n7amjmOc546 yhAKkoBkxPE10+Yj82WOPhCFxSeWcuSwJvpgv5dTVZ1XqUUcC1V3TEcZDHmyyHQ7 uPXgS1A+erBW3OYPBjZqtKvnHObscV12fL+rId3vIhcAQIbFroci08ZwPidEYRkn fvwlEKcrIsBIpRXEyjlFCxsiiDnfq1wC1VayMR3jrIK0P6idf1SXf/geiRp9+RGT wKUc0j51jvEx29qc65xuhEP9FQV9pCMxyd+FEE0d0KkjMz5hsIkjmcUcBbgF0CGg GEyDPlgRLv+vmWDGpT8XraaV/0CJOEQDIgB4WSN87/AZ4UoNt7spW2xqsLsp1toy 5e0100tpWUleTPLe/Wig5GtBdagQ2jAUK1+186CP93pFPtkwc4/7X3hyp7qPIPTz VDvT9DEy6zjSMCLpMcdo =xxC+ -----END PGP SIGNATURE----- Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband Pull infiniband/rdma updates from Roland Dreier: - Re-enable flow steering verbs with new improved userspace ABI - Fixes for slow connection due to GID lookup scalability - IPoIB fixes - Many fixes to HW drivers including mlx4, mlx5, ocrdma and qib - Further improvements to SRP error handling - Add new transport type for Cisco usNIC * tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (66 commits) IB/core: Re-enable create_flow/destroy_flow uverbs IB/core: extended command: an improved infrastructure for uverbs commands IB/core: Remove ib_uverbs_flow_spec structure from userspace IB/core: Use a common header for uverbs flow_specs IB/core: Make uverbs flow structure use names like verbs ones IB/core: Rename 'flow' structs to match other uverbs structs IB/core: clarify overflow/underflow checks on ib_create/destroy_flow IB/ucma: Convert use of typedef ctl_table to struct ctl_table IB/cm: Convert to using idr_alloc_cyclic() IB/mlx5: Fix page shift in create CQ for userspace IB/mlx4: Fix device max capabilities check IB/mlx5: Fix list_del of empty list IB/mlx5: Remove dead code IB/core: Encorce MR access rights rules on kernel consumers IB/mlx4: Fix endless loop in resize CQ RDMA/cma: Remove unused argument and minor dead code RDMA/ucma: Discard events for IDs not yet claimed by user space IB/core: Add Cisco usNIC rdma node and transport types RDMA/nes: Remove self-assignment from nes_query_qp() IB/srp: Report receive errors correctly ...
This commit is contained in:
commit
1ea406c0e0
52 changed files with 1973 additions and 595 deletions
|
|
@ -13,6 +13,27 @@ struct srp_rport_identifiers {
|
|||
u8 roles;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum srp_rport_state - SRP transport layer state
|
||||
* @SRP_RPORT_RUNNING: Transport layer operational.
|
||||
* @SRP_RPORT_BLOCKED: Transport layer not operational; fast I/O fail timer
|
||||
* is running and I/O has been blocked.
|
||||
* @SRP_RPORT_FAIL_FAST: Fast I/O fail timer has expired; fail I/O fast.
|
||||
* @SRP_RPORT_LOST: Device loss timer has expired; port is being removed.
|
||||
*/
|
||||
enum srp_rport_state {
|
||||
SRP_RPORT_RUNNING,
|
||||
SRP_RPORT_BLOCKED,
|
||||
SRP_RPORT_FAIL_FAST,
|
||||
SRP_RPORT_LOST,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct srp_rport
|
||||
* @lld_data: LLD private data.
|
||||
* @mutex: Protects against concurrent rport reconnect / fast_io_fail /
|
||||
* dev_loss_tmo activity.
|
||||
*/
|
||||
struct srp_rport {
|
||||
/* for initiator and target drivers */
|
||||
|
||||
|
|
@ -23,11 +44,43 @@ struct srp_rport {
|
|||
|
||||
/* for initiator drivers */
|
||||
|
||||
void *lld_data; /* LLD private data */
|
||||
void *lld_data;
|
||||
|
||||
struct mutex mutex;
|
||||
enum srp_rport_state state;
|
||||
bool deleted;
|
||||
int reconnect_delay;
|
||||
int failed_reconnects;
|
||||
struct delayed_work reconnect_work;
|
||||
int fast_io_fail_tmo;
|
||||
int dev_loss_tmo;
|
||||
struct delayed_work fast_io_fail_work;
|
||||
struct delayed_work dev_loss_work;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct srp_function_template
|
||||
* @has_rport_state: Whether or not to create the state, fast_io_fail_tmo and
|
||||
* dev_loss_tmo sysfs attribute for an rport.
|
||||
* @reset_timer_if_blocked: Whether or srp_timed_out() should reset the command
|
||||
* timer if the device on which it has been queued is blocked.
|
||||
* @reconnect_delay: If not NULL, points to the default reconnect_delay value.
|
||||
* @fast_io_fail_tmo: If not NULL, points to the default fast_io_fail_tmo value.
|
||||
* @dev_loss_tmo: If not NULL, points to the default dev_loss_tmo value.
|
||||
* @reconnect: Callback function for reconnecting to the target. See also
|
||||
* srp_reconnect_rport().
|
||||
* @terminate_rport_io: Callback function for terminating all outstanding I/O
|
||||
* requests for an rport.
|
||||
*/
|
||||
struct srp_function_template {
|
||||
/* for initiator drivers */
|
||||
bool has_rport_state;
|
||||
bool reset_timer_if_blocked;
|
||||
int *reconnect_delay;
|
||||
int *fast_io_fail_tmo;
|
||||
int *dev_loss_tmo;
|
||||
int (*reconnect)(struct srp_rport *rport);
|
||||
void (*terminate_rport_io)(struct srp_rport *rport);
|
||||
void (*rport_delete)(struct srp_rport *rport);
|
||||
/* for target drivers */
|
||||
int (* tsk_mgmt_response)(struct Scsi_Host *, u64, u64, int);
|
||||
|
|
@ -38,10 +91,36 @@ extern struct scsi_transport_template *
|
|||
srp_attach_transport(struct srp_function_template *);
|
||||
extern void srp_release_transport(struct scsi_transport_template *);
|
||||
|
||||
extern void srp_rport_get(struct srp_rport *rport);
|
||||
extern void srp_rport_put(struct srp_rport *rport);
|
||||
extern struct srp_rport *srp_rport_add(struct Scsi_Host *,
|
||||
struct srp_rport_identifiers *);
|
||||
extern void srp_rport_del(struct srp_rport *);
|
||||
|
||||
extern int srp_tmo_valid(int reconnect_delay, int fast_io_fail_tmo,
|
||||
int dev_loss_tmo);
|
||||
extern int srp_reconnect_rport(struct srp_rport *rport);
|
||||
extern void srp_start_tl_fail_timers(struct srp_rport *rport);
|
||||
extern void srp_remove_host(struct Scsi_Host *);
|
||||
|
||||
/**
|
||||
* srp_chkready() - evaluate the transport layer state before I/O
|
||||
*
|
||||
* Returns a SCSI result code that can be returned by the LLD queuecommand()
|
||||
* implementation. The role of this function is similar to that of
|
||||
* fc_remote_port_chkready().
|
||||
*/
|
||||
static inline int srp_chkready(struct srp_rport *rport)
|
||||
{
|
||||
switch (rport->state) {
|
||||
case SRP_RPORT_RUNNING:
|
||||
case SRP_RPORT_BLOCKED:
|
||||
default:
|
||||
return 0;
|
||||
case SRP_RPORT_FAIL_FAST:
|
||||
return DID_TRANSPORT_FAILFAST << 16;
|
||||
case SRP_RPORT_LOST:
|
||||
return DID_NO_CONNECT << 16;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue