Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed26cfec authored by Vasu Dev's avatar Vasu Dev Committed by James Bottomley
Browse files

[SCSI] libfc: cache align struct fc_fcp_pkt fields



Re-arrange its fields to avoid padding and have better
cacheline alignments.

Removed not used start_time, end_time and last_pkt_time
fields.

This all reduced this struct size to 448 from 480 and
that also reduced one cacheline on x86_64 beside
eliminating 8 pads. However kept logical fields together.

Signed-off-by: default avatarVasu Dev <vasu.dev@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarYi Zou <yi.zou@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 5c609ff9
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -759,7 +759,6 @@ static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg)
		goto out;
	if (fc_fcp_lock_pkt(fsp))
		goto out;
	fsp->last_pkt_time = jiffies;

	if (fh->fh_type == FC_TYPE_BLS) {
		fc_fcp_abts_resp(fsp, fp);
@@ -1148,7 +1147,6 @@ static int fc_fcp_cmd_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp,
		rc = -1;
		goto unlock;
	}
	fsp->last_pkt_time = jiffies;
	fsp->seq_ptr = seq;
	fc_fcp_pkt_hold(fsp);	/* hold for fc_fcp_pkt_destroy */

+21 −28
Original line number Diff line number Diff line
@@ -281,9 +281,6 @@ struct fc_seq_els_data {
 * @timer:           The command timer
 * @tm_done:         Completion indicator
 * @wait_for_comp:   Indicator to wait for completion of the I/O (in jiffies)
 * @start_time:      Timestamp indicating the start of the I/O (in jiffies)
 * @end_time:        Timestamp indicating the end of the I/O (in jiffies)
 * @last_pkt_time:   Timestamp of the last frame received (in jiffies)
 * @data_len:        The length of the data
 * @cdb_cmd:         The CDB command
 * @xfer_len:        The transfer length
@@ -304,50 +301,46 @@ struct fc_seq_els_data {
 * @recov_seq:       The sequence for REC or SRR
 */
struct fc_fcp_pkt {
	/* Housekeeping information */
	struct fc_lport   *lp;
	u16		  state;
	atomic_t	  ref_cnt;
	spinlock_t	  scsi_pkt_lock;
	atomic_t	  ref_cnt;

	/* SCSI command and data transfer information */
	u32		  data_len;

	/* SCSI I/O related information */
	struct scsi_cmnd  *cmd;
	struct list_head  list;

	/* Timeout related information */
	struct timer_list timer;
	struct completion tm_done;
	int	          wait_for_comp;
	unsigned long	  start_time;
	unsigned long	  end_time;
	unsigned long	  last_pkt_time;

	/* SCSI command and data transfer information */
	u32		  data_len;

	/* Transport related veriables */
	struct fcp_cmnd   cdb_cmd;
	size_t		  xfer_len;
	u16		  xfer_ddp;
	u32		  xfer_contig_end;
	u16		  max_payload;
	/* Housekeeping information */
	struct fc_lport   *lp;
	u8		  state;

	/* SCSI/FCP return status */
	u32		  io_status;
	u8		  cdb_status;
	u8		  status_code;
	u8		  scsi_comp_flags;
	u32		  io_status;
	u32		  req_flags;
	u32		  scsi_resid;

	/* Transport related veriables */
	size_t		  xfer_len;
	struct fcp_cmnd   cdb_cmd;
	u32		  xfer_contig_end;
	u16		  max_payload;
	u16		  xfer_ddp;

	/* Associated structures */
	struct fc_rport	  *rport;
	struct fc_seq	  *seq_ptr;

	/* Error Processing information */
	u8		  recov_retry;
	/* Timeout/error related information */
	struct timer_list timer;
	int	          wait_for_comp;
	u32		  recov_retry;
	struct fc_seq	  *recov_seq;
};
	struct completion tm_done;
} ____cacheline_aligned_in_smp;

/*
 * Structure and function definitions for managing Fibre Channel Exchanges