diff options
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c index c480121040..c86803c9ce 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c @@ -157,6 +157,8 @@ static ssize_t read_file_ring(struct file *file, char __user *user_buf, struct ag71xx_ring *ring, unsigned desc_reg) { + int ring_size = BIT(ring->order); + int ring_mask = ring_size - 1; char *buf; unsigned int buflen; unsigned int len = 0; @@ -167,7 +169,7 @@ static ssize_t read_file_ring(struct file *file, char __user *user_buf, u32 desc_hw; int i; - buflen = (ring->size * DESC_PRINT_LEN); + buflen = (ring_size * DESC_PRINT_LEN); buf = kmalloc(buflen, GFP_KERNEL); if (!buf) return -ENOMEM; @@ -178,13 +180,13 @@ static ssize_t read_file_ring(struct file *file, char __user *user_buf, spin_lock_irqsave(&ag->lock, flags); - curr = (ring->curr % ring->size); - dirty = (ring->dirty % ring->size); + curr = (ring->curr & ring_mask); + dirty = (ring->dirty & ring_mask); desc_hw = ag71xx_rr(ag, desc_reg); - for (i = 0; i < ring->size; i++) { + for (i = 0; i < ring_size; i++) { struct ag71xx_buf *ab = &ring->buf[i]; struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i); - u32 desc_dma = ((u32) ring->descs_dma) + i * ring->desc_size; + u32 desc_dma = ((u32) ring->descs_dma) + i * AG71XX_DESC_SIZE; len += snprintf(buf + len, buflen - len, "%3d %c%c%c %08x %08x %08x %08x %c %10lu\n", |