mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
[S390] Fix sparse warnings.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
7e560814de
commit
d2c993d845
@ -403,7 +403,7 @@ static void *diag204_get_buffer(enum diag204_format fmt, int *pages)
|
|||||||
*pages = 1;
|
*pages = 1;
|
||||||
return diag204_alloc_rbuf();
|
return diag204_alloc_rbuf();
|
||||||
} else {/* INFO_EXT */
|
} else {/* INFO_EXT */
|
||||||
*pages = diag204(SUBC_RSI | INFO_EXT, 0, 0);
|
*pages = diag204(SUBC_RSI | INFO_EXT, 0, NULL);
|
||||||
if (*pages <= 0)
|
if (*pages <= 0)
|
||||||
return ERR_PTR(-ENOSYS);
|
return ERR_PTR(-ENOSYS);
|
||||||
else
|
else
|
||||||
|
@ -409,7 +409,7 @@ asmlinkage long sys32_sysinfo(struct sysinfo32 __user *info)
|
|||||||
mm_segment_t old_fs = get_fs ();
|
mm_segment_t old_fs = get_fs ();
|
||||||
|
|
||||||
set_fs (KERNEL_DS);
|
set_fs (KERNEL_DS);
|
||||||
ret = sys_sysinfo(&s);
|
ret = sys_sysinfo((struct sysinfo __user *) &s);
|
||||||
set_fs (old_fs);
|
set_fs (old_fs);
|
||||||
err = put_user (s.uptime, &info->uptime);
|
err = put_user (s.uptime, &info->uptime);
|
||||||
err |= __put_user (s.loads[0], &info->loads[0]);
|
err |= __put_user (s.loads[0], &info->loads[0]);
|
||||||
@ -438,7 +438,7 @@ asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid,
|
|||||||
mm_segment_t old_fs = get_fs ();
|
mm_segment_t old_fs = get_fs ();
|
||||||
|
|
||||||
set_fs (KERNEL_DS);
|
set_fs (KERNEL_DS);
|
||||||
ret = sys_sched_rr_get_interval(pid, &t);
|
ret = sys_sched_rr_get_interval(pid, (struct timespec __user *) &t);
|
||||||
set_fs (old_fs);
|
set_fs (old_fs);
|
||||||
if (put_compat_timespec(&t, interval))
|
if (put_compat_timespec(&t, interval))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
@ -464,7 +464,10 @@ asmlinkage long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_fs (KERNEL_DS);
|
set_fs (KERNEL_DS);
|
||||||
ret = sys_rt_sigprocmask(how, set ? &s : NULL, oset ? &s : NULL, sigsetsize);
|
ret = sys_rt_sigprocmask(how,
|
||||||
|
set ? (sigset_t __user *) &s : NULL,
|
||||||
|
oset ? (sigset_t __user *) &s : NULL,
|
||||||
|
sigsetsize);
|
||||||
set_fs (old_fs);
|
set_fs (old_fs);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
if (oset) {
|
if (oset) {
|
||||||
@ -489,7 +492,7 @@ asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
|
|||||||
mm_segment_t old_fs = get_fs();
|
mm_segment_t old_fs = get_fs();
|
||||||
|
|
||||||
set_fs (KERNEL_DS);
|
set_fs (KERNEL_DS);
|
||||||
ret = sys_rt_sigpending(&s, sigsetsize);
|
ret = sys_rt_sigpending((sigset_t __user *) &s, sigsetsize);
|
||||||
set_fs (old_fs);
|
set_fs (old_fs);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
switch (_NSIG_WORDS) {
|
switch (_NSIG_WORDS) {
|
||||||
@ -514,7 +517,7 @@ sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
|
|||||||
if (copy_siginfo_from_user32(&info, uinfo))
|
if (copy_siginfo_from_user32(&info, uinfo))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
set_fs (KERNEL_DS);
|
set_fs (KERNEL_DS);
|
||||||
ret = sys_rt_sigqueueinfo(pid, sig, &info);
|
ret = sys_rt_sigqueueinfo(pid, sig, (siginfo_t __user *) &info);
|
||||||
set_fs (old_fs);
|
set_fs (old_fs);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -674,7 +677,8 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offse
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
set_fs(KERNEL_DS);
|
set_fs(KERNEL_DS);
|
||||||
ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count);
|
ret = sys_sendfile(out_fd, in_fd,
|
||||||
|
offset ? (off_t __user *) &of : NULL, count);
|
||||||
set_fs(old_fs);
|
set_fs(old_fs);
|
||||||
|
|
||||||
if (offset && put_user(of, offset))
|
if (offset && put_user(of, offset))
|
||||||
@ -694,7 +698,8 @@ asmlinkage long sys32_sendfile64(int out_fd, int in_fd,
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
set_fs(KERNEL_DS);
|
set_fs(KERNEL_DS);
|
||||||
ret = sys_sendfile64(out_fd, in_fd, offset ? &lof : NULL, count);
|
ret = sys_sendfile64(out_fd, in_fd,
|
||||||
|
offset ? (loff_t __user *) &lof : NULL, count);
|
||||||
set_fs(old_fs);
|
set_fs(old_fs);
|
||||||
|
|
||||||
if (offset && put_user(lof, offset))
|
if (offset && put_user(lof, offset))
|
||||||
|
@ -119,7 +119,7 @@ module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
|
|||||||
int nrela, i, j;
|
int nrela, i, j;
|
||||||
|
|
||||||
/* Find symbol table and string table. */
|
/* Find symbol table and string table. */
|
||||||
symtab = 0;
|
symtab = NULL;
|
||||||
for (i = 0; i < hdr->e_shnum; i++)
|
for (i = 0; i < hdr->e_shnum; i++)
|
||||||
switch (sechdrs[i].sh_type) {
|
switch (sechdrs[i].sh_type) {
|
||||||
case SHT_SYMTAB:
|
case SHT_SYMTAB:
|
||||||
|
@ -172,7 +172,7 @@ void show_regs(struct pt_regs *regs)
|
|||||||
show_registers(regs);
|
show_registers(regs);
|
||||||
/* Show stack backtrace if pt_regs is from kernel mode */
|
/* Show stack backtrace if pt_regs is from kernel mode */
|
||||||
if (!(regs->psw.mask & PSW_MASK_PSTATE))
|
if (!(regs->psw.mask & PSW_MASK_PSTATE))
|
||||||
show_trace(0,(unsigned long *) regs->gprs[15]);
|
show_trace(NULL, (unsigned long *) regs->gprs[15]);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void kernel_thread_starter(void);
|
extern void kernel_thread_starter(void);
|
||||||
|
@ -13,7 +13,7 @@ static struct proc_dir_entry * root_irq_dir;
|
|||||||
void init_irq_proc(void)
|
void init_irq_proc(void)
|
||||||
{
|
{
|
||||||
/* create /proc/irq */
|
/* create /proc/irq */
|
||||||
root_irq_dir = proc_mkdir("irq", 0);
|
root_irq_dir = proc_mkdir("irq", NULL);
|
||||||
|
|
||||||
/* create /proc/irq/prof_cpu_mask */
|
/* create /proc/irq/prof_cpu_mask */
|
||||||
create_prof_cpu_mask(root_irq_dir);
|
create_prof_cpu_mask(root_irq_dir);
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
* (0x1202 external call, 0x1004 cpu timer, 0x2401 hwc console, 0x4000
|
* (0x1202 external call, 0x1004 cpu timer, 0x2401 hwc console, 0x4000
|
||||||
* iucv and 0x2603 pfault) this is always the first element.
|
* iucv and 0x2603 pfault) this is always the first element.
|
||||||
*/
|
*/
|
||||||
ext_int_info_t *ext_int_hash[256] = { 0, };
|
ext_int_info_t *ext_int_hash[256] = { NULL, };
|
||||||
|
|
||||||
static inline int ext_hash(__u16 code)
|
static inline int ext_hash(__u16 code)
|
||||||
{
|
{
|
||||||
|
@ -379,7 +379,7 @@ void __init time_init(void)
|
|||||||
-xtime.tv_sec, -xtime.tv_nsec);
|
-xtime.tv_sec, -xtime.tv_nsec);
|
||||||
|
|
||||||
/* request the clock comparator external interrupt */
|
/* request the clock comparator external interrupt */
|
||||||
if (register_early_external_interrupt(0x1004, 0,
|
if (register_early_external_interrupt(0x1004, NULL,
|
||||||
&ext_int_info_cc) != 0)
|
&ext_int_info_cc) != 0)
|
||||||
panic("Couldn't request external interrupt 0x1004");
|
panic("Couldn't request external interrupt 0x1004");
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ void show_stack(struct task_struct *task, unsigned long *sp)
|
|||||||
*/
|
*/
|
||||||
void dump_stack(void)
|
void dump_stack(void)
|
||||||
{
|
{
|
||||||
show_stack(0, 0);
|
show_stack(NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dump_stack);
|
EXPORT_SYMBOL(dump_stack);
|
||||||
@ -331,9 +331,9 @@ static void inline do_trap(long interruption_code, int signr, char *str,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *get_check_address(struct pt_regs *regs)
|
static inline void __user *get_check_address(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return (void *)((regs->psw.addr-S390_lowcore.pgm_ilc) & PSW_ADDR_INSN);
|
return (void __user *)((regs->psw.addr-S390_lowcore.pgm_ilc) & PSW_ADDR_INSN);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_single_step(struct pt_regs *regs)
|
void do_single_step(struct pt_regs *regs)
|
||||||
@ -360,7 +360,7 @@ asmlinkage void name(struct pt_regs * regs, long interruption_code) \
|
|||||||
info.si_signo = signr; \
|
info.si_signo = signr; \
|
||||||
info.si_errno = 0; \
|
info.si_errno = 0; \
|
||||||
info.si_code = sicode; \
|
info.si_code = sicode; \
|
||||||
info.si_addr = (void *)siaddr; \
|
info.si_addr = siaddr; \
|
||||||
do_trap(interruption_code, signr, str, regs, &info); \
|
do_trap(interruption_code, signr, str, regs, &info); \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ DO_ERROR_INFO(SIGILL, "translation exception", translation_exception,
|
|||||||
ILL_ILLOPN, get_check_address(regs))
|
ILL_ILLOPN, get_check_address(regs))
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
do_fp_trap(struct pt_regs *regs, void *location,
|
do_fp_trap(struct pt_regs *regs, void __user *location,
|
||||||
int fpc, long interruption_code)
|
int fpc, long interruption_code)
|
||||||
{
|
{
|
||||||
siginfo_t si;
|
siginfo_t si;
|
||||||
@ -424,10 +424,10 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code)
|
|||||||
{
|
{
|
||||||
siginfo_t info;
|
siginfo_t info;
|
||||||
__u8 opcode[6];
|
__u8 opcode[6];
|
||||||
__u16 *location;
|
__u16 __user *location;
|
||||||
int signal = 0;
|
int signal = 0;
|
||||||
|
|
||||||
location = (__u16 *) get_check_address(regs);
|
location = get_check_address(regs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We got all needed information from the lowcore and can
|
* We got all needed information from the lowcore and can
|
||||||
@ -559,10 +559,10 @@ DO_ERROR_INFO(SIGILL, "specification exception", specification_exception,
|
|||||||
|
|
||||||
asmlinkage void data_exception(struct pt_regs * regs, long interruption_code)
|
asmlinkage void data_exception(struct pt_regs * regs, long interruption_code)
|
||||||
{
|
{
|
||||||
__u16 *location;
|
__u16 __user *location;
|
||||||
int signal = 0;
|
int signal = 0;
|
||||||
|
|
||||||
location = (__u16 *) get_check_address(regs);
|
location = get_check_address(regs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We got all needed information from the lowcore and can
|
* We got all needed information from the lowcore and can
|
||||||
|
@ -233,7 +233,7 @@ char * strrchr(const char * s, int c)
|
|||||||
if (s[len] == (char) c)
|
if (s[len] == (char) c)
|
||||||
return (char *) s + len;
|
return (char *) s + len;
|
||||||
} while (--len > 0);
|
} while (--len > 0);
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(strrchr);
|
EXPORT_SYMBOL(strrchr);
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ char * strstr(const char * s1,const char * s2)
|
|||||||
return (char *) s1;
|
return (char *) s1;
|
||||||
s1++;
|
s1++;
|
||||||
}
|
}
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(strstr);
|
EXPORT_SYMBOL(strstr);
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ cmm_thread(void *dummy)
|
|||||||
static void
|
static void
|
||||||
cmm_start_thread(void)
|
cmm_start_thread(void)
|
||||||
{
|
{
|
||||||
kernel_thread(cmm_thread, 0, 0);
|
kernel_thread(cmm_thread, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -144,7 +144,7 @@ static void do_sigsegv(struct pt_regs *regs, unsigned long error_code,
|
|||||||
#endif
|
#endif
|
||||||
si.si_signo = SIGSEGV;
|
si.si_signo = SIGSEGV;
|
||||||
si.si_code = si_code;
|
si.si_code = si_code;
|
||||||
si.si_addr = (void *) address;
|
si.si_addr = (void __user *) address;
|
||||||
force_sig_info(SIGSEGV, &si, current);
|
force_sig_info(SIGSEGV, &si, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,7 +394,7 @@ dasd_add_busid(char *bus_id, int features)
|
|||||||
if (!new)
|
if (!new)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
spin_lock(&dasd_devmap_lock);
|
spin_lock(&dasd_devmap_lock);
|
||||||
devmap = 0;
|
devmap = NULL;
|
||||||
hash = dasd_hash_busid(bus_id);
|
hash = dasd_hash_busid(bus_id);
|
||||||
list_for_each_entry(tmp, &dasd_hashlists[hash], list)
|
list_for_each_entry(tmp, &dasd_hashlists[hash], list)
|
||||||
if (strncmp(tmp->bus_id, bus_id, BUS_ID_SIZE) == 0) {
|
if (strncmp(tmp->bus_id, bus_id, BUS_ID_SIZE) == 0) {
|
||||||
@ -406,10 +406,10 @@ dasd_add_busid(char *bus_id, int features)
|
|||||||
new->devindex = dasd_max_devindex++;
|
new->devindex = dasd_max_devindex++;
|
||||||
strncpy(new->bus_id, bus_id, BUS_ID_SIZE);
|
strncpy(new->bus_id, bus_id, BUS_ID_SIZE);
|
||||||
new->features = features;
|
new->features = features;
|
||||||
new->device = 0;
|
new->device = NULL;
|
||||||
list_add(&new->list, &dasd_hashlists[hash]);
|
list_add(&new->list, &dasd_hashlists[hash]);
|
||||||
devmap = new;
|
devmap = new;
|
||||||
new = 0;
|
new = NULL;
|
||||||
}
|
}
|
||||||
spin_unlock(&dasd_devmap_lock);
|
spin_unlock(&dasd_devmap_lock);
|
||||||
kfree(new);
|
kfree(new);
|
||||||
@ -479,7 +479,7 @@ dasd_device_from_devindex(int devindex)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
spin_lock(&dasd_devmap_lock);
|
spin_lock(&dasd_devmap_lock);
|
||||||
devmap = 0;
|
devmap = NULL;
|
||||||
for (i = 0; (i < 256) && !devmap; i++)
|
for (i = 0; (i < 256) && !devmap; i++)
|
||||||
list_for_each_entry(tmp, &dasd_hashlists[i], list)
|
list_for_each_entry(tmp, &dasd_hashlists[i], list)
|
||||||
if (tmp->devindex == devindex) {
|
if (tmp->devindex == devindex) {
|
||||||
|
@ -65,16 +65,16 @@ struct dasd_eckd_private {
|
|||||||
/* The ccw bus type uses this table to find devices that it sends to
|
/* The ccw bus type uses this table to find devices that it sends to
|
||||||
* dasd_eckd_probe */
|
* dasd_eckd_probe */
|
||||||
static struct ccw_device_id dasd_eckd_ids[] = {
|
static struct ccw_device_id dasd_eckd_ids[] = {
|
||||||
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3390, 0), driver_info: 0x1},
|
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3390, 0), .driver_info = 0x1},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3390, 0), driver_info: 0x2},
|
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3390, 0), .driver_info = 0x2},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3390, 0), driver_info: 0x3},
|
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3390, 0), .driver_info = 0x3},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3380, 0), driver_info: 0x4},
|
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3380, 0), .driver_info = 0x4},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3380, 0), driver_info: 0x5},
|
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3380, 0), .driver_info = 0x5},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x9343, 0, 0x9345, 0), driver_info: 0x6},
|
{ CCW_DEVICE_DEVTYPE (0x9343, 0, 0x9345, 0), .driver_info = 0x6},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x2107, 0, 0x3390, 0), driver_info: 0x7},
|
{ CCW_DEVICE_DEVTYPE (0x2107, 0, 0x3390, 0), .driver_info = 0x7},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x2107, 0, 0x3380, 0), driver_info: 0x8},
|
{ CCW_DEVICE_DEVTYPE (0x2107, 0, 0x3380, 0), .driver_info = 0x8},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x1750, 0, 0x3390, 0), driver_info: 0x9},
|
{ CCW_DEVICE_DEVTYPE (0x1750, 0, 0x3390, 0), .driver_info = 0x9},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x1750, 0, 0x3380, 0), driver_info: 0xa},
|
{ CCW_DEVICE_DEVTYPE (0x1750, 0, 0x3380, 0), .driver_info = 0xa},
|
||||||
{ /* end of list */ },
|
{ /* end of list */ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ struct dasd_fba_private {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct ccw_device_id dasd_fba_ids[] = {
|
static struct ccw_device_id dasd_fba_ids[] = {
|
||||||
{ CCW_DEVICE_DEVTYPE (0x6310, 0, 0x9336, 0), driver_info: 0x1},
|
{ CCW_DEVICE_DEVTYPE (0x6310, 0, 0x9336, 0), .driver_info = 0x1},
|
||||||
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3370, 0), driver_info: 0x2},
|
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3370, 0), .driver_info = 0x2},
|
||||||
{ /* end of list */ },
|
{ /* end of list */ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -84,9 +84,9 @@ void
|
|||||||
dasd_gendisk_free(struct dasd_device *device)
|
dasd_gendisk_free(struct dasd_device *device)
|
||||||
{
|
{
|
||||||
del_gendisk(device->gdp);
|
del_gendisk(device->gdp);
|
||||||
device->gdp->queue = 0;
|
device->gdp->queue = NULL;
|
||||||
put_disk(device->gdp);
|
put_disk(device->gdp);
|
||||||
device->gdp = 0;
|
device->gdp = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -136,7 +136,7 @@ dasd_destroy_partitions(struct dasd_device * device)
|
|||||||
* device->bdev to lower the offline open_count limit again.
|
* device->bdev to lower the offline open_count limit again.
|
||||||
*/
|
*/
|
||||||
bdev = device->bdev;
|
bdev = device->bdev;
|
||||||
device->bdev = 0;
|
device->bdev = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See fs/partition/check.c:delete_partition
|
* See fs/partition/check.c:delete_partition
|
||||||
@ -145,7 +145,7 @@ dasd_destroy_partitions(struct dasd_device * device)
|
|||||||
*/
|
*/
|
||||||
memset(&bpart, 0, sizeof(struct blkpg_partition));
|
memset(&bpart, 0, sizeof(struct blkpg_partition));
|
||||||
memset(&barg, 0, sizeof(struct blkpg_ioctl_arg));
|
memset(&barg, 0, sizeof(struct blkpg_ioctl_arg));
|
||||||
barg.data = &bpart;
|
barg.data = (void __user *) &bpart;
|
||||||
barg.op = BLKPG_DEL_PARTITION;
|
barg.op = BLKPG_DEL_PARTITION;
|
||||||
for (bpart.pno = device->gdp->minors - 1; bpart.pno > 0; bpart.pno--)
|
for (bpart.pno = device->gdp->minors - 1; bpart.pno > 0; bpart.pno--)
|
||||||
ioctl_by_bdev(bdev, BLKPG, (unsigned long) &barg);
|
ioctl_by_bdev(bdev, BLKPG, (unsigned long) &barg);
|
||||||
|
@ -345,7 +345,7 @@ dasd_ioctl_set_ro(struct block_device *bdev, void __user *argp)
|
|||||||
if (bdev != bdev->bd_contains)
|
if (bdev != bdev->bd_contains)
|
||||||
// ro setting is not allowed for partitions
|
// ro setting is not allowed for partitions
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (get_user(intval, (int *)argp))
|
if (get_user(intval, (int __user *)argp))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
set_disk_ro(bdev->bd_disk, intval);
|
set_disk_ro(bdev->bd_disk, intval);
|
||||||
|
@ -693,7 +693,7 @@ raw3215_probe (struct ccw_device *cdev)
|
|||||||
GFP_KERNEL|GFP_DMA);
|
GFP_KERNEL|GFP_DMA);
|
||||||
if (raw->buffer == NULL) {
|
if (raw->buffer == NULL) {
|
||||||
spin_lock(&raw3215_device_lock);
|
spin_lock(&raw3215_device_lock);
|
||||||
raw3215[line] = 0;
|
raw3215[line] = NULL;
|
||||||
spin_unlock(&raw3215_device_lock);
|
spin_unlock(&raw3215_device_lock);
|
||||||
kfree(raw);
|
kfree(raw);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -23,7 +23,7 @@ ctrlchar_handle_sysrq(void *tty)
|
|||||||
handle_sysrq(ctrlchar_sysrq_key, NULL, (struct tty_struct *) tty);
|
handle_sysrq(ctrlchar_sysrq_key, NULL, (struct tty_struct *) tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, 0);
|
static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,8 +83,8 @@ static u_short shift_ctrl_map[NR_KEYS] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ushort *key_maps[MAX_NR_KEYMAPS] = {
|
ushort *key_maps[MAX_NR_KEYMAPS] = {
|
||||||
plain_map, shift_map, 0, 0,
|
plain_map, shift_map, NULL, NULL,
|
||||||
ctrl_map, shift_ctrl_map, 0
|
ctrl_map, shift_ctrl_map, NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int keymap_count = 4;
|
unsigned int keymap_count = 4;
|
||||||
@ -145,7 +145,7 @@ char *func_table[MAX_NR_FUNC] = {
|
|||||||
func_buf + 97,
|
func_buf + 97,
|
||||||
func_buf + 103,
|
func_buf + 103,
|
||||||
func_buf + 109,
|
func_buf + 109,
|
||||||
0,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kbdiacr accent_table[MAX_DIACR] = {
|
struct kbdiacr accent_table[MAX_DIACR] = {
|
||||||
|
@ -236,7 +236,7 @@ fs3270_irq(struct fs3270 *fp, struct raw3270_request *rq, struct irb *irb)
|
|||||||
* Process reads from fullscreen 3270.
|
* Process reads from fullscreen 3270.
|
||||||
*/
|
*/
|
||||||
static ssize_t
|
static ssize_t
|
||||||
fs3270_read(struct file *filp, char *data, size_t count, loff_t *off)
|
fs3270_read(struct file *filp, char __user *data, size_t count, loff_t *off)
|
||||||
{
|
{
|
||||||
struct fs3270 *fp;
|
struct fs3270 *fp;
|
||||||
struct raw3270_request *rq;
|
struct raw3270_request *rq;
|
||||||
@ -281,7 +281,7 @@ fs3270_read(struct file *filp, char *data, size_t count, loff_t *off)
|
|||||||
* Process writes to fullscreen 3270.
|
* Process writes to fullscreen 3270.
|
||||||
*/
|
*/
|
||||||
static ssize_t
|
static ssize_t
|
||||||
fs3270_write(struct file *filp, const char *data, size_t count, loff_t *off)
|
fs3270_write(struct file *filp, const char __user *data, size_t count, loff_t *off)
|
||||||
{
|
{
|
||||||
struct fs3270 *fp;
|
struct fs3270 *fp;
|
||||||
struct raw3270_request *rq;
|
struct raw3270_request *rq;
|
||||||
@ -338,10 +338,10 @@ fs3270_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|||||||
fp->write_command = arg;
|
fp->write_command = arg;
|
||||||
break;
|
break;
|
||||||
case TUBGETI:
|
case TUBGETI:
|
||||||
rc = put_user(fp->read_command, (char *) arg);
|
rc = put_user(fp->read_command, (char __user *) arg);
|
||||||
break;
|
break;
|
||||||
case TUBGETO:
|
case TUBGETO:
|
||||||
rc = put_user(fp->write_command,(char *) arg);
|
rc = put_user(fp->write_command,(char __user *) arg);
|
||||||
break;
|
break;
|
||||||
case TUBGETMOD:
|
case TUBGETMOD:
|
||||||
iocb.model = fp->view.model;
|
iocb.model = fp->view.model;
|
||||||
@ -350,7 +350,7 @@ fs3270_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|||||||
iocb.pf_cnt = 24;
|
iocb.pf_cnt = 24;
|
||||||
iocb.re_cnt = 20;
|
iocb.re_cnt = 20;
|
||||||
iocb.map = 0;
|
iocb.map = 0;
|
||||||
if (copy_to_user((char *) arg, &iocb,
|
if (copy_to_user((char __user *) arg, &iocb,
|
||||||
sizeof(struct raw3270_iocb)))
|
sizeof(struct raw3270_iocb)))
|
||||||
rc = -EFAULT;
|
rc = -EFAULT;
|
||||||
break;
|
break;
|
||||||
@ -479,7 +479,7 @@ fs3270_close(struct inode *inode, struct file *filp)
|
|||||||
struct fs3270 *fp;
|
struct fs3270 *fp;
|
||||||
|
|
||||||
fp = filp->private_data;
|
fp = filp->private_data;
|
||||||
filp->private_data = 0;
|
filp->private_data = NULL;
|
||||||
if (fp) {
|
if (fp) {
|
||||||
fp->fs_pid = 0;
|
fp->fs_pid = 0;
|
||||||
raw3270_reset(&fp->view);
|
raw3270_reset(&fp->view);
|
||||||
|
@ -103,7 +103,7 @@ out_maps:
|
|||||||
out_kbd:
|
out_kbd:
|
||||||
kfree(kbd);
|
kfree(kbd);
|
||||||
out:
|
out:
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -304,7 +304,7 @@ kbd_keycode(struct kbd_data *kbd, unsigned int keycode)
|
|||||||
if (kbd->sysrq) {
|
if (kbd->sysrq) {
|
||||||
if (kbd->sysrq == K(KT_LATIN, '-')) {
|
if (kbd->sysrq == K(KT_LATIN, '-')) {
|
||||||
kbd->sysrq = 0;
|
kbd->sysrq = 0;
|
||||||
handle_sysrq(value, 0, kbd->tty);
|
handle_sysrq(value, NULL, kbd->tty);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value == '-') {
|
if (value == '-') {
|
||||||
@ -363,7 +363,7 @@ do_kdsk_ioctl(struct kbd_data *kbd, struct kbentry __user *user_kbe,
|
|||||||
/* disallocate map */
|
/* disallocate map */
|
||||||
key_map = kbd->key_maps[tmp.kb_table];
|
key_map = kbd->key_maps[tmp.kb_table];
|
||||||
if (key_map) {
|
if (key_map) {
|
||||||
kbd->key_maps[tmp.kb_table] = 0;
|
kbd->key_maps[tmp.kb_table] = NULL;
|
||||||
kfree(key_map);
|
kfree(key_map);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -555,7 +555,7 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view,
|
|||||||
#ifdef CONFIG_TN3270_CONSOLE
|
#ifdef CONFIG_TN3270_CONSOLE
|
||||||
if (raw3270_registered == 0) {
|
if (raw3270_registered == 0) {
|
||||||
spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags);
|
spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags);
|
||||||
rq->callback = 0;
|
rq->callback = NULL;
|
||||||
rc = __raw3270_start(rp, view, rq);
|
rc = __raw3270_start(rp, view, rq);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
while (!raw3270_request_final(rq)) {
|
while (!raw3270_request_final(rq)) {
|
||||||
@ -719,8 +719,8 @@ raw3270_size_device(struct raw3270 *rp)
|
|||||||
rc = __raw3270_size_device_vm(rp);
|
rc = __raw3270_size_device_vm(rp);
|
||||||
else
|
else
|
||||||
rc = __raw3270_size_device(rp);
|
rc = __raw3270_size_device(rp);
|
||||||
raw3270_init_view.dev = 0;
|
raw3270_init_view.dev = NULL;
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
up(&raw3270_init_sem);
|
up(&raw3270_init_sem);
|
||||||
if (rc == 0) { /* Found something. */
|
if (rc == 0) { /* Found something. */
|
||||||
/* Try to find a model. */
|
/* Try to find a model. */
|
||||||
@ -761,8 +761,8 @@ raw3270_reset_device(struct raw3270 *rp)
|
|||||||
rp->view = &raw3270_init_view;
|
rp->view = &raw3270_init_view;
|
||||||
raw3270_init_view.dev = rp;
|
raw3270_init_view.dev = rp;
|
||||||
rc = raw3270_start_init(rp, &raw3270_init_view, &rp->init_request);
|
rc = raw3270_start_init(rp, &raw3270_init_view, &rp->init_request);
|
||||||
raw3270_init_view.dev = 0;
|
raw3270_init_view.dev = NULL;
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
up(&raw3270_init_sem);
|
up(&raw3270_init_sem);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -934,7 +934,7 @@ raw3270_activate_view(struct raw3270_view *view)
|
|||||||
else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags))
|
else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags))
|
||||||
rc = -ENODEV;
|
rc = -ENODEV;
|
||||||
else {
|
else {
|
||||||
oldview = 0;
|
oldview = NULL;
|
||||||
if (rp->view) {
|
if (rp->view) {
|
||||||
oldview = rp->view;
|
oldview = rp->view;
|
||||||
oldview->fn->deactivate(oldview);
|
oldview->fn->deactivate(oldview);
|
||||||
@ -951,7 +951,7 @@ raw3270_activate_view(struct raw3270_view *view)
|
|||||||
rp->view = nv;
|
rp->view = nv;
|
||||||
if (nv->fn->activate(nv) == 0)
|
if (nv->fn->activate(nv) == 0)
|
||||||
break;
|
break;
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -975,7 +975,7 @@ raw3270_deactivate_view(struct raw3270_view *view)
|
|||||||
spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
|
spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
|
||||||
if (rp->view == view) {
|
if (rp->view == view) {
|
||||||
view->fn->deactivate(view);
|
view->fn->deactivate(view);
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
/* Move deactivated view to end of list. */
|
/* Move deactivated view to end of list. */
|
||||||
list_del_init(&view->list);
|
list_del_init(&view->list);
|
||||||
list_add_tail(&view->list, &rp->view_list);
|
list_add_tail(&view->list, &rp->view_list);
|
||||||
@ -985,7 +985,7 @@ raw3270_deactivate_view(struct raw3270_view *view)
|
|||||||
rp->view = view;
|
rp->view = view;
|
||||||
if (view->fn->activate(view) == 0)
|
if (view->fn->activate(view) == 0)
|
||||||
break;
|
break;
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1076,7 +1076,7 @@ raw3270_del_view(struct raw3270_view *view)
|
|||||||
spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
|
spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
|
||||||
if (rp->view == view) {
|
if (rp->view == view) {
|
||||||
view->fn->deactivate(view);
|
view->fn->deactivate(view);
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
}
|
}
|
||||||
list_del_init(&view->list);
|
list_del_init(&view->list);
|
||||||
if (!rp->view && test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
|
if (!rp->view && test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
|
||||||
@ -1117,9 +1117,9 @@ raw3270_delete_device(struct raw3270 *rp)
|
|||||||
|
|
||||||
/* Disconnect from ccw_device. */
|
/* Disconnect from ccw_device. */
|
||||||
cdev = rp->cdev;
|
cdev = rp->cdev;
|
||||||
rp->cdev = 0;
|
rp->cdev = NULL;
|
||||||
cdev->dev.driver_data = 0;
|
cdev->dev.driver_data = NULL;
|
||||||
cdev->handler = 0;
|
cdev->handler = NULL;
|
||||||
|
|
||||||
/* Put ccw_device structure. */
|
/* Put ccw_device structure. */
|
||||||
put_device(&cdev->dev);
|
put_device(&cdev->dev);
|
||||||
@ -1144,7 +1144,7 @@ raw3270_model_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|||||||
return snprintf(buf, PAGE_SIZE, "%i\n",
|
return snprintf(buf, PAGE_SIZE, "%i\n",
|
||||||
((struct raw3270 *) dev->driver_data)->model);
|
((struct raw3270 *) dev->driver_data)->model);
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(model, 0444, raw3270_model_show, 0);
|
static DEVICE_ATTR(model, 0444, raw3270_model_show, NULL);
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
raw3270_rows_show(struct device *dev, struct device_attribute *attr, char *buf)
|
raw3270_rows_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
@ -1152,7 +1152,7 @@ raw3270_rows_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|||||||
return snprintf(buf, PAGE_SIZE, "%i\n",
|
return snprintf(buf, PAGE_SIZE, "%i\n",
|
||||||
((struct raw3270 *) dev->driver_data)->rows);
|
((struct raw3270 *) dev->driver_data)->rows);
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(rows, 0444, raw3270_rows_show, 0);
|
static DEVICE_ATTR(rows, 0444, raw3270_rows_show, NULL);
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
raw3270_columns_show(struct device *dev, struct device_attribute *attr, char *buf)
|
raw3270_columns_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
@ -1160,7 +1160,7 @@ raw3270_columns_show(struct device *dev, struct device_attribute *attr, char *bu
|
|||||||
return snprintf(buf, PAGE_SIZE, "%i\n",
|
return snprintf(buf, PAGE_SIZE, "%i\n",
|
||||||
((struct raw3270 *) dev->driver_data)->cols);
|
((struct raw3270 *) dev->driver_data)->cols);
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR(columns, 0444, raw3270_columns_show, 0);
|
static DEVICE_ATTR(columns, 0444, raw3270_columns_show, NULL);
|
||||||
|
|
||||||
static struct attribute * raw3270_attrs[] = {
|
static struct attribute * raw3270_attrs[] = {
|
||||||
&dev_attr_model.attr,
|
&dev_attr_model.attr,
|
||||||
@ -1296,7 +1296,7 @@ raw3270_remove (struct ccw_device *cdev)
|
|||||||
spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
|
spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
|
||||||
if (rp->view) {
|
if (rp->view) {
|
||||||
rp->view->fn->deactivate(rp->view);
|
rp->view->fn->deactivate(rp->view);
|
||||||
rp->view = 0;
|
rp->view = NULL;
|
||||||
}
|
}
|
||||||
while (!list_empty(&rp->view_list)) {
|
while (!list_empty(&rp->view_list)) {
|
||||||
v = list_entry(rp->view_list.next, struct raw3270_view, list);
|
v = list_entry(rp->view_list.next, struct raw3270_view, list);
|
||||||
|
@ -231,7 +231,7 @@ alloc_string(struct list_head *free_list, unsigned long len)
|
|||||||
INIT_LIST_HEAD(&cs->update);
|
INIT_LIST_HEAD(&cs->update);
|
||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
|
@ -1309,9 +1309,9 @@ static struct tape_discipline tape_discipline_34xx = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct ccw_device_id tape_34xx_ids[] = {
|
static struct ccw_device_id tape_34xx_ids[] = {
|
||||||
{ CCW_DEVICE_DEVTYPE(0x3480, 0, 0x3480, 0), driver_info: tape_3480},
|
{ CCW_DEVICE_DEVTYPE(0x3480, 0, 0x3480, 0), .driver_info = tape_3480},
|
||||||
{ CCW_DEVICE_DEVTYPE(0x3490, 0, 0x3490, 0), driver_info: tape_3490},
|
{ CCW_DEVICE_DEVTYPE(0x3490, 0, 0x3490, 0), .driver_info = tape_3490},
|
||||||
{ /* end of list */ }
|
{ /* end of list */ },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -437,7 +437,7 @@ tty3270_rcl_add(struct tty3270 *tp, char *input, int len)
|
|||||||
{
|
{
|
||||||
struct string *s;
|
struct string *s;
|
||||||
|
|
||||||
tp->rcl_walk = 0;
|
tp->rcl_walk = NULL;
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return;
|
return;
|
||||||
if (tp->rcl_nr >= tp->rcl_max) {
|
if (tp->rcl_nr >= tp->rcl_max) {
|
||||||
@ -466,12 +466,12 @@ tty3270_rcl_backward(struct kbd_data *kbd)
|
|||||||
else if (!list_empty(&tp->rcl_lines))
|
else if (!list_empty(&tp->rcl_lines))
|
||||||
tp->rcl_walk = tp->rcl_lines.prev;
|
tp->rcl_walk = tp->rcl_lines.prev;
|
||||||
s = tp->rcl_walk ?
|
s = tp->rcl_walk ?
|
||||||
list_entry(tp->rcl_walk, struct string, list) : 0;
|
list_entry(tp->rcl_walk, struct string, list) : NULL;
|
||||||
if (tp->rcl_walk) {
|
if (tp->rcl_walk) {
|
||||||
s = list_entry(tp->rcl_walk, struct string, list);
|
s = list_entry(tp->rcl_walk, struct string, list);
|
||||||
tty3270_update_prompt(tp, s->string, s->len);
|
tty3270_update_prompt(tp, s->string, s->len);
|
||||||
} else
|
} else
|
||||||
tty3270_update_prompt(tp, 0, 0);
|
tty3270_update_prompt(tp, NULL, 0);
|
||||||
tty3270_set_timer(tp, 1);
|
tty3270_set_timer(tp, 1);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&tp->view.lock);
|
spin_unlock_bh(&tp->view.lock);
|
||||||
@ -553,7 +553,7 @@ tty3270_read_tasklet(struct raw3270_request *rrq)
|
|||||||
* has to be emitted to the tty and for 0x6d the screen
|
* has to be emitted to the tty and for 0x6d the screen
|
||||||
* needs to be redrawn.
|
* needs to be redrawn.
|
||||||
*/
|
*/
|
||||||
input = 0;
|
input = NULL;
|
||||||
len = 0;
|
len = 0;
|
||||||
if (tp->input->string[0] == 0x7d) {
|
if (tp->input->string[0] == 0x7d) {
|
||||||
/* Enter: write input to tty. */
|
/* Enter: write input to tty. */
|
||||||
@ -567,7 +567,7 @@ tty3270_read_tasklet(struct raw3270_request *rrq)
|
|||||||
tty3270_update_status(tp);
|
tty3270_update_status(tp);
|
||||||
}
|
}
|
||||||
/* Clear input area. */
|
/* Clear input area. */
|
||||||
tty3270_update_prompt(tp, 0, 0);
|
tty3270_update_prompt(tp, NULL, 0);
|
||||||
tty3270_set_timer(tp, 1);
|
tty3270_set_timer(tp, 1);
|
||||||
} else if (tp->input->string[0] == 0x6d) {
|
} else if (tp->input->string[0] == 0x6d) {
|
||||||
/* Display has been cleared. Redraw. */
|
/* Display has been cleared. Redraw. */
|
||||||
@ -808,8 +808,8 @@ tty3270_release(struct raw3270_view *view)
|
|||||||
tp = (struct tty3270 *) view;
|
tp = (struct tty3270 *) view;
|
||||||
tty = tp->tty;
|
tty = tp->tty;
|
||||||
if (tty) {
|
if (tty) {
|
||||||
tty->driver_data = 0;
|
tty->driver_data = NULL;
|
||||||
tp->tty = tp->kbd->tty = 0;
|
tp->tty = tp->kbd->tty = NULL;
|
||||||
tty_hangup(tty);
|
tty_hangup(tty);
|
||||||
raw3270_put_view(&tp->view);
|
raw3270_put_view(&tp->view);
|
||||||
}
|
}
|
||||||
@ -948,8 +948,8 @@ tty3270_close(struct tty_struct *tty, struct file * filp)
|
|||||||
return;
|
return;
|
||||||
tp = (struct tty3270 *) tty->driver_data;
|
tp = (struct tty3270 *) tty->driver_data;
|
||||||
if (tp) {
|
if (tp) {
|
||||||
tty->driver_data = 0;
|
tty->driver_data = NULL;
|
||||||
tp->tty = tp->kbd->tty = 0;
|
tp->tty = tp->kbd->tty = NULL;
|
||||||
raw3270_put_view(&tp->view);
|
raw3270_put_view(&tp->view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1673,7 +1673,7 @@ tty3270_set_termios(struct tty_struct *tty, struct termios *old)
|
|||||||
new = L_ECHO(tty) ? TF_INPUT: TF_INPUTN;
|
new = L_ECHO(tty) ? TF_INPUT: TF_INPUTN;
|
||||||
if (new != tp->inattr) {
|
if (new != tp->inattr) {
|
||||||
tp->inattr = new;
|
tp->inattr = new;
|
||||||
tty3270_update_prompt(tp, 0, 0);
|
tty3270_update_prompt(tp, NULL, 0);
|
||||||
tty3270_set_timer(tp, 1);
|
tty3270_set_timer(tp, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1759,7 +1759,7 @@ void
|
|||||||
tty3270_notifier(int index, int active)
|
tty3270_notifier(int index, int active)
|
||||||
{
|
{
|
||||||
if (active)
|
if (active)
|
||||||
tty_register_device(tty3270_driver, index, 0);
|
tty_register_device(tty3270_driver, index, NULL);
|
||||||
else
|
else
|
||||||
tty_unregister_device(tty3270_driver, index);
|
tty_unregister_device(tty3270_driver, index);
|
||||||
}
|
}
|
||||||
@ -1818,7 +1818,7 @@ tty3270_exit(void)
|
|||||||
|
|
||||||
raw3270_unregister_notifier(tty3270_notifier);
|
raw3270_unregister_notifier(tty3270_notifier);
|
||||||
driver = tty3270_driver;
|
driver = tty3270_driver;
|
||||||
tty3270_driver = 0;
|
tty3270_driver = NULL;
|
||||||
tty_unregister_driver(driver);
|
tty_unregister_driver(driver);
|
||||||
tty3270_del_views();
|
tty3270_del_views();
|
||||||
}
|
}
|
||||||
|
@ -86,8 +86,8 @@ struct vmlogrdr_priv_t {
|
|||||||
*/
|
*/
|
||||||
static int vmlogrdr_open(struct inode *, struct file *);
|
static int vmlogrdr_open(struct inode *, struct file *);
|
||||||
static int vmlogrdr_release(struct inode *, struct file *);
|
static int vmlogrdr_release(struct inode *, struct file *);
|
||||||
static ssize_t vmlogrdr_read (struct file *filp, char *data, size_t count,
|
static ssize_t vmlogrdr_read (struct file *filp, char __user *data,
|
||||||
loff_t * ppos);
|
size_t count, loff_t * ppos);
|
||||||
|
|
||||||
static struct file_operations vmlogrdr_fops = {
|
static struct file_operations vmlogrdr_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
@ -515,7 +515,7 @@ vmlogrdr_receive_data(struct vmlogrdr_priv_t *priv) {
|
|||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
vmlogrdr_read (struct file *filp, char *data, size_t count, loff_t * ppos)
|
vmlogrdr_read(struct file *filp, char __user *data, size_t count, loff_t * ppos)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
struct vmlogrdr_priv_t * priv = filp->private_data;
|
struct vmlogrdr_priv_t * priv = filp->private_data;
|
||||||
|
@ -193,7 +193,7 @@ static int vmwdt_ioctl(struct inode *i, struct file *f,
|
|||||||
return 0;
|
return 0;
|
||||||
case WDIOC_GETSTATUS:
|
case WDIOC_GETSTATUS:
|
||||||
case WDIOC_GETBOOTSTATUS:
|
case WDIOC_GETBOOTSTATUS:
|
||||||
return put_user(0, (int *)arg);
|
return put_user(0, (int __user *)arg);
|
||||||
case WDIOC_GETTEMP:
|
case WDIOC_GETTEMP:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
case WDIOC_SETOPTIONS:
|
case WDIOC_SETOPTIONS:
|
||||||
|
@ -319,7 +319,7 @@ ccwgroup_online_store (struct device *dev, struct device_attribute *attr, const
|
|||||||
if (!try_module_get(gdrv->owner))
|
if (!try_module_get(gdrv->owner))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
value = simple_strtoul(buf, 0, 0);
|
value = simple_strtoul(buf, NULL, 0);
|
||||||
ret = count;
|
ret = count;
|
||||||
if (value == 1)
|
if (value == 1)
|
||||||
ccwgroup_set_online(gdev);
|
ccwgroup_set_online(gdev);
|
||||||
|
@ -798,7 +798,7 @@ struct subchannel *
|
|||||||
cio_get_console_subchannel(void)
|
cio_get_console_subchannel(void)
|
||||||
{
|
{
|
||||||
if (!console_subchannel_in_use)
|
if (!console_subchannel_in_use)
|
||||||
return 0;
|
return NULL;
|
||||||
return &console_subchannel;
|
return &console_subchannel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1140,7 +1140,7 @@ static struct attribute *cmf_attributes[] = {
|
|||||||
&dev_attr_avg_device_disconnect_time.attr,
|
&dev_attr_avg_device_disconnect_time.attr,
|
||||||
&dev_attr_avg_control_unit_queuing_time.attr,
|
&dev_attr_avg_control_unit_queuing_time.attr,
|
||||||
&dev_attr_avg_device_active_only_time.attr,
|
&dev_attr_avg_device_active_only_time.attr,
|
||||||
0,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct attribute_group cmf_attr_group = {
|
static struct attribute_group cmf_attr_group = {
|
||||||
@ -1160,7 +1160,7 @@ static struct attribute *cmf_attributes_ext[] = {
|
|||||||
&dev_attr_avg_device_active_only_time.attr,
|
&dev_attr_avg_device_active_only_time.attr,
|
||||||
&dev_attr_avg_device_busy_time.attr,
|
&dev_attr_avg_device_busy_time.attr,
|
||||||
&dev_attr_avg_initial_command_response_time.attr,
|
&dev_attr_avg_initial_command_response_time.attr,
|
||||||
0,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct attribute_group cmf_attr_group_ext = {
|
static struct attribute_group cmf_attr_group_ext = {
|
||||||
|
@ -100,7 +100,7 @@ ccw_uevent (struct device *dev, char **envp, int num_envp,
|
|||||||
if ((buffer_size - length <= 0) || (i >= num_envp))
|
if ((buffer_size - length <= 0) || (i >= num_envp))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
envp[i] = 0;
|
envp[i] = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1057,7 +1057,7 @@ get_ccwdev_by_busid(struct ccw_driver *cdrv, const char *bus_id)
|
|||||||
__ccwdev_check_busid);
|
__ccwdev_check_busid);
|
||||||
put_driver(drv);
|
put_driver(drv);
|
||||||
|
|
||||||
return dev ? to_ccwdev(dev) : 0;
|
return dev ? to_ccwdev(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************** device driver handling ************************/
|
/************************** device driver handling ************************/
|
||||||
@ -1082,7 +1082,7 @@ ccw_device_probe (struct device *dev)
|
|||||||
ret = cdrv->probe ? cdrv->probe(cdev) : -ENODEV;
|
ret = cdrv->probe ? cdrv->probe(cdev) : -ENODEV;
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
cdev->drv = 0;
|
cdev->drv = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1113,7 +1113,7 @@ ccw_device_remove (struct device *dev)
|
|||||||
ret, cdev->dev.bus_id);
|
ret, cdev->dev.bus_id);
|
||||||
}
|
}
|
||||||
ccw_device_set_timeout(cdev, 0);
|
ccw_device_set_timeout(cdev, 0);
|
||||||
cdev->drv = 0;
|
cdev->drv = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2735,7 +2735,7 @@ qdio_free(struct ccw_device *cdev)
|
|||||||
QDIO_DBF_TEXT1(0,trace,dbf_text);
|
QDIO_DBF_TEXT1(0,trace,dbf_text);
|
||||||
QDIO_DBF_TEXT0(0,setup,dbf_text);
|
QDIO_DBF_TEXT0(0,setup,dbf_text);
|
||||||
|
|
||||||
cdev->private->qdio_data = 0;
|
cdev->private->qdio_data = NULL;
|
||||||
|
|
||||||
up(&irq_ptr->setting_up_sema);
|
up(&irq_ptr->setting_up_sema);
|
||||||
|
|
||||||
|
@ -692,7 +692,7 @@ iucv_retrieve_buffer (void)
|
|||||||
iucv_debug(1, "entering");
|
iucv_debug(1, "entering");
|
||||||
if (iucv_cpuid != -1) {
|
if (iucv_cpuid != -1) {
|
||||||
smp_call_function_on(iucv_retrieve_buffer_cpuid,
|
smp_call_function_on(iucv_retrieve_buffer_cpuid,
|
||||||
0, 0, 1, iucv_cpuid);
|
NULL, 0, 1, iucv_cpuid);
|
||||||
/* Release the cpu reserved by iucv_declare_buffer. */
|
/* Release the cpu reserved by iucv_declare_buffer. */
|
||||||
smp_put_cpu(iucv_cpuid);
|
smp_put_cpu(iucv_cpuid);
|
||||||
iucv_cpuid = -1;
|
iucv_cpuid = -1;
|
||||||
|
@ -4804,7 +4804,7 @@ static struct qeth_cmd_buffer *
|
|||||||
qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs,
|
qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs,
|
||||||
__u16, __u16, enum qeth_prot_versions);
|
__u16, __u16, enum qeth_prot_versions);
|
||||||
static int
|
static int
|
||||||
qeth_arp_query(struct qeth_card *card, char *udata)
|
qeth_arp_query(struct qeth_card *card, char __user *udata)
|
||||||
{
|
{
|
||||||
struct qeth_cmd_buffer *iob;
|
struct qeth_cmd_buffer *iob;
|
||||||
struct qeth_arp_query_info qinfo = {0, };
|
struct qeth_arp_query_info qinfo = {0, };
|
||||||
@ -4937,7 +4937,7 @@ qeth_get_adapter_cmd(struct qeth_card *card, __u32 command, __u32 cmdlen)
|
|||||||
* function to send SNMP commands to OSA-E card
|
* function to send SNMP commands to OSA-E card
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
qeth_snmp_command(struct qeth_card *card, char *udata)
|
qeth_snmp_command(struct qeth_card *card, char __user *udata)
|
||||||
{
|
{
|
||||||
struct qeth_cmd_buffer *iob;
|
struct qeth_cmd_buffer *iob;
|
||||||
struct qeth_ipa_cmd *cmd;
|
struct qeth_ipa_cmd *cmd;
|
||||||
@ -7909,9 +7909,9 @@ qeth_set_online(struct ccwgroup_device *gdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct ccw_device_id qeth_ids[] = {
|
static struct ccw_device_id qeth_ids[] = {
|
||||||
{CCW_DEVICE(0x1731, 0x01), driver_info:QETH_CARD_TYPE_OSAE},
|
{CCW_DEVICE(0x1731, 0x01), .driver_info = QETH_CARD_TYPE_OSAE},
|
||||||
{CCW_DEVICE(0x1731, 0x05), driver_info:QETH_CARD_TYPE_IQD},
|
{CCW_DEVICE(0x1731, 0x05), .driver_info = QETH_CARD_TYPE_IQD},
|
||||||
{CCW_DEVICE(0x1731, 0x06), driver_info:QETH_CARD_TYPE_OSN},
|
{CCW_DEVICE(0x1731, 0x06), .driver_info = QETH_CARD_TYPE_OSN},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(ccw, qeth_ids);
|
MODULE_DEVICE_TABLE(ccw, qeth_ids);
|
||||||
@ -8380,7 +8380,7 @@ out:
|
|||||||
|
|
||||||
static struct notifier_block qeth_ip_notifier = {
|
static struct notifier_block qeth_ip_notifier = {
|
||||||
qeth_ip_event,
|
qeth_ip_event,
|
||||||
0
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_QETH_IPV6
|
#ifdef CONFIG_QETH_IPV6
|
||||||
@ -8433,7 +8433,7 @@ out:
|
|||||||
|
|
||||||
static struct notifier_block qeth_ip6_notifier = {
|
static struct notifier_block qeth_ip6_notifier = {
|
||||||
qeth_ip6_event,
|
qeth_ip6_event,
|
||||||
0
|
NULL,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -8460,7 +8460,7 @@ qeth_reboot_event(struct notifier_block *this, unsigned long event, void *ptr)
|
|||||||
|
|
||||||
static struct notifier_block qeth_reboot_notifier = {
|
static struct notifier_block qeth_reboot_notifier = {
|
||||||
qeth_reboot_event,
|
qeth_reboot_event,
|
||||||
0
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1755,7 +1755,7 @@ qeth_driver_group_store(struct device_driver *ddrv, const char *buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_ATTR(group, 0200, 0, qeth_driver_group_store);
|
static DRIVER_ATTR(group, 0200, NULL, qeth_driver_group_store);
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
qeth_driver_notifier_register_store(struct device_driver *ddrv, const char *buf,
|
qeth_driver_notifier_register_store(struct device_driver *ddrv, const char *buf,
|
||||||
@ -1783,7 +1783,7 @@ qeth_driver_notifier_register_store(struct device_driver *ddrv, const char *buf,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DRIVER_ATTR(notifier_register, 0200, 0,
|
static DRIVER_ATTR(notifier_register, 0200, NULL,
|
||||||
qeth_driver_notifier_register_store);
|
qeth_driver_notifier_register_store);
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -66,7 +66,7 @@ smsg_message_pending(iucv_MessagePending *eib, void *pgm_data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rc = iucv_receive(eib->ippathid, eib->ipmsgid, eib->iptrgcls,
|
rc = iucv_receive(eib->ippathid, eib->ipmsgid, eib->iptrgcls,
|
||||||
msg, len, 0, 0, 0);
|
msg, len, NULL, NULL, NULL);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
msg[len] = 0;
|
msg[len] = 0;
|
||||||
EBCASC(msg, len);
|
EBCASC(msg, len);
|
||||||
@ -122,7 +122,7 @@ smsg_unregister_callback(char *prefix, void (*callback)(char *from, char *str))
|
|||||||
struct smsg_callback *cb, *tmp;
|
struct smsg_callback *cb, *tmp;
|
||||||
|
|
||||||
spin_lock(&smsg_list_lock);
|
spin_lock(&smsg_list_lock);
|
||||||
cb = 0;
|
cb = NULL;
|
||||||
list_for_each_entry(tmp, &smsg_list, list)
|
list_for_each_entry(tmp, &smsg_list, list)
|
||||||
if (tmp->callback == callback &&
|
if (tmp->callback == callback &&
|
||||||
strcmp(tmp->prefix, prefix) == 0) {
|
strcmp(tmp->prefix, prefix) == 0) {
|
||||||
@ -139,7 +139,7 @@ smsg_exit(void)
|
|||||||
{
|
{
|
||||||
if (smsg_handle > 0) {
|
if (smsg_handle > 0) {
|
||||||
cpcmd("SET SMSG OFF", NULL, 0, NULL);
|
cpcmd("SET SMSG OFF", NULL, 0, NULL);
|
||||||
iucv_sever(smsg_pathid, 0);
|
iucv_sever(smsg_pathid, NULL);
|
||||||
iucv_unregister_program(smsg_handle);
|
iucv_unregister_program(smsg_handle);
|
||||||
driver_unregister(&smsg_driver);
|
driver_unregister(&smsg_driver);
|
||||||
}
|
}
|
||||||
@ -162,19 +162,19 @@ smsg_init(void)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
smsg_handle = iucv_register_program("SMSGIUCV ", "*MSG ",
|
smsg_handle = iucv_register_program("SMSGIUCV ", "*MSG ",
|
||||||
pgmmask, &smsg_ops, 0);
|
pgmmask, &smsg_ops, NULL);
|
||||||
if (!smsg_handle) {
|
if (!smsg_handle) {
|
||||||
printk(KERN_ERR "SMSGIUCV: failed to register to iucv");
|
printk(KERN_ERR "SMSGIUCV: failed to register to iucv");
|
||||||
driver_unregister(&smsg_driver);
|
driver_unregister(&smsg_driver);
|
||||||
return -EIO; /* better errno ? */
|
return -EIO; /* better errno ? */
|
||||||
}
|
}
|
||||||
rc = iucv_connect (&smsg_pathid, 255, 0, "*MSG ", 0, 0, 0, 0,
|
rc = iucv_connect (&smsg_pathid, 255, NULL, "*MSG ", NULL, 0,
|
||||||
smsg_handle, 0);
|
NULL, NULL, smsg_handle, NULL);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG");
|
printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG");
|
||||||
iucv_unregister_program(smsg_handle);
|
iucv_unregister_program(smsg_handle);
|
||||||
driver_unregister(&smsg_driver);
|
driver_unregister(&smsg_driver);
|
||||||
smsg_handle = 0;
|
smsg_handle = NULL;
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
cpcmd("SET SMSG IUCV", NULL, 0, NULL);
|
cpcmd("SET SMSG IUCV", NULL, 0, NULL);
|
||||||
|
@ -2227,7 +2227,7 @@ zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action,
|
|||||||
/* setup new FSF request */
|
/* setup new FSF request */
|
||||||
retval = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA,
|
retval = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA,
|
||||||
erp_action ? ZFCP_REQ_AUTO_CLEANUP : 0,
|
erp_action ? ZFCP_REQ_AUTO_CLEANUP : 0,
|
||||||
0, &lock_flags, &fsf_req);
|
NULL, &lock_flags, &fsf_req);
|
||||||
if (retval < 0) {
|
if (retval < 0) {
|
||||||
ZFCP_LOG_INFO("error: Out of resources. Could not create an "
|
ZFCP_LOG_INFO("error: Out of resources. Could not create an "
|
||||||
"exchange port data request for"
|
"exchange port data request for"
|
||||||
|
@ -44,30 +44,29 @@ struct scsi_transport_template *zfcp_transport_template;
|
|||||||
|
|
||||||
struct zfcp_data zfcp_data = {
|
struct zfcp_data zfcp_data = {
|
||||||
.scsi_host_template = {
|
.scsi_host_template = {
|
||||||
name: ZFCP_NAME,
|
.name = ZFCP_NAME,
|
||||||
proc_name: "zfcp",
|
.proc_name = "zfcp",
|
||||||
proc_info: NULL,
|
.proc_info = NULL,
|
||||||
detect: NULL,
|
.detect = NULL,
|
||||||
slave_alloc: zfcp_scsi_slave_alloc,
|
.slave_alloc = zfcp_scsi_slave_alloc,
|
||||||
slave_configure: zfcp_scsi_slave_configure,
|
.slave_configure = zfcp_scsi_slave_configure,
|
||||||
slave_destroy: zfcp_scsi_slave_destroy,
|
.slave_destroy = zfcp_scsi_slave_destroy,
|
||||||
queuecommand: zfcp_scsi_queuecommand,
|
.queuecommand = zfcp_scsi_queuecommand,
|
||||||
eh_abort_handler: zfcp_scsi_eh_abort_handler,
|
.eh_abort_handler = zfcp_scsi_eh_abort_handler,
|
||||||
eh_device_reset_handler: zfcp_scsi_eh_device_reset_handler,
|
.eh_device_reset_handler = zfcp_scsi_eh_device_reset_handler,
|
||||||
eh_bus_reset_handler: zfcp_scsi_eh_bus_reset_handler,
|
.eh_bus_reset_handler = zfcp_scsi_eh_bus_reset_handler,
|
||||||
eh_host_reset_handler: zfcp_scsi_eh_host_reset_handler,
|
.eh_host_reset_handler = zfcp_scsi_eh_host_reset_handler,
|
||||||
/* FIXME(openfcp): Tune */
|
.can_queue = 4096,
|
||||||
can_queue: 4096,
|
.this_id = -1,
|
||||||
this_id: -1,
|
/*
|
||||||
/*
|
* FIXME:
|
||||||
* FIXME:
|
* one less? can zfcp_create_sbale cope with it?
|
||||||
* one less? can zfcp_create_sbale cope with it?
|
*/
|
||||||
*/
|
.sg_tablesize = ZFCP_MAX_SBALES_PER_REQ,
|
||||||
sg_tablesize: ZFCP_MAX_SBALES_PER_REQ,
|
.cmd_per_lun = 1,
|
||||||
cmd_per_lun: 1,
|
.unchecked_isa_dma = 0,
|
||||||
unchecked_isa_dma: 0,
|
.use_clustering = 1,
|
||||||
use_clustering: 1,
|
.sdev_attrs = zfcp_sysfs_sdev_attrs,
|
||||||
sdev_attrs: zfcp_sysfs_sdev_attrs,
|
|
||||||
},
|
},
|
||||||
.driver_version = ZFCP_VERSION,
|
.driver_version = ZFCP_VERSION,
|
||||||
/* rest initialised with zeros */
|
/* rest initialised with zeros */
|
||||||
|
@ -63,7 +63,7 @@ ccw_device_id_match(const struct ccw_device_id *array,
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The struct ccw device is our replacement for the globally accessible
|
/* The struct ccw device is our replacement for the globally accessible
|
||||||
|
@ -142,7 +142,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
|||||||
pte_t *pte = pte_alloc_one_kernel(mm, vmaddr);
|
pte_t *pte = pte_alloc_one_kernel(mm, vmaddr);
|
||||||
if (pte)
|
if (pte)
|
||||||
return virt_to_page(pte);
|
return virt_to_page(pte);
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void pte_free_kernel(pte_t *pte)
|
static inline void pte_free_kernel(pte_t *pte)
|
||||||
|
Loading…
Reference in New Issue
Block a user