megaraid_sas : Support for Avago's Single server High Availability product
This patch will add support for Single Server High Availability(SSHA) cluster support. Here is the short decsription of changes done to add support for SSHA- 1) Host will send system's Unique ID based on DMI_PRODUCT_UUID to firmware. 2) Toggle the devhandle in LDIO path for Remote LDs. Signed-off-by: Kashyap Desai <kashyap.desai@avagotech.com> Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:

committed by
James Bottomley

parent
09fced1917
commit
5765c5b8b3
@@ -53,6 +53,7 @@
|
||||
#include <scsi/scsi_device.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_dbg.h>
|
||||
#include <linux/dmi.h>
|
||||
|
||||
#include "megaraid_sas_fusion.h"
|
||||
#include "megaraid_sas.h"
|
||||
@@ -579,6 +580,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance)
|
||||
union MEGASAS_REQUEST_DESCRIPTOR_UNION req_desc;
|
||||
int i;
|
||||
struct megasas_header *frame_hdr;
|
||||
const char *sys_info;
|
||||
|
||||
fusion = instance->ctrl_context;
|
||||
|
||||
@@ -641,6 +643,16 @@ megasas_ioc_init_fusion(struct megasas_instance *instance)
|
||||
/* Convert capability to LE32 */
|
||||
cpu_to_le32s((u32 *)&init_frame->driver_operations.mfi_capabilities);
|
||||
|
||||
sys_info = dmi_get_system_info(DMI_PRODUCT_UUID);
|
||||
if (instance->system_info_buf && sys_info) {
|
||||
memcpy(instance->system_info_buf->systemId, sys_info,
|
||||
strlen(sys_info) > 64 ? 64 : strlen(sys_info));
|
||||
instance->system_info_buf->systemIdLength =
|
||||
strlen(sys_info) > 64 ? 64 : strlen(sys_info);
|
||||
init_frame->system_info_lo = instance->system_info_h;
|
||||
init_frame->system_info_hi = 0;
|
||||
}
|
||||
|
||||
init_frame->queue_info_new_phys_addr_hi =
|
||||
cpu_to_le32(upper_32_bits(ioc_init_handle));
|
||||
init_frame->queue_info_new_phys_addr_lo =
|
||||
@@ -1572,6 +1584,14 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
|
||||
cmd->pd_r1_lb = io_info.pd_after_lb;
|
||||
} else
|
||||
scp->SCp.Status &= ~MEGASAS_LOAD_BALANCE_FLAG;
|
||||
|
||||
if ((raidLUN[0] == 1) &&
|
||||
(local_map_ptr->raidMap.devHndlInfo[io_info.pd_after_lb].validHandles > 2)) {
|
||||
instance->dev_handle = !(instance->dev_handle);
|
||||
io_info.devHandle =
|
||||
local_map_ptr->raidMap.devHndlInfo[io_info.pd_after_lb].devHandle[instance->dev_handle];
|
||||
}
|
||||
|
||||
cmd->request_desc->SCSIIO.DevHandle = io_info.devHandle;
|
||||
io_request->DevHandle = io_info.devHandle;
|
||||
/* populate the LUN field */
|
||||
|
Reference in New Issue
Block a user