Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4fdf08b5 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86: unify and correct the GDT_ENTRY() macro



Merge the GDT_ENTRY() macro between arch/x86/boot/pm.c and
arch/x86/kernel/acpi/sleep.c and put the new one in
<asm-x86/segment.h>.

While we're at it, correct the bitmasks for the limit and flags.  The
new version relies on using ULL constants in order to cause type
promotion rather than explicit casts; this avoids having to include
<linux/types.h> in <asm-x86/segments.h>.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 5b664cb2
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -98,12 +98,6 @@ static void reset_coprocessor(void)
/*
 * Set up the GDT
 */
#define GDT_ENTRY(flags, base, limit)		\
	(((u64)(base & 0xff000000) << 32) |	\
	 ((u64)flags << 40) |			\
	 ((u64)(limit & 0x00ff0000) << 32) |	\
	 ((u64)(base & 0x00ffffff) << 16) |	\
	 ((u64)(limit & 0x0000ffff)))

struct gdt_ptr {
	u16 len;
+1 −9
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/bootmem.h>
#include <linux/dmi.h>
#include <linux/cpumask.h>
#include <asm/segment.h>

#include "realmode/wakeup.h"
#include "sleep.h"
@@ -23,15 +24,6 @@ static unsigned long acpi_realmode;
static char temp_stack[10240];
#endif

/* XXX: this macro should move to asm-x86/segment.h and be shared with the
   boot code... */
#define GDT_ENTRY(flags, base, limit)		\
	(((u64)(base & 0xff000000) << 32) |	\
	 ((u64)flags << 40) |			\
	 ((u64)(limit & 0x00ff0000) << 32) |	\
	 ((u64)(base & 0x00ffffff) << 16) |	\
	 ((u64)(limit & 0x0000ffff)))

/**
 * acpi_save_state_mem - save kernel state
 *
+9 −0
Original line number Diff line number Diff line
#ifndef _ASM_X86_SEGMENT_H_
#define _ASM_X86_SEGMENT_H_

/* Constructor for a conventional segment GDT (or LDT) entry */
/* This is a macro so it can be used in initializers */
#define GDT_ENTRY(flags, base, limit)			\
	((((base)  & 0xff000000ULL) << (56-24)) |	\
	 (((flags) & 0x0000f0ffULL) << 40) |		\
	 (((limit) & 0x000f0000ULL) << (48-16)) |	\
	 (((base)  & 0x00ffffffULL) << 16) |		\
	 (((limit) & 0x0000ffffULL)))

/* Simple and small GDT entries for booting only */

#define GDT_ENTRY_BOOT_CS	2