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

Commit ce9d8d9f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (70 commits)
  [SCSI] pmcraid: add support for set timestamp command and other fixes
  [SCSI] pmcraid: remove duplicate struct member
  [SCSI] qla4xxx: Fix cmd check in qla4xxx_cmd_wait
  [SCSI] megaraid_sas: Version and documentation update
  [SCSI] megaraid_sas: Add three times Online controller reset
  [SCSI] megaraid_sas: Add input parameter for max_sectors
  [SCSI] megaraid_sas: support devices update flag
  [SCSI] libosd: write/read_sg_kern API
  [SCSI] libosd: Support for scatter gather write/read commands
  [SCSI] libosd: Free resources in reverse order of allocation
  [SCSI] libosd: Fix bug in attr_page handling
  [SCSI] lpfc 8.3.18: Update lpfc driver version to 8.3.18
  [SCSI] lpfc 8.3.18: Add new WQE support
  [SCSI] lpfc 8.3.18: Fix critical errors
  [SCSI] lpfc 8.3.18: Adapter Shutdown and Unregistration cleanup
  [SCSI] lpfc 8.3.18: Add logic to detect last devloss timeout
  [SCSI] lpfc 8.3.18: Add support of received ELS commands
  [SCSI] lpfc 8.3.18: FC/FCoE Discovery fixes
  [SCSI] ipr: add definitions for a new adapter
  [SCSI] bfa: fix comments for c files
  ...
parents 82279e6b 592488a3
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
1 Release Date    : Thur.  May 03, 2010 09:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.31-rc1
3 Older Version   : 00.00.04.17.1-rc1

1.	Add the Online Controller Reset (OCR) to the Driver.
	OCR is the new feature for megaraid_sas driver which
	will allow the fw to do the chip reset which will not
	affact the OS behavious.

	To add the OCR support, driver need to do:
		a). reset the controller chips -- Xscale and Gen2 which
		will change the function calls and add the reset function
		related to this two chips.

		b). during the reset, driver will store the pending cmds
		which not returned by FW to driver's pending queue.  Driver
		will re-issue those pending cmds again to FW after the OCR
		finished.

		c). In driver's timeout routine, driver will report to
		OS as reset. Also driver's queue routine will block the
		cmds until the OCR finished.

		d). in Driver's ISR routine, if driver get the FW state as
		state change, FW in Failure status and FW support online controller
		reset (OCR), driver will start to do the controller reset.

		e). In driver's IOCTL routine, the application cmds will wait for the
		OCR to finish, then issue the cmds to FW.

		f). Before driver kill adapter, driver will do last chance of
		OCR to see if driver can bring back the FW.

2.	Add the support update flag to the driver to tell LSI megaraid_sas
	application which driver will support the device update.  So application
	will not need to do the device update after application add/del the device
	from the system.
3.	In driver's timeout routine, driver will do three time reset if fw is in
	failed state.  Driver will kill adapter if can't bring back FW after the
	this three times reset.
4.	Add the input parameter max_sectors to 1MB support to our GEN2 controller.
	customer can use the input paramenter max_sectors to add 1MB support to GEN2
	controller.

1 Release Date    : Thur.  Oct 29, 2009 09:12:45 PST 2009 -
1 Release Date    : Thur.  Oct 29, 2009 09:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang
			Bo Yang
