@@ -188,37 +188,37 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
188188 * TLS descriptors are currently at a different place compared to i386.
189189 * Hopefully nobody expects them at a fixed place (Wine?)
190190 */
191- [GDT_ENTRY_KERNEL32_CS ] = GDT_ENTRY_INIT (0xc09b , 0 , 0xfffff ),
192- [GDT_ENTRY_KERNEL_CS ] = GDT_ENTRY_INIT (0xa09b , 0 , 0xfffff ),
193- [GDT_ENTRY_KERNEL_DS ] = GDT_ENTRY_INIT (0xc093 , 0 , 0xfffff ),
194- [GDT_ENTRY_DEFAULT_USER32_CS ] = GDT_ENTRY_INIT (0xc0fb , 0 , 0xfffff ),
195- [GDT_ENTRY_DEFAULT_USER_DS ] = GDT_ENTRY_INIT (0xc0f3 , 0 , 0xfffff ),
196- [GDT_ENTRY_DEFAULT_USER_CS ] = GDT_ENTRY_INIT (0xa0fb , 0 , 0xfffff ),
191+ [GDT_ENTRY_KERNEL32_CS ] = GDT_ENTRY_INIT (DESC_CODE32 | _DESC_ACCESSED , 0 , 0xfffff ),
192+ [GDT_ENTRY_KERNEL_CS ] = GDT_ENTRY_INIT (DESC_CODE64 | _DESC_ACCESSED , 0 , 0xfffff ),
193+ [GDT_ENTRY_KERNEL_DS ] = GDT_ENTRY_INIT (DESC_DATA64 | _DESC_ACCESSED , 0 , 0xfffff ),
194+ [GDT_ENTRY_DEFAULT_USER32_CS ] = GDT_ENTRY_INIT (DESC_CODE32 | DESC_USER | _DESC_ACCESSED , 0 , 0xfffff ),
195+ [GDT_ENTRY_DEFAULT_USER_DS ] = GDT_ENTRY_INIT (DESC_DATA64 | DESC_USER | _DESC_ACCESSED , 0 , 0xfffff ),
196+ [GDT_ENTRY_DEFAULT_USER_CS ] = GDT_ENTRY_INIT (DESC_CODE64 | DESC_USER | _DESC_ACCESSED , 0 , 0xfffff ),
197197#else
198- [GDT_ENTRY_KERNEL_CS ] = GDT_ENTRY_INIT (0xc09a , 0 , 0xfffff ),
199- [GDT_ENTRY_KERNEL_DS ] = GDT_ENTRY_INIT (0xc092 , 0 , 0xfffff ),
200- [GDT_ENTRY_DEFAULT_USER_CS ] = GDT_ENTRY_INIT (0xc0fa , 0 , 0xfffff ),
201- [GDT_ENTRY_DEFAULT_USER_DS ] = GDT_ENTRY_INIT (0xc0f2 , 0 , 0xfffff ),
198+ [GDT_ENTRY_KERNEL_CS ] = GDT_ENTRY_INIT (DESC_CODE32 , 0 , 0xfffff ),
199+ [GDT_ENTRY_KERNEL_DS ] = GDT_ENTRY_INIT (DESC_DATA32 , 0 , 0xfffff ),
200+ [GDT_ENTRY_DEFAULT_USER_CS ] = GDT_ENTRY_INIT (DESC_CODE32 | DESC_USER , 0 , 0xfffff ),
201+ [GDT_ENTRY_DEFAULT_USER_DS ] = GDT_ENTRY_INIT (DESC_DATA32 | DESC_USER , 0 , 0xfffff ),
202202 /*
203203 * Segments used for calling PnP BIOS have byte granularity.
204204 * They code segments and data segments have fixed 64k limits,
205205 * the transfer segment sizes are set at run time.
206206 */
207- [GDT_ENTRY_PNPBIOS_CS32 ] = GDT_ENTRY_INIT (0x409a , 0 , 0xffff ),
208- [GDT_ENTRY_PNPBIOS_CS16 ] = GDT_ENTRY_INIT (0x009a , 0 , 0xffff ),
209- [GDT_ENTRY_PNPBIOS_DS ] = GDT_ENTRY_INIT (0x0092 , 0 , 0xffff ),
210- [GDT_ENTRY_PNPBIOS_TS1 ] = GDT_ENTRY_INIT (0x0092 , 0 , 0 ),
211- [GDT_ENTRY_PNPBIOS_TS2 ] = GDT_ENTRY_INIT (0x0092 , 0 , 0 ),
207+ [GDT_ENTRY_PNPBIOS_CS32 ] = GDT_ENTRY_INIT (DESC_CODE32_BIOS , 0 , 0xffff ),
208+ [GDT_ENTRY_PNPBIOS_CS16 ] = GDT_ENTRY_INIT (DESC_CODE16 , 0 , 0xffff ),
209+ [GDT_ENTRY_PNPBIOS_DS ] = GDT_ENTRY_INIT (DESC_DATA16 , 0 , 0xffff ),
210+ [GDT_ENTRY_PNPBIOS_TS1 ] = GDT_ENTRY_INIT (DESC_DATA16 , 0 , 0 ),
211+ [GDT_ENTRY_PNPBIOS_TS2 ] = GDT_ENTRY_INIT (DESC_DATA16 , 0 , 0 ),
212212 /*
213213 * The APM segments have byte granularity and their bases
214214 * are set at run time. All have 64k limits.
215215 */
216- [GDT_ENTRY_APMBIOS_BASE ] = GDT_ENTRY_INIT (0x409a , 0 , 0xffff ),
217- [GDT_ENTRY_APMBIOS_BASE + 1 ] = GDT_ENTRY_INIT (0x009a , 0 , 0xffff ),
218- [GDT_ENTRY_APMBIOS_BASE + 2 ] = GDT_ENTRY_INIT (0x4092 , 0 , 0xffff ),
216+ [GDT_ENTRY_APMBIOS_BASE ] = GDT_ENTRY_INIT (DESC_CODE32_BIOS , 0 , 0xffff ),
217+ [GDT_ENTRY_APMBIOS_BASE + 1 ] = GDT_ENTRY_INIT (DESC_CODE16 , 0 , 0xffff ),
218+ [GDT_ENTRY_APMBIOS_BASE + 2 ] = GDT_ENTRY_INIT (DESC_DATA32_BIOS , 0 , 0xffff ),
219219
220- [GDT_ENTRY_ESPFIX_SS ] = GDT_ENTRY_INIT (0xc092 , 0 , 0xfffff ),
221- [GDT_ENTRY_PERCPU ] = GDT_ENTRY_INIT (0xc092 , 0 , 0xfffff ),
220+ [GDT_ENTRY_ESPFIX_SS ] = GDT_ENTRY_INIT (DESC_DATA32 , 0 , 0xfffff ),
221+ [GDT_ENTRY_PERCPU ] = GDT_ENTRY_INIT (DESC_DATA32 , 0 , 0xfffff ),
222222#endif
223223} };
224224EXPORT_PER_CPU_SYMBOL_GPL (gdt_page );
0 commit comments