|
@@ -69,9 +69,13 @@ enum {
|
|
SRP_TAG_NO_REQ = ~0U,
|
|
SRP_TAG_NO_REQ = ~0U,
|
|
SRP_TAG_TSK_MGMT = 1U << 31,
|
|
SRP_TAG_TSK_MGMT = 1U << 31,
|
|
|
|
|
|
- SRP_FMR_SIZE = 256,
|
|
|
|
|
|
+ SRP_FMR_SIZE = 512,
|
|
|
|
+ SRP_FMR_MIN_SIZE = 128,
|
|
SRP_FMR_POOL_SIZE = 1024,
|
|
SRP_FMR_POOL_SIZE = 1024,
|
|
- SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4
|
|
|
|
|
|
+ SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4,
|
|
|
|
+
|
|
|
|
+ SRP_MAP_ALLOW_FMR = 0,
|
|
|
|
+ SRP_MAP_NO_FMR = 1,
|
|
};
|
|
};
|
|
|
|
|
|
enum srp_target_state {
|
|
enum srp_target_state {
|
|
@@ -93,9 +97,9 @@ struct srp_device {
|
|
struct ib_pd *pd;
|
|
struct ib_pd *pd;
|
|
struct ib_mr *mr;
|
|
struct ib_mr *mr;
|
|
struct ib_fmr_pool *fmr_pool;
|
|
struct ib_fmr_pool *fmr_pool;
|
|
- int fmr_page_shift;
|
|
|
|
- int fmr_page_size;
|
|
|
|
u64 fmr_page_mask;
|
|
u64 fmr_page_mask;
|
|
|
|
+ int fmr_page_size;
|
|
|
|
+ int fmr_max_size;
|
|
};
|
|
};
|
|
|
|
|
|
struct srp_host {
|
|
struct srp_host {
|
|
@@ -112,7 +116,11 @@ struct srp_request {
|
|
struct list_head list;
|
|
struct list_head list;
|
|
struct scsi_cmnd *scmnd;
|
|
struct scsi_cmnd *scmnd;
|
|
struct srp_iu *cmd;
|
|
struct srp_iu *cmd;
|
|
- struct ib_pool_fmr *fmr;
|
|
|
|
|
|
+ struct ib_pool_fmr **fmr_list;
|
|
|
|
+ u64 *map_page;
|
|
|
|
+ struct srp_direct_buf *indirect_desc;
|
|
|
|
+ dma_addr_t indirect_dma_addr;
|
|
|
|
+ short nfmr;
|
|
short index;
|
|
short index;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -130,6 +138,10 @@ struct srp_target_port {
|
|
u32 lkey;
|
|
u32 lkey;
|
|
u32 rkey;
|
|
u32 rkey;
|
|
enum srp_target_state state;
|
|
enum srp_target_state state;
|
|
|
|
+ unsigned int max_iu_len;
|
|
|
|
+ unsigned int cmd_sg_cnt;
|
|
|
|
+ unsigned int indirect_size;
|
|
|
|
+ bool allow_ext_sg;
|
|
|
|
|
|
/* Everything above this point is used in the hot path of
|
|
/* Everything above this point is used in the hot path of
|
|
* command processing. Try to keep them packed into cachelines.
|
|
* command processing. Try to keep them packed into cachelines.
|
|
@@ -144,6 +156,7 @@ struct srp_target_port {
|
|
struct Scsi_Host *scsi_host;
|
|
struct Scsi_Host *scsi_host;
|
|
char target_name[32];
|
|
char target_name[32];
|
|
unsigned int scsi_id;
|
|
unsigned int scsi_id;
|
|
|
|
+ unsigned int sg_tablesize;
|
|
|
|
|
|
struct ib_sa_path_rec path;
|
|
struct ib_sa_path_rec path;
|
|
__be16 orig_dgid[8];
|
|
__be16 orig_dgid[8];
|
|
@@ -179,4 +192,19 @@ struct srp_iu {
|
|
enum dma_data_direction direction;
|
|
enum dma_data_direction direction;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+struct srp_map_state {
|
|
|
|
+ struct ib_pool_fmr **next_fmr;
|
|
|
|
+ struct srp_direct_buf *desc;
|
|
|
|
+ u64 *pages;
|
|
|
|
+ dma_addr_t base_dma_addr;
|
|
|
|
+ u32 fmr_len;
|
|
|
|
+ u32 total_len;
|
|
|
|
+ unsigned int npages;
|
|
|
|
+ unsigned int nfmr;
|
|
|
|
+ unsigned int ndesc;
|
|
|
|
+ struct scatterlist *unmapped_sg;
|
|
|
|
+ int unmapped_index;
|
|
|
|
+ dma_addr_t unmapped_addr;
|
|
|
|
+};
|
|
|
|
+
|
|
#endif /* IB_SRP_H */
|
|
#endif /* IB_SRP_H */
|