+1 −1
Original line number Original line Diff line number Diff line
@@ -270,7 +270,7 @@ void zfcp_fc_eval_fcp_rsp(struct fcp_resp_with_ext *fcp_rsp,
	if (unlikely(rsp_flags & FCP_SNS_LEN_VAL)) {
	if (unlikely(rsp_flags & FCP_SNS_LEN_VAL)) {
		sense = (char *) &fcp_rsp[1];
		sense = (char *) &fcp_rsp[1];
		if (rsp_flags & FCP_RSP_LEN_VAL)
		if (rsp_flags & FCP_RSP_LEN_VAL)
			sense += fcp_rsp->ext.fr_sns_len;
			sense += fcp_rsp->ext.fr_rsp_len;
		sense_len = min(fcp_rsp->ext.fr_sns_len,
		sense_len = min(fcp_rsp->ext.fr_sns_len,
				(u32) SCSI_SENSE_BUFFERSIZE);
				(u32) SCSI_SENSE_BUFFERSIZE);
		memcpy(scsi->sense_buffer, sense, sense_len);
		memcpy(scsi->sense_buffer, sense, sense_len);
+0 −3
Original line number Original line Diff line number Diff line
@@ -532,9 +532,6 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req)
		fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
		fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN;
		adapter->hydra_version = 0;
		adapter->hydra_version = 0;


		atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,
				&adapter->status);

		zfcp_fsf_link_down_info_eval(req,
		zfcp_fsf_link_down_info_eval(req,
			&qtcb->header.fsf_status_qual.link_down_info);
			&qtcb->header.fsf_status_qual.link_down_info);
		break;
		break;
+2 −2
Original line number Original line Diff line number Diff line
@@ -142,6 +142,8 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
		return -ENOMEM;
		return -ENOMEM;
	}
	}


	get_device(&port->dev);

	if (device_register(&unit->dev)) {
	if (device_register(&unit->dev)) {
		put_device(&unit->dev);
		put_device(&unit->dev);
		return -ENOMEM;
		return -ENOMEM;
@@ -152,8 +154,6 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
		return -EINVAL;
		return -EINVAL;
	}
	}


	get_device(&port->dev);

	write_lock_irq(&port->unit_list_lock);
	write_lock_irq(&port->unit_list_lock);
	list_add_tail(&unit->list, &port->unit_list);
	list_add_tail(&unit->list, &port->unit_list);
	write_unlock_irq(&port->unit_list_lock);
	write_unlock_irq(&port->unit_list_lock);
+24 −24
Original line number Original line Diff line number Diff line
@@ -29,13 +29,13 @@ struct bfa_s;
typedef void (*bfa_isr_func_t) (struct bfa_s *bfa, struct bfi_msg_s *m);
typedef void (*bfa_isr_func_t) (struct bfa_s *bfa, struct bfi_msg_s *m);
typedef void    (*bfa_cb_cbfn_t) (void *cbarg, bfa_boolean_t complete);
typedef void    (*bfa_cb_cbfn_t) (void *cbarg, bfa_boolean_t complete);


/**
/*
 * Interrupt message handlers
 * Interrupt message handlers
 */
 */
void bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m);
void bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m);
void bfa_isr_bind(enum bfi_mclass mc, bfa_isr_func_t isr_func);
void bfa_isr_bind(enum bfi_mclass mc, bfa_isr_func_t isr_func);


/**
/*
 * Request and response queue related defines
 * Request and response queue related defines
 */
 */
#define BFA_REQQ_NELEMS_MIN	(4)
#define BFA_REQQ_NELEMS_MIN	(4)
@@ -59,8 +59,8 @@ void bfa_isr_bind(enum bfi_mclass mc, bfa_isr_func_t isr_func);
		(__bfa)->iocfc.req_cq_pi[__reqq]++;			\
		(__bfa)->iocfc.req_cq_pi[__reqq]++;			\
		(__bfa)->iocfc.req_cq_pi[__reqq] &=			\
		(__bfa)->iocfc.req_cq_pi[__reqq] &=			\
			((__bfa)->iocfc.cfg.drvcfg.num_reqq_elems - 1); \
			((__bfa)->iocfc.cfg.drvcfg.num_reqq_elems - 1); \
		bfa_reg_write((__bfa)->iocfc.bfa_regs.cpe_q_pi[__reqq],	\
		writel((__bfa)->iocfc.req_cq_pi[__reqq],		\
			      (__bfa)->iocfc.req_cq_pi[__reqq]);      \
			(__bfa)->iocfc.bfa_regs.cpe_q_pi[__reqq]);	\
		mmiowb();      \
		mmiowb();      \
	} while (0)
	} while (0)


@@ -76,7 +76,7 @@ void bfa_isr_bind(enum bfi_mclass mc, bfa_isr_func_t isr_func);
	(__index) &= ((__size) - 1);			\
	(__index) &= ((__size) - 1);			\
} while (0)
} while (0)


/**
/*
 * Queue element to wait for room in request queue. FIFO order is
 * Queue element to wait for room in request queue. FIFO order is
 * maintained when fullfilling requests.
 * maintained when fullfilling requests.
 */
 */
@@ -86,7 +86,7 @@ struct bfa_reqq_wait_s {
	void		*cbarg;
	void		*cbarg;
};
};


/**
/*
 * Circular queue usage assignments
 * Circular queue usage assignments
 */
 */
