*lp	= entry_1; *(lp+1)	= entry_2; 
write_ldt_entry(mm->context.ldt, ldt_info.entry_number, entry_1, entry_2); 
static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode){	struct mm_struct * mm = current->mm;	__u32 entry_1, entry_2, *lp;	int error;	struct user_desc ldt_info;	error = -EINVAL;	if (bytecount != sizeof(ldt_info))		goto out;	error = -EFAULT; 		if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info)))		goto out;	error = -EINVAL;	if (ldt_info.entry_number >= LDT_ENTRIES)		goto out;	if (ldt_info.contents == 3) {		if (oldmode)			goto out;		if (ldt_info.seg_not_present == 0)			goto out;	}	down(&mm->context.sem);	if (ldt_info.entry_number >= mm->context.size) {		error = alloc_ldt(&current->mm->context, ldt_info.entry_number+1, 1);		if (error < 0)			goto out_unlock;	}	lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt);   	/* Allow LDTs to be cleared by the user. */   	if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {		if (oldmode || LDT_empty(&ldt_info)) {			entry_1 = 0;			entry_2 = 0;			goto install;		}	}	entry_1 = LDT_entry_a(&ldt_info);	entry_2 = LDT_entry_b(&ldt_info);	if (oldmode)		entry_2 &= ~(1 << 20);	/* Install the new entry ...  */install:	*lp	= entry_1;	*(lp+1)	= entry_2;	error = 0;out_unlock:	up(&mm->context.sem);out:	return error;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f2f30ebca6c0c95e987cb9a1fd1495770a75432e/ldt.c/clean/arch/i386/kernel/ldt.c