summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHector Martin <marcan@marcan.st>2025-04-20 13:58:04 +0200
committerTom Rini <trini@konsulko.com>2025-04-28 13:16:45 -0600
commit89cb15788a16f2568083d984c547ff41c56a2d68 (patch)
tree47f4a07d5bd49761d6807d17664d1f593379eee5
parent72bc04b8744c8b2756cbf115a88bc48fbde57c6b (diff)
arm: apple: rtkit: Add default buffer handlers
For devices without specific buffer methods, just assume we can give them raw memory pointers when they request a buffer. Signed-off-by: Hector Martin <marcan@marcan.st> Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
-rw-r--r--arch/arm/mach-apple/rtkit.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/mach-apple/rtkit.c b/arch/arm/mach-apple/rtkit.c
index 433ffb259ee..5e8e282ec0e 100644
--- a/arch/arm/mach-apple/rtkit.c
+++ b/arch/arm/mach-apple/rtkit.c
@@ -11,6 +11,7 @@
#include <linux/apple-mailbox.h>
#include <linux/bitfield.h>
#include <linux/errno.h>
+#include <linux/sizes.h>
#include <linux/types.h>
#define APPLE_RTKIT_EP_MGMT 0
@@ -97,6 +98,13 @@ void apple_rtkit_free(struct apple_rtkit *rtk)
rtk->shmem_destroy(rtk->cookie, &rtk->crashlog_buffer);
if (rtk->ioreport_buffer.buffer)
rtk->shmem_destroy(rtk->cookie, &rtk->ioreport_buffer);
+ } else {
+ if (rtk->syslog_buffer.buffer)
+ free(rtk->syslog_buffer.buffer);
+ if (rtk->crashlog_buffer.buffer)
+ free(rtk->crashlog_buffer.buffer);
+ if (rtk->ioreport_buffer.buffer)
+ free(rtk->ioreport_buffer.buffer);
}
free(rtk);
}
@@ -131,7 +139,7 @@ static int rtkit_handle_buf_req(struct apple_rtkit *rtk, int endpoint, struct ap
buf->dva = FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_IOVA, msg->msg0);
buf->size = num_4kpages << 12;
- buf->is_mapped = false;
+ buf->is_mapped = !!buf->dva;
if (rtk->shmem_setup) {
ret = rtk->shmem_setup(rtk->cookie, buf);
@@ -140,6 +148,12 @@ static int rtkit_handle_buf_req(struct apple_rtkit *rtk, int endpoint, struct ap
endpoint);
return ret;
}
+ } else if (!buf->is_mapped){
+ buf->buffer = memalign(SZ_16K, ALIGN(buf->size, SZ_16K));
+ if (!buf->buffer)
+ return -ENOMEM;
+
+ buf->dva = (u64)buf->buffer;
}
if (!buf->is_mapped) {