ubwcp: Replace add_memory with memremap_pages
Replace add_memory with memremap_pages as that will ensure that ULA PA pages are not added to buddy. Change-Id: I66dd4c533011f9e7ed4ed45697216ba947a4e3a3 Signed-off-by: Liam Mark <quic_lmark@quicinc.com> Signed-off-by: Linux Image Build Automation <quic_ibautomat@quicinc.com>
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/set_memory.h>
|
||||
#include <linux/range.h>
|
||||
|
||||
MODULE_IMPORT_NS(DMA_BUF);
|
||||
|
||||
@@ -165,6 +166,8 @@ 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 {
|
||||
@@ -432,23 +435,29 @@ EXPORT_SYMBOL(ubwcp_get_hw_version);
|
||||
|
||||
static int add_ula_pa_memory(struct ubwcp_driver *ubwcp)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
int nid;
|
||||
void *ptr;
|
||||
|
||||
nid = memory_add_physaddr_to_nid(ubwcp->ula_pool_base);
|
||||
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);
|
||||
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 (ret) {
|
||||
ERR("add_memory() failed st:0x%lx sz:0x%lx err: %d",
|
||||
if (IS_ERR(ptr)) {
|
||||
ret = IS_ERR(ptr);
|
||||
ERR("memremap_pages() 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("add_memory() ula_pool_base:0x%llx, size:0x%zx, kernel addr:0x%p",
|
||||
DBG("memremap_pages() 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))));
|
||||
@@ -541,20 +550,10 @@ 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 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");
|
||||
}
|
||||
|
||||
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);
|
||||
ret = add_ula_pa_memory(ubwcp);
|
||||
if (ret) {
|
||||
ERR("Bad state: failed to add back memory");
|
||||
@@ -581,20 +580,11 @@ 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;
|
||||
|
@@ -103,14 +103,14 @@ DEFINE_EVENT(ubwcp_dmabuf_event, ubwcp_init_buffer_end,
|
||||
TP_ARGS(dbuf_addr)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_add_memory_start,
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_memremap_pages_start,
|
||||
|
||||
TP_PROTO(size_t size),
|
||||
|
||||
TP_ARGS(size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_add_memory_end,
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_memremap_pages_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_offline_and_remove_memory_start,
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_memunmap_pages_start,
|
||||
|
||||
TP_PROTO(size_t size),
|
||||
|
||||
TP_ARGS(size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_offline_and_remove_memory_end,
|
||||
DEFINE_EVENT(ubwcp_size_event, ubwcp_memunmap_pages_end,
|
||||
|
||||
TP_PROTO(size_t size),
|
||||
|
||||
|
Viittaa uudesa ongelmassa
Block a user