svn commit: r354218 - head/sys/dev/ena

Marcin Wojtas mw at FreeBSD.org
Thu Oct 31 15:38:18 UTC 2019


Author: mw
Date: Thu Oct 31 15:38:17 2019
New Revision: 354218
URL: https://svnweb.freebsd.org/changeset/base/354218

Log:
  Add WC support for arm64 in the ENA driver
  
  As the pmamp_change_attr() is public on arm64 since r351131, it can be
  used on the arm64 to map memory range as with the write combined
  attribute.
  
  It requires the driver to use generic VM_MEMATTR_WRITE_COMBINING flag
  instead of the x86 specific PAT_WRITE_COMBINING.
  
  Differential Revision: https://reviews.freebsd.org/D21931
  Submitted by:  Michal Krawczyk <mk at semihalf.com>
  Obtained from: Semihalf
  Sponsored by:  Amazon, Inc.

Modified:
  head/sys/dev/ena/ena.c

Modified: head/sys/dev/ena/ena.c
==============================================================================
--- head/sys/dev/ena/ena.c	Thu Oct 31 15:16:10 2019	(r354217)
+++ head/sys/dev/ena/ena.c	Thu Oct 31 15:38:17 2019	(r354218)
@@ -3309,7 +3309,7 @@ ena_calc_io_queue_num(struct ena_adapter *adapter,
 static int
 ena_enable_wc(struct resource *res)
 {
-#if defined(__i386) || defined(__amd64)
+#if defined(__i386) || defined(__amd64) || defined(__aarch64__)
 	vm_offset_t va;
 	vm_size_t len;
 	int rc;
@@ -3317,7 +3317,7 @@ ena_enable_wc(struct resource *res)
 	va = (vm_offset_t)rman_get_virtual(res);
 	len = rman_get_size(res);
 	/* Enable write combining */
-	rc = pmap_change_attr(va, len, PAT_WRITE_COMBINING);
+	rc = pmap_change_attr(va, len, VM_MEMATTR_WRITE_COMBINING);
 	if (unlikely(rc != 0)) {
 		ena_trace(ENA_ALERT, "pmap_change_attr failed, %d\n", rc);
 		return (rc);
@@ -4352,14 +4352,6 @@ ena_attach(device_t pdev)
 
 	set_default_llq_configurations(&llq_config);
 
-#if defined(__arm__) || defined(__aarch64__)
-	/*
-	 * Force LLQ disable, as the driver is not supporting WC enablement
-	 * on the ARM architecture. Using LLQ without WC would affect
-	 * performance in a negative way.
-	 */
-	ena_dev->supported_features &= ~(1 << ENA_ADMIN_LLQ);
-#endif
 	rc = ena_set_queues_placement_policy(pdev, ena_dev, &get_feat_ctx.llq,
 	     &llq_config);
 	if (unlikely(rc != 0)) {


More information about the svn-src-all mailing list