示例#1
0
static read_scrub_code_e do_scrub_read(sg_t *sg, uint64_t offset, uint32_t num_blocks, uint32_t block_size)
{
	unsigned char *buf = alloca(num_blocks * block_size);
	unsigned char cdb[16];
	unsigned char sense[255];
	sg_io_hdr_t hdr;

#if 0
	cdb_read_16(cdb, offset, num_blocks, false, true);
	if (!sg_submit(sg, cdb, 16, SG_DXFER_FROM_DEV, buf, num_blocks * block_size, sense, sizeof(sense), 30*1000, 0, NULL)) {
		fprintf(stderr, "Failed to submit READ(16): %m\n");
		return READ_ERROR;
	}
#else
	cdb_read_10(cdb, offset, num_blocks, false, true);
	if (!sg_submit(sg, cdb, 10, SG_DXFER_FROM_DEV, buf, num_blocks * block_size, sense, sizeof(sense), 30*1000, 0, NULL)) {
		fprintf(stderr, "Failed to submit READ(10): %m\n");
		return READ_ERROR;
	}
#endif

	if (!sg_read(sg, &hdr)) {
		fprintf(stderr, "Failed to read reply\n");
		return READ_ERROR;
	}

	if (hdr.status) {
		fprintf(stderr, "Error while reading data: %d\n", hdr.status);
		return READ_ERROR;
	}

	return READ_OK;
}
示例#2
0
static bool do_inquiry(sg_t *sg, scsi_vendor_t vendor, scsi_model_t model, scsi_fw_revision_t revision, scsi_serial_t serial, int *dev_type)
{
	unsigned char cdb[16];
	unsigned char sense[255];
	sg_io_hdr_t hdr;

	memset(inquiry_buf, 0, sizeof(inquiry_buf));

	cdb_inquiry(cdb, false, 0, sizeof(inquiry_buf));
	if (!sg_submit(sg, cdb, 6, SG_DXFER_FROM_DEV, inquiry_buf, sizeof(inquiry_buf), sense, sizeof(sense), 30*1000, 0, NULL)) {
		fprintf(stderr, "Failed to submit INQUIRY\n");
		return false;
	}

	if (!sg_read(sg, &hdr)) {
		fprintf(stderr, "Failed to read reply\n");
		return false;
	}

	if (hdr.status) {
		printf("Error while reading inquiry: %d\n", hdr.status);
		return false;
	}

	return parse_inquiry(inquiry_buf, sizeof(inquiry_buf), dev_type, vendor, model, revision, serial);
}
示例#3
0
static bool do_read_capacity(sg_t *sg, uint64_t *num_blocks, uint32_t *block_size)
{
	unsigned char cdb[16];
	unsigned char buf[256];
	unsigned char sense[255];
	sg_io_hdr_t hdr;

	cdb_read_capacity_16(cdb, sizeof(buf));
	if (!sg_submit(sg, cdb, 16, SG_DXFER_FROM_DEV, buf, sizeof(buf), sense, sizeof(sense), 30*1000, 0, NULL)) {
		fprintf(stderr, "Failed to submit READ CAPACITY 16\n");
		return false;
	}

	if (!sg_read(sg, &hdr)) {
		fprintf(stderr, "Failed to read reply\n");
		return false;
	}

	if (hdr.status) {
		fprintf(stderr, "Error while reading inquiry: %d\n", hdr.status);
		return false;
	}

	int prot_type;
	bool prot_en;
	return parse_read_capacity_16(buf, sizeof(buf), num_blocks, block_size, &prot_type, &prot_en);
}
示例#4
0
int main() {

    int i, j, k;
    const size_t n = 100;

    sg_handle_t *h = sg_create_handles(n*n);
    double **A = malloc(n*n*sizeof(double *));

    sg_init();

    for (j = 0; j < n; j++) {
        struct potrf_data potrf_args;

        for (k = 0; k < j; k++) {
            for (i = j+1; i < n; i++) {
                /* A[i,j] = A[i,j] - A[i,k] * (A[j,k])^t */
                struct gemm_data args;
                args.A = A[i*n+k];
                args.B = A[j*n+k];
                args.C = A[i*n+j];
                sg_submit(gemm, &args, sizeof(args), "gemm",
                          sg_read, h[i*n+k],
                          sg_read, h[j*n+k],
                          sg_add, h[i*n+j],
                          0);
            }
        }
        for (i = 0; i < j; i++) {
            /* A[j,j] = A[j,j] - A[j,i] * (A[j,i])^t */
            struct syrk_data args;
            args.A = A[j*n+i];
            args.B = A[j*n+j];
            sg_submit(syrk, &args, sizeof(args), "syrk",
                      sg_read, h[j*n+i],
                      sg_add, h[j*n+j],
                      0);
        }

        /* Cholesky Factorization of A[j,j] */
        potrf_args.A = A[j*n+j];
        sg_submit(potrf, &potrf_args, sizeof(potrf_args), "potrf",
                  sg_write, h[j*n+j],
                  0);

        for (i = j+1; i < n; i++) {
            /* A[i,j] <- A[i,j] = X * (A[j,j])^t */
            struct trsm_data args;
            args.A = A[j*n+j];
            args.B = A[i*n+j];
            sg_submit(trsm, &args, sizeof(args), "trsm",
                      sg_read, h[j*n+j],
                      sg_write, h[i*n+j],
                      0);
        }
    }
    sg_barrier();
    sg_write_log("execution.log");
    sg_destroy();

    free(A);
    sg_destroy_handles(h, n*n);

    return 0;
}