unsigned int __nocast gfp_mask) 
gfp_t gfp_mask) 
static int snd_seq_iwffff_copy_env_from_stream(__u32 req_stype,					       iwffff_layer_t *lp,					       iwffff_env_t *ep,					       iwffff_xenv_t *ex,					       char __user **data,					       long *len,					       unsigned int __nocast gfp_mask){	__u32 stype;	iwffff_env_record_t *rp, *rp_last;	iwffff_xenv_record_t rx;	iwffff_env_point_t *pp;	iwffff_xenv_point_t px;	int points_size, idx;	ep->flags = ex->flags;	ep->mode = ex->mode;	ep->index = ex->index;	rp_last = NULL;	while (1) {		if (*len < (long)sizeof(__u32))			return -EINVAL;		if (copy_from_user(&stype, *data, sizeof(stype)))			return -EFAULT;		if (stype == IWFFFF_STRU_WAVE)			return 0;		if (req_stype != stype) {			if (stype == IWFFFF_STRU_ENV_RECP ||			    stype == IWFFFF_STRU_ENV_RECV)				return 0;		}		if (*len < (long)sizeof(rx))			return -EINVAL;		if (copy_from_user(&rx, *data, sizeof(rx)))			return -EFAULT;		*data += sizeof(rx);		*len -= sizeof(rx);		points_size = (le16_to_cpu(rx.nattack) + le16_to_cpu(rx.nrelease)) * 2 * sizeof(__u16);		if (points_size > *len)			return -EINVAL;		rp = kzalloc(sizeof(*rp) + points_size, gfp_mask);		if (rp == NULL)			return -ENOMEM;		rp->nattack = le16_to_cpu(rx.nattack);		rp->nrelease = le16_to_cpu(rx.nrelease);		rp->sustain_offset = le16_to_cpu(rx.sustain_offset);		rp->sustain_rate = le16_to_cpu(rx.sustain_rate);		rp->release_rate = le16_to_cpu(rx.release_rate);		rp->hirange = rx.hirange;		pp = (iwffff_env_point_t *)(rp + 1);		for (idx = 0; idx < rp->nattack + rp->nrelease; idx++) {			if (copy_from_user(&px, *data, sizeof(px)))				return -EFAULT;			*data += sizeof(px);			*len -= sizeof(px);			pp->offset = le16_to_cpu(px.offset);			pp->rate = le16_to_cpu(px.rate);		}		if (ep->record == NULL) {			ep->record = rp;		} else {			rp_last = rp;		}		rp_last = rp;	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/dd0fc66fb33cd610bc1a5db8a5e232d34879b4d7/ainstr_iw.c/clean/sound/core/seq/instr/ainstr_iw.c