Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Jun 2015 19:11:09 GMT
From:      stefano@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r287504 - soc2015/stefano/ptnetmap/head/sys/dev/netmap
Message-ID:  <201506231911.t5NJB9b9056999@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506231911.t5NJB9b9056999>