Преглед изворни кода

Revert "ubwcp: Replace add_memory with memremap_pages"

This reverts commit 34e2be74abf5c8ca3fe20b3e7f9723d7059f7faf.

Change-Id: I0675d4796fbaa630187a7f885b5e61ecb4a8f2dc
Signed-off-by: Linux Image Build Automation <[email protected]>
Linux Image Build Automation пре 1 година
родитељ
комит
c4301d0ce3
2 измењених фајлова са 40 додато и 30 уклоњено
  1. 36 26
      ubwcp/ubwcp_main.c
  2. 4 4
      ubwcp/ubwcp_trace.h

+ 36 - 26
ubwcp/ubwcp_main.c

@@ -27,7 +27,6 @@
 #include <linux/clk.h>
 #include <linux/iommu.h>
 #include <linux/set_memory.h>
-#include <linux/range.h>
 
 MODULE_IMPORT_NS(DMA_BUF);
 
@@ -166,8 +165,6 @@ struct ubwcp_driver {
 	struct mutex hw_range_ck_lock; /* range ck */
 	struct list_head err_handler_list; /* error handler list */
 	spinlock_t err_handler_list_lock;  /* err_handler_list lock */
-
-	struct dev_pagemap pgmap;
 };
 
 struct ubwcp_buf {
@@ -435,29 +432,23 @@ EXPORT_SYMBOL(ubwcp_get_hw_version);
 
 static int add_ula_pa_memory(struct ubwcp_driver *ubwcp)
 {
-	int ret = 0;
+	int ret;
 	int nid;
-	void *ptr;
 
 	nid = memory_add_physaddr_to_nid(ubwcp->ula_pool_base);
-	DBG("calling memremap_pages()...");
-	ubwcp->pgmap.type = MEMORY_DEVICE_GENERIC;
-	ubwcp->pgmap.nr_range = 1;
-	ubwcp->pgmap.range.start = ubwcp->ula_pool_base;
-	ubwcp->pgmap.range.end = ubwcp->ula_pool_base + ubwcp->ula_pool_size - 1;
-	trace_ubwcp_memremap_pages_start(ubwcp->ula_pool_size);
-	ptr = memremap_pages(&ubwcp->pgmap, nid);
-	trace_ubwcp_memremap_pages_end(ubwcp->ula_pool_size);
-
-	if (IS_ERR(ptr)) {
-		ret = IS_ERR(ptr);
-		ERR("memremap_pages() failed st:0x%lx sz:0x%lx err: %d",
+	DBG("calling add_memory()...");
+	trace_ubwcp_add_memory_start(ubwcp->ula_pool_size);
+	ret = add_memory(nid, ubwcp->ula_pool_base, ubwcp->ula_pool_size, MHP_NONE);
+	trace_ubwcp_add_memory_end(ubwcp->ula_pool_size);
+
+	if (ret) {
+		ERR("add_memory() failed st:0x%lx sz:0x%lx err: %d",
 			ubwcp->ula_pool_base,
 			ubwcp->ula_pool_size,
 			ret);
 		/* Fix to put driver in invalid state */
 	} else {
-		DBG("memremap_pages() ula_pool_base:0x%llx, size:0x%zx, kernel addr:0x%p",
+		DBG("add_memory() ula_pool_base:0x%llx, size:0x%zx, kernel addr:0x%p",
 			ubwcp->ula_pool_base,
 			ubwcp->ula_pool_size,
 			page_to_virt(pfn_to_page(PFN_DOWN(ubwcp->ula_pool_base))));
@@ -550,10 +541,20 @@ static int dec_num_non_lin_buffers(struct ubwcp_driver *ubwcp)
 				trace_ubwcp_offline_sync_end(ubwcp->ula_pool_size);
 				DBG("Cancel memory offlining");
 
-				DBG("Calling memunmap_pages() for ULA PA pool");
-				trace_ubwcp_memunmap_pages_start(ubwcp->ula_pool_size);
-				memunmap_pages(&ubwcp->pgmap);
-				trace_ubwcp_memunmap_pages_end(ubwcp->ula_pool_size);
+				DBG("Calling offline_and_remove_memory() for ULA PA pool");
+				trace_ubwcp_offline_and_remove_memory_start(ubwcp->ula_pool_size);
+				ret = offline_and_remove_memory(ubwcp->ula_pool_base,
+						ubwcp->ula_pool_size);
+				trace_ubwcp_offline_and_remove_memory_end(ubwcp->ula_pool_size);
+				if (ret) {
+					ERR("remove memory failed st:0x%lx sz:0x%lx err: %d",
+						ubwcp->ula_pool_base,
+						ubwcp->ula_pool_size, ret);
+					goto err_remove_mem;
+				} else {
+					DBG("DONE: calling remove memory for ULA PA pool");
+				}
+
 				ret = add_ula_pa_memory(ubwcp);
 				if (ret) {
 					ERR("Bad state: failed to add back memory");
@@ -580,11 +581,20 @@ static int dec_num_non_lin_buffers(struct ubwcp_driver *ubwcp)
 			sync_offset += sync_size;
 		}
 		trace_ubwcp_offline_sync_end(ubwcp->ula_pool_size);
-		DBG("Calling memunmap_pages() for ULA PA pool");
-		trace_ubwcp_memunmap_pages_start(ubwcp->ula_pool_size);
-		memunmap_pages(&ubwcp->pgmap);
-		trace_ubwcp_memunmap_pages_end(ubwcp->ula_pool_size);
 
+		DBG("Calling offline_and_remove_memory() for ULA PA pool");
+		trace_ubwcp_offline_and_remove_memory_start(ubwcp->ula_pool_size);
+		ret = offline_and_remove_memory(ubwcp->ula_pool_base, ubwcp->ula_pool_size);
+		trace_ubwcp_offline_and_remove_memory_end(ubwcp->ula_pool_size);
+		if (ret) {
+			ERR("offline_and_remove_memory failed st:0x%lx sz:0x%lx err: %d",
+				ubwcp->ula_pool_base,
+				ubwcp->ula_pool_size, ret);
+			/* Fix to put driver in invalid state */
+			goto err_remove_mem;
+		} else {
+			DBG("DONE: calling offline_and_remove_memory() for ULA PA pool");
+		}
 		DBG("Calling power OFF ...");
 		ubwcp_power(ubwcp, false);
 		ubwcp->mem_online = false;

+ 4 - 4
ubwcp/ubwcp_trace.h

@@ -103,14 +103,14 @@ DEFINE_EVENT(ubwcp_dmabuf_event, ubwcp_init_buffer_end,
 	TP_ARGS(dbuf_addr)
 );
 
-DEFINE_EVENT(ubwcp_size_event, ubwcp_memremap_pages_start,
+DEFINE_EVENT(ubwcp_size_event, ubwcp_add_memory_start,
 
 	TP_PROTO(size_t size),
 
 	TP_ARGS(size)
 );
 
-DEFINE_EVENT(ubwcp_size_event, ubwcp_memremap_pages_end,
+DEFINE_EVENT(ubwcp_size_event, ubwcp_add_memory_end,
 
 	TP_PROTO(size_t size),
 
@@ -215,14 +215,14 @@ DEFINE_EVENT(ubwcp_size_event, ubwcp_hw_flush_end,
 	TP_ARGS(size)
 );
 
-DEFINE_EVENT(ubwcp_size_event, ubwcp_memunmap_pages_start,
+DEFINE_EVENT(ubwcp_size_event, ubwcp_offline_and_remove_memory_start,
 
 	TP_PROTO(size_t size),
 
 	TP_ARGS(size)
 );
 
-DEFINE_EVENT(ubwcp_size_event, ubwcp_memunmap_pages_end,
+DEFINE_EVENT(ubwcp_size_event, ubwcp_offline_and_remove_memory_end,
 
 	TP_PROTO(size_t size),