On Thu, Jul 30, 2015 at 11:35 AM, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote: > On 07/30/2015 02:14 PM, Andy Lutomirski wrote: >> >> On Thu, Jul 30, 2015 at 10:56 AM, Boris Ostrovsky >> <boris.ostrovsky@xxxxxxxxxx> wrote: >>> >>> On 07/28/2015 01:29 AM, Andy Lutomirski wrote: >>> >>>> + >>>> +static inline void load_mm_ldt(struct mm_struct *mm) >>>> +{ >>>> + struct ldt_struct *ldt; >>>> + DEBUG_LOCKS_WARN_ON(!irqs_disabled()); >>> >>> >>> >>> I thought this was supposed to be checking preemptible()? >> >> v6 fixes that. Check your future inbox :) I'm goint to rework the >> Xen bit too based on the long discussion. >> >> Is that the only failure you're seeing? > > > Yes. > >> ldt_gdt_32 passes on 64-bit for me > > > With your patch: > > root@haswell> uname -a > Linux dhcp-burlington7-2nd-B-east-10-152-55-89.usdhcp.oraclecorp.com > 4.2.0-rc4 #107 SMP Thu Jul 30 11:05:19 EDT 2015 x86_64 x86_64 x86_64 > GNU/Linux > root@haswell> cd tmp/linux/tools/testing/selftests/x86/ > root@haswell> ls -l ldt_gdt_32 > -rwxr-xr-x 1 root root 25975 Jul 30 11:48 ldt_gdt_32 > root@haswell> ./ldt_gdt_32 > [OK] LDT entry 0 has AR 0x0040FA00 and limit 0x0000000A > [OK] LDT entry 0 has AR 0x00C0FA00 and limit 0x0000AFFF > [OK] LDT entry 1 is invalid > [OK] LDT entry 2 has AR 0x00C0FA00 and limit 0x0000AFFF > [OK] LDT entry 1 is invalid > [OK] LDT entry 2 has AR 0x00C0FA00 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00D0FA00 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00D07A00 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00907A00 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00D07200 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00D07000 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00D07400 and limit 0x0000AFFF > [OK] LDT entry 2 has AR 0x00507600 and limit 0x0000000A > [OK] LDT entry 2 has AR 0x00507E00 and limit 0x0000000A > [OK] LDT entry 2 has AR 0x00507C00 and limit 0x0000000A > [OK] LDT entry 2 has AR 0x00507A00 and limit 0x0000000A > [OK] LDT entry 2 has AR 0x00507800 and limit 0x0000000A > [RUN] Test fork > [OK] LDT entry 2 has AR 0x00507800 and limit 0x0000000A > [OK] LDT entry 1 is invalid > [OK] Child succeeded > [RUN] Test size > [DONE] Size test > [OK] modify_ldt failure 22 > [OK] LDT entry 0 has AR 0x0000F200 and limit 0x00000000 > [OK] LDT entry 0 has AR 0x00007200 and limit 0x00000000 > [OK] LDT entry 0 has AR 0x0000F000 and limit 0x00000000 > [OK] LDT entry 0 has AR 0x00007200 and limit 0x00000000 > [OK] LDT entry 0 has AR 0x00007000 and limit 0x00000001 > [OK] LDT entry 0 has AR 0x00007000 and limit 0x00000000 > [OK] LDT entry 0 is invalid > [OK] LDT entry 0 has AR 0x0040F200 and limit 0x00000000 > [OK] LDT entry 0 is invalid > [RUN] Cross-CPU LDT invalidation > Segmentation fault (core dumped) That's not good. Can you backtrace it? (I.e. compite ldt_gdt_32 with -g and load the core dumb in gdb?) My best guesses are either a signal delivery failure (although that shouldn't be a problem for 32-bit userspace on any kernel) or an actual LDT access fault, and the latter would be interesting. I haven't been able to reproduce this. -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html