enum {
enum {
@@ -113,7 +113,7 @@ bfa_reqq_winit(struct bfa_reqq_wait_s *wqe, void (*qresume) (void *cbarg),


#define bfa_reqq(__bfa, __reqq)	(&(__bfa)->reqq_waitq[__reqq])
#define bfa_reqq(__bfa, __reqq)	(&(__bfa)->reqq_waitq[__reqq])


/**
/*
 * static inline void
 * static inline void
 * bfa_reqq_wait(struct bfa_s *bfa, int reqq, struct bfa_reqq_wait_s *wqe)
 * bfa_reqq_wait(struct bfa_s *bfa, int reqq, struct bfa_reqq_wait_s *wqe)
 */
 */
@@ -130,7 +130,7 @@ bfa_reqq_winit(struct bfa_reqq_wait_s *wqe, void (*qresume) (void *cbarg),
#define bfa_reqq_wcancel(__wqe)	list_del(&(__wqe)->qe)
#define bfa_reqq_wcancel(__wqe)	list_del(&(__wqe)->qe)




/**
/*
 * Generic BFA callback element.
 * Generic BFA callback element.
 */
 */
struct bfa_cb_qe_s {
struct bfa_cb_qe_s {
@@ -163,7 +163,7 @@ struct bfa_cb_qe_s {
	} while (0)
	} while (0)




/**
/*
 * PCI devices supported by the current BFA
 * PCI devices supported by the current BFA
 */
 */
struct bfa_pciid_s {
struct bfa_pciid_s {
@@ -173,7 +173,7 @@ struct bfa_pciid_s {


extern char     bfa_version[];
extern char     bfa_version[];


/**
/*
 * BFA memory resources
 * BFA memory resources
 */
 */
enum bfa_mem_type {
enum bfa_mem_type {
@@ -202,19 +202,19 @@ struct bfa_meminfo_s {
	((_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp)
	((_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp)


struct bfa_iocfc_regs_s {
struct bfa_iocfc_regs_s {
	bfa_os_addr_t   intr_status;
	void __iomem	*intr_status;
	bfa_os_addr_t   intr_mask;
	void __iomem	*intr_mask;
	bfa_os_addr_t   cpe_q_pi[BFI_IOC_MAX_CQS];
	void __iomem	*cpe_q_pi[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   cpe_q_ci[BFI_IOC_MAX_CQS];
	void __iomem	*cpe_q_ci[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   cpe_q_depth[BFI_IOC_MAX_CQS];
	void __iomem	*cpe_q_depth[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   cpe_q_ctrl[BFI_IOC_MAX_CQS];
	void __iomem	*cpe_q_ctrl[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   rme_q_ci[BFI_IOC_MAX_CQS];
	void __iomem	*rme_q_ci[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   rme_q_pi[BFI_IOC_MAX_CQS];
	void __iomem	*rme_q_pi[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   rme_q_depth[BFI_IOC_MAX_CQS];
	void __iomem	*rme_q_depth[BFI_IOC_MAX_CQS];
	bfa_os_addr_t   rme_q_ctrl[BFI_IOC_MAX_CQS];
	void __iomem	*rme_q_ctrl[BFI_IOC_MAX_CQS];
};
};


/**
/*
 * MSIX vector handlers
 * MSIX vector handlers
 */
 */
#define BFA_MSIX_MAX_VECTORS	22
#define BFA_MSIX_MAX_VECTORS	22
@@ -224,7 +224,7 @@ struct bfa_msix_s {
	bfa_msix_handler_t handler[BFA_MSIX_MAX_VECTORS];
	bfa_msix_handler_t handler[BFA_MSIX_MAX_VECTORS];
};
};


/**
/*
 * Chip specific interfaces
 * Chip specific interfaces
 */
 */
struct bfa_hwif_s {
struct bfa_hwif_s {
@@ -343,7 +343,7 @@ int bfa_iocfc_get_pbc_vports(struct bfa_s *bfa,
				struct bfi_pbc_vport_s *pbc_vport);
				struct bfi_pbc_vport_s *pbc_vport);




/**
/*
 *----------------------------------------------------------------------
 *----------------------------------------------------------------------
 *		BFA public interfaces
 *		BFA public interfaces
 *----------------------------------------------------------------------
 *----------------------------------------------------------------------
Loading