tests: fix qvirtqueue_kick
vq->avail.idx and vq->avail->ring[] are a 16bit values, so read and write them with readw()/writew() instead of readl()/writel(). To read/write a 16bit value with a 32bit accessor works fine on little-endian CPU but not on big endian CPU. [An equivalent patch for the writew() calls was also sent by Zhang Shuai <zhangshuai13@huawei.com>. --Stefan] Signed-off-by: Laurent Vivier <lvivier@redhat.com> Message-id: 1472330054-22607-1-git-send-email-lvivier@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									049105a3c1
								
							
						
					
					
						commit
						e49f827725
					
				@ -257,16 +257,16 @@ void qvirtqueue_kick(const QVirtioBus *bus, QVirtioDevice *d, QVirtQueue *vq,
 | 
				
			|||||||
                                                            uint32_t free_head)
 | 
					                                                            uint32_t free_head)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /* vq->avail->idx */
 | 
					    /* vq->avail->idx */
 | 
				
			||||||
    uint16_t idx = readl(vq->avail + 2);
 | 
					    uint16_t idx = readw(vq->avail + 2);
 | 
				
			||||||
    /* vq->used->flags */
 | 
					    /* vq->used->flags */
 | 
				
			||||||
    uint16_t flags;
 | 
					    uint16_t flags;
 | 
				
			||||||
    /* vq->used->avail_event */
 | 
					    /* vq->used->avail_event */
 | 
				
			||||||
    uint16_t avail_event;
 | 
					    uint16_t avail_event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* vq->avail->ring[idx % vq->size] */
 | 
					    /* vq->avail->ring[idx % vq->size] */
 | 
				
			||||||
    writel(vq->avail + 4 + (2 * (idx % vq->size)), free_head);
 | 
					    writew(vq->avail + 4 + (2 * (idx % vq->size)), free_head);
 | 
				
			||||||
    /* vq->avail->idx */
 | 
					    /* vq->avail->idx */
 | 
				
			||||||
    writel(vq->avail + 2, idx + 1);
 | 
					    writew(vq->avail + 2, idx + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Must read after idx is updated */
 | 
					    /* Must read after idx is updated */
 | 
				
			||||||
    flags = readw(vq->avail);
 | 
					    flags = readw(vq->avail);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user