mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Merge pull request #3299 from lubinszARM:pr_asid
PiperOrigin-RevId: 323455097
This commit is contained in:
@@ -22,7 +22,8 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
runDataSize int
|
||||
runDataSize int
|
||||
hasGuestPCID bool
|
||||
)
|
||||
|
||||
func updateSystemValues(fd int) error {
|
||||
@@ -33,6 +34,7 @@ func updateSystemValues(fd int) error {
|
||||
}
|
||||
// Save the data.
|
||||
runDataSize = int(sz)
|
||||
hasGuestPCID = true
|
||||
|
||||
// Success.
|
||||
return nil
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/platform"
|
||||
"gvisor.dev/gvisor/pkg/sentry/platform/ring0"
|
||||
"gvisor.dev/gvisor/pkg/sentry/platform/ring0/pagetables"
|
||||
"gvisor.dev/gvisor/pkg/usermem"
|
||||
)
|
||||
|
||||
@@ -156,6 +157,14 @@ func (c *vCPU) initArchState() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Initialize the PCID database.
|
||||
if hasGuestPCID {
|
||||
// Note that NewPCIDs may return a nil table here, in which
|
||||
// case we simply don't use PCID support (see below). In
|
||||
// practice, this should not happen, however.
|
||||
c.PCIDs = pagetables.NewPCIDs(fixedKernelPCID+1, poolPCIDs)
|
||||
}
|
||||
|
||||
c.floatingPointState = arch.NewFloatingPointData()
|
||||
return nil
|
||||
}
|
||||
@@ -234,6 +243,13 @@ func (c *vCPU) SwitchToUser(switchOpts ring0.SwitchOpts, info *arch.SignalInfo)
|
||||
return nonCanonical(regs.Sp, int32(syscall.SIGBUS), info)
|
||||
}
|
||||
|
||||
// Assign PCIDs.
|
||||
if c.PCIDs != nil {
|
||||
var requireFlushPCID bool // Force a flush?
|
||||
switchOpts.UserASID, requireFlushPCID = c.PCIDs.Assign(switchOpts.PageTables)
|
||||
switchOpts.Flush = switchOpts.Flush || requireFlushPCID
|
||||
}
|
||||
|
||||
var vector ring0.Vector
|
||||
ttbr0App := switchOpts.PageTables.TTBR0_EL1(false, 0)
|
||||
c.SetTtbr0App(uintptr(ttbr0App))
|
||||
|
||||
Reference in New Issue
Block a user