Commit 131b4b36 authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu: rename amdgpu_wb_* functions

add device for consistency.
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 75758255
...@@ -1171,8 +1171,8 @@ struct amdgpu_wb { ...@@ -1171,8 +1171,8 @@ struct amdgpu_wb {
unsigned long used[DIV_ROUND_UP(AMDGPU_MAX_WB, BITS_PER_LONG)]; unsigned long used[DIV_ROUND_UP(AMDGPU_MAX_WB, BITS_PER_LONG)];
}; };
int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb); int amdgpu_device_wb_get(struct amdgpu_device *adev, u32 *wb);
void amdgpu_wb_free(struct amdgpu_device *adev, u32 wb); void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb);
void amdgpu_get_pcie_info(struct amdgpu_device *adev); void amdgpu_get_pcie_info(struct amdgpu_device *adev);
......
...@@ -530,7 +530,7 @@ static int amdgpu_device_wb_init(struct amdgpu_device *adev) ...@@ -530,7 +530,7 @@ static int amdgpu_device_wb_init(struct amdgpu_device *adev)
} }
/** /**
* amdgpu_wb_get - Allocate a wb entry * amdgpu_device_wb_get - Allocate a wb entry
* *
* @adev: amdgpu_device pointer * @adev: amdgpu_device pointer
* @wb: wb index * @wb: wb index
...@@ -538,7 +538,7 @@ static int amdgpu_device_wb_init(struct amdgpu_device *adev) ...@@ -538,7 +538,7 @@ static int amdgpu_device_wb_init(struct amdgpu_device *adev)
* Allocate a wb slot for use by the driver (all asics). * Allocate a wb slot for use by the driver (all asics).
* Returns 0 on success or -EINVAL on failure. * Returns 0 on success or -EINVAL on failure.
*/ */
int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb) int amdgpu_device_wb_get(struct amdgpu_device *adev, u32 *wb)
{ {
unsigned long offset = find_first_zero_bit(adev->wb.used, adev->wb.num_wb); unsigned long offset = find_first_zero_bit(adev->wb.used, adev->wb.num_wb);
...@@ -552,14 +552,14 @@ int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb) ...@@ -552,14 +552,14 @@ int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb)
} }
/** /**
* amdgpu_wb_free - Free a wb entry * amdgpu_device_wb_free - Free a wb entry
* *
* @adev: amdgpu_device pointer * @adev: amdgpu_device pointer
* @wb: wb index * @wb: wb index
* *
* Free a wb slot allocated for use by the driver (all asics) * Free a wb slot allocated for use by the driver (all asics)
*/ */
void amdgpu_wb_free(struct amdgpu_device *adev, u32 wb) void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb)
{ {
if (wb < adev->wb.num_wb) if (wb < adev->wb.num_wb)
__clear_bit(wb >> 3, adev->wb.used); __clear_bit(wb >> 3, adev->wb.used);
......
...@@ -203,7 +203,7 @@ int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev, ...@@ -203,7 +203,7 @@ int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev,
spin_lock_init(&kiq->ring_lock); spin_lock_init(&kiq->ring_lock);
r = amdgpu_wb_get(adev, &adev->virt.reg_val_offs); r = amdgpu_device_wb_get(adev, &adev->virt.reg_val_offs);
if (r) if (r)
return r; return r;
...@@ -229,7 +229,7 @@ int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev, ...@@ -229,7 +229,7 @@ int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev,
void amdgpu_gfx_kiq_free_ring(struct amdgpu_ring *ring, void amdgpu_gfx_kiq_free_ring(struct amdgpu_ring *ring,
struct amdgpu_irq_src *irq) struct amdgpu_irq_src *irq)
{ {
amdgpu_wb_free(ring->adev, ring->adev->virt.reg_val_offs); amdgpu_device_wb_free(ring->adev, ring->adev->virt.reg_val_offs);
amdgpu_ring_fini(ring); amdgpu_ring_fini(ring);
} }
......
...@@ -92,15 +92,15 @@ int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size, ...@@ -92,15 +92,15 @@ int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
} }
return 0; return 0;
} else { } else {
r = amdgpu_wb_get(adev, &adev->irq.ih.wptr_offs); r = amdgpu_device_wb_get(adev, &adev->irq.ih.wptr_offs);
if (r) { if (r) {
dev_err(adev->dev, "(%d) ih wptr_offs wb alloc failed\n", r); dev_err(adev->dev, "(%d) ih wptr_offs wb alloc failed\n", r);
return r; return r;
} }
r = amdgpu_wb_get(adev, &adev->irq.ih.rptr_offs); r = amdgpu_device_wb_get(adev, &adev->irq.ih.rptr_offs);
if (r) { if (r) {
amdgpu_wb_free(adev, adev->irq.ih.wptr_offs); amdgpu_device_wb_free(adev, adev->irq.ih.wptr_offs);
dev_err(adev->dev, "(%d) ih rptr_offs wb alloc failed\n", r); dev_err(adev->dev, "(%d) ih rptr_offs wb alloc failed\n", r);
return r; return r;
} }
...@@ -133,8 +133,8 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev) ...@@ -133,8 +133,8 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev)
amdgpu_bo_free_kernel(&adev->irq.ih.ring_obj, amdgpu_bo_free_kernel(&adev->irq.ih.ring_obj,
&adev->irq.ih.gpu_addr, &adev->irq.ih.gpu_addr,
(void **)&adev->irq.ih.ring); (void **)&adev->irq.ih.ring);
amdgpu_wb_free(adev, adev->irq.ih.wptr_offs); amdgpu_device_wb_free(adev, adev->irq.ih.wptr_offs);
amdgpu_wb_free(adev, adev->irq.ih.rptr_offs); amdgpu_device_wb_free(adev, adev->irq.ih.rptr_offs);
} }
} }
......
...@@ -263,25 +263,25 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, ...@@ -263,25 +263,25 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
return r; return r;
} }
r = amdgpu_wb_get(adev, &ring->rptr_offs); r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
if (r) { if (r) {
dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r); dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
return r; return r;
} }
r = amdgpu_wb_get(adev, &ring->wptr_offs); r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
if (r) { if (r) {
dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r); dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
return r; return r;
} }
r = amdgpu_wb_get(adev, &ring->fence_offs); r = amdgpu_device_wb_get(adev, &ring->fence_offs);
if (r) { if (r) {
dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r); dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
return r; return r;
} }
r = amdgpu_wb_get(adev, &ring->cond_exe_offs); r = amdgpu_device_wb_get(adev, &ring->cond_exe_offs);
if (r) { if (r) {
dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc failed\n", r); dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc failed\n", r);
return r; return r;
...@@ -348,11 +348,11 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring) ...@@ -348,11 +348,11 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
if (!(ring->adev) || !(ring->adev->rings[ring->idx])) if (!(ring->adev) || !(ring->adev->rings[ring->idx]))
return; return;
amdgpu_wb_free(ring->adev, ring->rptr_offs); amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
amdgpu_wb_free(ring->adev, ring->wptr_offs); amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
amdgpu_wb_free(ring->adev, ring->cond_exe_offs); amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
amdgpu_wb_free(ring->adev, ring->fence_offs); amdgpu_device_wb_free(ring->adev, ring->fence_offs);
amdgpu_bo_free_kernel(&ring->ring_obj, amdgpu_bo_free_kernel(&ring->ring_obj,
&ring->gpu_addr, &ring->gpu_addr,
......
...@@ -626,7 +626,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -626,7 +626,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring)
u32 tmp; u32 tmp;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
return r; return r;
...@@ -639,7 +639,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -639,7 +639,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring)
r = amdgpu_ring_alloc(ring, 5); r = amdgpu_ring_alloc(ring, 5);
if (r) { if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0));
...@@ -663,7 +663,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -663,7 +663,7 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring)
ring->idx, tmp); ring->idx, tmp);
r = -EINVAL; r = -EINVAL;
} }
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -686,7 +686,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -686,7 +686,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring, long timeout)
u64 gpu_addr; u64 gpu_addr;
long r; long r;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
return r; return r;
...@@ -735,7 +735,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -735,7 +735,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(adev, &ib, NULL); amdgpu_ib_free(adev, &ib, NULL);
dma_fence_put(f); dma_fence_put(f);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
......
...@@ -600,7 +600,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring) ...@@ -600,7 +600,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring)
u32 tmp; u32 tmp;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
return r; return r;
...@@ -613,7 +613,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring) ...@@ -613,7 +613,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring)
r = amdgpu_ring_alloc(ring, 5); r = amdgpu_ring_alloc(ring, 5);
if (r) { if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -639,7 +639,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring) ...@@ -639,7 +639,7 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring)
ring->idx, tmp); ring->idx, tmp);
r = -EINVAL; r = -EINVAL;
} }
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -662,7 +662,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -662,7 +662,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout)
u64 gpu_addr; u64 gpu_addr;
long r; long r;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
return r; return r;
...@@ -715,7 +715,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -715,7 +715,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(adev, &ib, NULL); amdgpu_ib_free(adev, &ib, NULL);
dma_fence_put(f); dma_fence_put(f);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
......
...@@ -867,7 +867,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -867,7 +867,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring)
u32 tmp; u32 tmp;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
return r; return r;
...@@ -880,7 +880,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -880,7 +880,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring)
r = amdgpu_ring_alloc(ring, 5); r = amdgpu_ring_alloc(ring, 5);
if (r) { if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -906,7 +906,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -906,7 +906,7 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring)
ring->idx, tmp); ring->idx, tmp);
r = -EINVAL; r = -EINVAL;
} }
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -929,7 +929,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -929,7 +929,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
u64 gpu_addr; u64 gpu_addr;
long r; long r;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
return r; return r;
...@@ -981,7 +981,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -981,7 +981,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(adev, &ib, NULL); amdgpu_ib_free(adev, &ib, NULL);
dma_fence_put(f); dma_fence_put(f);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
......
...@@ -869,7 +869,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -869,7 +869,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring)
u32 tmp; u32 tmp;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
return r; return r;
...@@ -882,7 +882,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -882,7 +882,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring)
r = amdgpu_ring_alloc(ring, 5); r = amdgpu_ring_alloc(ring, 5);
if (r) { if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -908,7 +908,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring) ...@@ -908,7 +908,7 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring)
ring->idx, tmp); ring->idx, tmp);
r = -EINVAL; r = -EINVAL;
} }
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -931,7 +931,7 @@ static int sdma_v4_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -931,7 +931,7 @@ static int sdma_v4_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
u32 tmp = 0; u32 tmp = 0;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
return r; return r;
...@@ -983,7 +983,7 @@ static int sdma_v4_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -983,7 +983,7 @@ static int sdma_v4_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(adev, &ib, NULL); amdgpu_ib_free(adev, &ib, NULL);
dma_fence_put(f); dma_fence_put(f);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
......
...@@ -221,7 +221,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -221,7 +221,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring)
u32 tmp; u32 tmp;
u64 gpu_addr; u64 gpu_addr;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
return r; return r;
...@@ -234,7 +234,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -234,7 +234,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring)
r = amdgpu_ring_alloc(ring, 4); r = amdgpu_ring_alloc(ring, 4);
if (r) { if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -258,7 +258,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring) ...@@ -258,7 +258,7 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring)
ring->idx, tmp); ring->idx, tmp);
r = -EINVAL; r = -EINVAL;
} }
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
...@@ -281,7 +281,7 @@ static int si_dma_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -281,7 +281,7 @@ static int si_dma_ring_test_ib(struct amdgpu_ring *ring, long timeout)
u64 gpu_addr; u64 gpu_addr;
long r; long r;
r = amdgpu_wb_get(adev, &index); r = amdgpu_device_wb_get(adev, &index);
if (r) { if (r) {
dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r); dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
return r; return r;
...@@ -328,7 +328,7 @@ static int si_dma_ring_test_ib(struct amdgpu_ring *ring, long timeout) ...@@ -328,7 +328,7 @@ static int si_dma_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(adev, &ib, NULL); amdgpu_ib_free(adev, &ib, NULL);
dma_fence_put(f); dma_fence_put(f);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_device_wb_free(adev, index);
return r; return r;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment