Skip to content

Commit

Permalink
[SCSI] IBM VSCSI Client: sending client info to server
Browse files Browse the repository at this point in the history
Fix the problem in IBM VSCSI Client where the client doesn't send the
information which is expected by the server.

Signed-off-by: Linda Xie <lxie@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
Linda Xie authored and James Bottomley committed Jul 3, 2005
1 parent fc2b035 commit b4687ca
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 3 deletions.
4 changes: 1 addition & 3 deletions drivers/scsi/ibmvscsi/ibmvscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ static int max_channel = 3;
static int init_timeout = 5;
static int max_requests = 50;

#define IBMVSCSI_VERSION "1.5.5"
#define IBMVSCSI_VERSION "1.5.6"

MODULE_DESCRIPTION("IBM Virtual SCSI");
MODULE_AUTHOR("Dave Boutcher");
Expand Down Expand Up @@ -675,8 +675,6 @@ static void send_mad_adapter_info(struct ibmvscsi_host_data *hostdata)
struct viosrp_adapter_info *req;
struct srp_event_struct *evt_struct;

memset(&hostdata->madapter_info, 0x00, sizeof(hostdata->madapter_info));

evt_struct = get_event_struct(&hostdata->pool);
if (!evt_struct) {
printk(KERN_ERR "ibmvscsi: couldn't allocate an event "
Expand Down
51 changes: 51 additions & 0 deletions drivers/scsi/ibmvscsi/rpa_vscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include "ibmvscsi.h"
#include "srp.h"

static char partition_name[97] = "UNKNOWN";
static unsigned int partition_number = -1;

/* ------------------------------------------------------------
* Routines for managing the command/response queue
Expand Down Expand Up @@ -148,6 +152,48 @@ static void ibmvscsi_task(void *data)
}
}

static void gather_partition_info(void)
{
struct device_node *rootdn;

char *ppartition_name;
unsigned int *p_number_ptr;

/* Retrieve information about this partition */
rootdn = find_path_device("/");
if (!rootdn) {
return;
}

ppartition_name =
get_property(rootdn, "ibm,partition-name", NULL);
if (ppartition_name)
strncpy(partition_name, ppartition_name,
sizeof(partition_name));
p_number_ptr =
(unsigned int *)get_property(rootdn, "ibm,partition-no",
NULL);
if (p_number_ptr)
partition_number = *p_number_ptr;
}

static void set_adapter_info(struct ibmvscsi_host_data *hostdata)
{
memset(&hostdata->madapter_info, 0x00,
sizeof(hostdata->madapter_info));

printk(KERN_INFO "rpa_vscsi: SPR_VERSION: %s\n", SRP_VERSION);
strcpy(hostdata->madapter_info.srp_version, SRP_VERSION);

strncpy(hostdata->madapter_info.partition_name, partition_name,
sizeof(hostdata->madapter_info.partition_name));

hostdata->madapter_info.partition_number = partition_number;

hostdata->madapter_info.mad_version = 1;
hostdata->madapter_info.os_type = 2;
}

/**
* initialize_crq_queue: - Initializes and registers CRQ with hypervisor
* @queue: crq_queue to initialize and register
Expand Down Expand Up @@ -177,6 +223,9 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
if (dma_mapping_error(queue->msg_token))
goto map_failed;

gather_partition_info();
set_adapter_info(hostdata);

rc = plpar_hcall_norets(H_REG_CRQ,
vdev->unit_address,
queue->msg_token, PAGE_SIZE);
Expand Down Expand Up @@ -246,6 +295,8 @@ void ibmvscsi_reset_crq_queue(struct crq_queue *queue,
memset(queue->msgs, 0x00, PAGE_SIZE);
queue->cur = 0;

set_adapter_info(hostdata);

/* And re-open it again */
rc = plpar_hcall_norets(H_REG_CRQ,
vdev->unit_address,
Expand Down
2 changes: 2 additions & 0 deletions drivers/scsi/ibmvscsi/srp.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
#ifndef SRP_H
#define SRP_H

#define SRP_VERSION "16.a"

#define PACKED __attribute__((packed))

enum srp_types {
Expand Down

0 comments on commit b4687ca

Please sign in to comment.