Skip to content

Conversation

@kuqin12
Copy link
Contributor

@kuqin12 kuqin12 commented Dec 1, 2025

Description

Current implementation of the StandaloneMmIplPei has a few design differences compared to MM supervisor.

This will introduce more maintenance burden as we move to the next phase of MM supervisor.

This change is made to try to converge the 2 designs, at least from the perspective of IPL, in order to use the IPL as is and still conform to the MM supervisor modelity.

For details on how to complete these options and their meaning refer to CONTRIBUTING.md.

  • Impacts functionality?
  • Impacts security?
  • Breaking change?
  • Includes tests?
  • Includes documentation?

How This Was Tested

This is tested on QEMU Q35 and booted to UEFI shell.

Integration Instructions

N/A

Size = sizeof (CommunicateHeader);
Status = Communicate (NULL, &CommunicateHeader, &Size);
ASSERT_EFI_ERROR (Status);
// ASSERT_EFI_ERROR (Status);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what to do with this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is PRed as is. Will see if others have different opinions.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For clarity, can you provide a simple comparison of design for this point?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The issue behind this is that the supervised Standalone MM hosts this handler in supervisor channel. Thus to invoke this handler, we need to indicate the given MM communicate call is targeting supervisor handler pool (we have that wrapped in separate PPI and protocol).

The call here will issue an MMI with user mode data populated and will end up with EFI_NOT_FOUND error because there is not handler for driver dispatching in the user space.

The removal of the asserts here is basically telling this IPL to ignore the error, and it will be handled later through a supv specific module.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't followed the full code path, but would one of these options work?

  • Make separate INF with the function that starts the call stack different for a "communicate" and "non-communicate" version of StandaloneMmIplPei.
  • Setup a unique/appropriate status code return type that can bubble back up in this case and only assert if an error code and not that return type.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh, i see :) then we will bury that in the ring3 broker layer. That is fine with me. Let me try that in a bit. Thanks~!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ended up doing the second option, given the ring 3 broker is not dispatched yet. And the change will likely look like this: kuqin12/mu_feature_mm_supv@348e63e

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's a little more preferable anyway to reduce platform integration overhead by avoiding two IPL INFs to pick from.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, this change is updated.

The current module checks the value of gEfiAcpiVariableGuid hobs and
could assert if there is no such hob available.

However, these hobs are only available if a platform elects to support
S3. Thus this change moves the hob copy logic behind a PCD check to
prevent unnecessary asserts.

Signed-off-by: Kun Qin <[email protected]>
@kuqin12 kuqin12 changed the title [test] Dxe mm merge [Rebase & FF] Making StandaloneMmIplPei usable Dec 9, 2025
@kuqin12 kuqin12 changed the title [Rebase & FF] Making StandaloneMmIplPei usable [Rebase & FF] Making StandaloneMmIplPei compatible with supervisor Dec 9, 2025
@kuqin12 kuqin12 marked this pull request as ready for review December 9, 2025 01:31
The current module checks the return status of MmIplDispatchMmDrivers.
Any failure would cause the system to assert.

However, this should not be deemed as fatal since the result could be
entirely implementation defined on the Standalone MM core side.

This change loosens the check and not to do asserts on dispatcher
requests.

Signed-off-by: Kun Qin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants