Skip to content
Permalink
Browse files

kernel/vm: Inline the VMArea::name string.

B_OS_NAME_LENGTH is 32, char* is 8 (on x64), and this structure
has quite a lot of pointers in it so it is not like we really
needed to save those 24 bytes. Hitting malloc() in here is not
so great, especially because we usually have B_DONT_LOCK_KERNEL_SPACE
turned on, so just inline and avoid it.

Change-Id: I5c94955324cfda08972895826b61748c3b69096a
  • Loading branch information...
waddlesplash committed Jul 13, 2019
1 parent ca68cae commit 39665db167ff705c851bac241db7e118c2a20116
Showing with 3 additions and 13 deletions.
  1. +1 −1 headers/private/kernel/vm/VMArea.h
  2. +2 −12 src/system/kernel/vm/VMArea.cpp
@@ -97,8 +97,8 @@ struct VMArea {
};

public:
char* name;
area_id id;
char name[B_OS_NAME_LENGTH];
uint32 protection;
uint16 wiring;

@@ -28,7 +28,6 @@ static area_id sNextAreaID = 1;

VMArea::VMArea(VMAddressSpace* addressSpace, uint32 wiring, uint32 protection)
:
name(NULL),
protection(protection),
wiring(wiring),
memory_type(0),
@@ -53,23 +52,14 @@ VMArea::~VMArea()
// TODO: This might be stricter than necessary.

free_etc(page_protections, flags);
free_etc(name, flags);
}


status_t
VMArea::Init(const char* name, uint32 allocationFlags)
{
// restrict the area name to B_OS_NAME_LENGTH
size_t length = strlen(name) + 1;
if (length > B_OS_NAME_LENGTH)
length = B_OS_NAME_LENGTH;

// clone the name
this->name = (char*)malloc_etc(length, allocationFlags);
if (this->name == NULL)
return B_NO_MEMORY;
strlcpy(this->name, name, length);
// copy the name
strlcpy(this->name, name, B_OS_NAME_LENGTH);

id = atomic_add(&sNextAreaID, 1);
return B_OK;

0 comments on commit 39665db

Please sign in to comment.
You can’t perform that action at this time.