コード例 #1
0
ファイル: prp_test.py プロジェクト: catogts/conformance
def test_create_sq_with_invalid_prp_offset(nvme0):
    prp = PRP(4096)
    cq = IOCQ(nvme0, 1, 10, prp)

    #Spec NVM-Express-1_4-2019.06.10-Ratified
    #Figure 153: In both cases, the PRP Entry shall have an offset of 0h.
    prp.offset = 0
    IOSQ(nvme0, 1, 10, prp, cqid=1).delete()

    prp.offset = 2048
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOSQ(nvme0, 1, 10, prp, cqid=1).delete()

    prp.offset = 2050
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOSQ(nvme0, 1, 10, prp, cqid=1).delete()

    prp.offset = 4095
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOSQ(nvme0, 2, 10, prp, cqid=1).delete()

    prp.offset = 255
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOSQ(nvme0, 2, 10, prp, cqid=1).delete()

    cq.delete()
コード例 #2
0
ファイル: read_test.py プロジェクト: catogts/conformance
def test_read_invalid_prp_address_offset(nvme0, cq, sq):
    # first cmd, invalid prp offset
    buf = PRP(4096, ptype=0xbeef, pvalue=100)
    first_byte = buf[0]
    logging.info(buf.dump(16))

    cmd = SQE(1, 1)
    buf.offset = 1
    cmd.prp1 = buf
    cmd[10] = 1
    cmd[11] = 0
    cmd[12] = 1
    sq[0] = cmd
    sq.tail = 1
    time.sleep(0.1)
    status = (cq[0][3] >> 17) & 0x7ff

    if status == 0:
        # write success, check data
        cmd = SQE(2, 1)
        buf = PRP(4096)
        cmd.prp1 = buf
        cmd[10] = 1
        cmd[11] = 0
        cmd[12] = 1
        sq[1] = cmd
        sq.tail = 2
        time.sleep(0.1)
        status = (cq[1][3] >> 17) & 0x7ff
        assert status == 0
        logging.info(buf.dump(16))
        assert first_byte == buf[0]
    else:
        assert status == 0x0013  # invalid namespace or format
コード例 #3
0
def test_create_sq_invalid_queue_address_offset(nvme0):
    cq = IOCQ(nvme0, 3, 10, PRP(4096))

    queue = PRP(4096)
    queue.offset = 1
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOSQ(nvme0, 1, 10, queue, cqid=3)

    cq.delete()
コード例 #4
0
ファイル: prp_test.py プロジェクト: catogts/conformance
def test_invalid_offset_prp_in_list(nvme0):
    cq = IOCQ(nvme0, 1, 10, PRP())
    sq = IOSQ(nvme0, 1, 10, PRP(), cqid=1)

    buf = PRP(ptype=32, pvalue=0xffffffff)
    buf.offset = 0x10

    prp_list = PRPList()
    prp_list.offset = 0x20

    for i in range(8):
        tmp = PRP(ptype=32, pvalue=0xffffffff)
        tmp.offset = 0x10
        prp_list[i] = tmp

    logging.info(prp_list.dump(64))
    print(buf.dump(32))
    for i in range(8):
        print(prp_list[i].dump(32))

    cmd = SQE(2, 1)
    cmd.prp1 = buf
    cmd.prp2 = prp_list
    cmd[12] = 0x4000001f
    sq[0] = cmd
    logging.info(sq[0])
    sq.tail = 1
    while CQE(cq[0]).p == 0:
        pass
    cq.head = 1
    logging.info(cq[0])
    logging.info(hex(cq[0][3] >> 17))
    print(buf.dump(32))
    for i in range(8):
        print(prp_list[i].dump(32))
    status = (cq[0][3] >> 17) & 0x3ff
    assert status == 0x0013 or status == 0

    sq.delete()
    cq.delete()
コード例 #5
0
def test_create_cq_invalid_queue_address_offset(nvme0):
    queue = PRP(4096)
    queue.offset = 1
    with pytest.warns(UserWarning, match="ERROR status: 00/13"):
        IOCQ(nvme0, 1, 10, queue)