socsvn commit: r287504 - soc2015/stefano/ptnetmap/head/sys/dev/netmap
stefano at FreeBSD.org
stefano at FreeBSD.org
Tue Jun 23 19:11:10 UTC 2015
Author: stefano
Date: Tue Jun 23 19:11:09 2015
New Revision: 287504
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=287504
Log:
[ptnetmap/virtio] fix iowrite/ioread and mbuf allocation
change vtnet_ptnetmap_[iowrite4 | ioread4]:
like in linux version, we write/read 1 byte each time
use m_gethdr() instead of m_getjcl() to alloc the fake packet
Modified:
soc2015/stefano/ptnetmap/head/sys/dev/netmap/if_vtnet_netmap.h
Modified: soc2015/stefano/ptnetmap/head/sys/dev/netmap/if_vtnet_netmap.h
==============================================================================
--- soc2015/stefano/ptnetmap/head/sys/dev/netmap/if_vtnet_netmap.h Tue Jun 23 19:04:46 2015 (r287503)
+++ soc2015/stefano/ptnetmap/head/sys/dev/netmap/if_vtnet_netmap.h Tue Jun 23 19:11:09 2015 (r287504)
@@ -427,13 +427,23 @@
static void inline
vtnet_ptnetmap_iowrite4(device_t dev, uint32_t addr, uint32_t val)
{
- virtio_write_dev_config_4(dev, PTNETMAP_VIRTIO_IO_BASE + addr, val);
+ int i;
+ /* virtio_pci config_set use multiple iowrite8, we need to split the call and reverse the order */
+ for (i = 3; i >= 0; i--) {
+ virtio_write_dev_config_1(dev, PTNETMAP_VIRTIO_IO_BASE + addr + i, *(((uint8_t *)&val) + i));
+ }
}
static uint32_t inline
vtnet_ptnetmap_ioread4(device_t dev, uint32_t addr)
{
- return virtio_read_dev_config_4(dev, PTNETMAP_VIRTIO_IO_BASE + addr);
+ uint32_t val;
+ int i;
+
+ for (i = 0; i <= 3; i++) {
+ *(((uint8_t *)&val) + i) = virtio_read_dev_config_1(dev, PTNETMAP_VIRTIO_IO_BASE + addr + i);
+ }
+ return val;
}
static int
@@ -460,8 +470,8 @@
ptna->csb->guest_csb_on = 1;
/* Tell the device the CSB physical address. */
- vtnet_ptnetmap_iowrite4(dev, PTNETMAP_VIRTIO_IO_CSBBAH, (csb_phyaddr >> 32));
- vtnet_ptnetmap_iowrite4(dev, PTNETMAP_VIRTIO_IO_CSBBAL, (csb_phyaddr & 0x00000000ffffffffULL));
+ vtnet_ptnetmap_iowrite4(dev, PTNETMAP_VIRTIO_IO_CSBBAH, (uint32_t)(csb_phyaddr >> 32));
+ vtnet_ptnetmap_iowrite4(dev, PTNETMAP_VIRTIO_IO_CSBBAL, (uint32_t)(csb_phyaddr));
return 0;
}
@@ -664,7 +674,7 @@
for (i = 0; i < sc->vtnet_max_vq_pairs; i++) {
struct vtnet_txq *txq = &sc->vtnet_txqs[i];
struct mbuf *m0;
- m0 = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, 64);
+ m0 = m_gethdr(M_NOWAIT, MT_DATA);
m0->m_len = 64;
if (m0) {
More information about the svn-soc-all
mailing list