From ba74b352bd40f5d4b4f38a451c6204d29cc03e1a Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 1 Apr 2025 22:53:35 +0300 Subject: [PATCH] Kernel: Make BufferField actually access the buffer and not copy --- kernel/kernel/ACPI/AML/Node.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/kernel/kernel/ACPI/AML/Node.cpp b/kernel/kernel/ACPI/AML/Node.cpp index c986d7d4..a449509b 100644 --- a/kernel/kernel/ACPI/AML/Node.cpp +++ b/kernel/kernel/ACPI/AML/Node.cpp @@ -1167,17 +1167,18 @@ namespace Kernel::ACPI::AML } } - auto buffer_node = TRY(parse_node(context)); - if (buffer_node.type != Node::Type::Buffer) + auto buffer_node_ref = TRY(parse_node(context, true)); + + auto* buffer_node = &buffer_node_ref; + if (buffer_node->type == Node::Type::Reference) + buffer_node = &buffer_node->as.reference->node; + + if (buffer_node->type != Node::Type::Buffer) { dwarnln("CreateField buffer is {}", buffer_node); return BAN::Error::from_errno(EINVAL); } - Node dummy_integer {}; - dummy_integer.type = Node::Type::Integer; - dummy_integer.as.integer.value = 0; - auto index_node = TRY(convert_node(TRY(parse_node(context)), ConvInteger, sizeof(uint64_t))); if (bit_count == 0) @@ -1196,7 +1197,7 @@ namespace Kernel::ACPI::AML Node buffer_field; buffer_field.type = Node::Type::BufferField; - buffer_field.as.buffer_field.buffer = buffer_node.as.str_buf; + buffer_field.as.buffer_field.buffer = buffer_node->as.str_buf; buffer_field.as.buffer_field.buffer->ref_count++; buffer_field.as.buffer_field.bit_count = bit_count; buffer_field.as.buffer_field.bit_offset = index_in_bits ? index_node.as.integer.value : index_node.as.integer.value * 8;