static int kfd_ioctl_get_process_apertures(struct file *filp, struct kfd_process *p, void __user *arg) { struct kfd_ioctl_get_process_apertures_args args; struct kfd_process_device_apertures *pAperture; struct kfd_process_device *pdd; dev_dbg(kfd_device, "get apertures for PASID %d", p->pasid); if (copy_from_user(&args, arg, sizeof(args))) return -EFAULT; args.num_of_nodes = 0; mutex_lock(&p->mutex); /*if the process-device list isn't empty*/ if (kfd_has_process_device_data(p)) { /* Run over all pdd of the process */ pdd = kfd_get_first_process_device_data(p); do { pAperture = &args.process_apertures[args.num_of_nodes]; pAperture->gpu_id = pdd->dev->id; pAperture->lds_base = pdd->lds_base; pAperture->lds_limit = pdd->lds_limit; pAperture->gpuvm_base = pdd->gpuvm_base; pAperture->gpuvm_limit = pdd->gpuvm_limit; pAperture->scratch_base = pdd->scratch_base; pAperture->scratch_limit = pdd->scratch_limit; dev_dbg(kfd_device, "node id %u\n", args.num_of_nodes); dev_dbg(kfd_device, "gpu id %u\n", pdd->dev->id); dev_dbg(kfd_device, "lds_base %llX\n", pdd->lds_base); dev_dbg(kfd_device, "lds_limit %llX\n", pdd->lds_limit); dev_dbg(kfd_device, "gpuvm_base %llX\n", pdd->gpuvm_base); dev_dbg(kfd_device, "gpuvm_limit %llX\n", pdd->gpuvm_limit); dev_dbg(kfd_device, "scratch_base %llX\n", pdd->scratch_base); dev_dbg(kfd_device, "scratch_limit %llX\n", pdd->scratch_limit); args.num_of_nodes++; } while ((pdd = kfd_get_next_process_device_data(p, pdd)) != NULL && (args.num_of_nodes < NUM_OF_SUPPORTED_GPUS)); } mutex_unlock(&p->mutex); if (copy_to_user(arg, &args, sizeof(args))) return -EFAULT; return 0; }
static int kfd_ioctl_get_process_apertures(struct file *filp, struct kfd_process *p, void *data) { struct kfd_ioctl_get_process_apertures_args *args = data; struct kfd_process_device_apertures *pAperture; struct kfd_process_device *pdd; dev_dbg(kfd_device, "get apertures for PASID %d", p->pasid); args->num_of_nodes = 0; mutex_lock(&p->mutex); /*if the process-device list isn't empty*/ if (kfd_has_process_device_data(p)) { /* Run over all pdd of the process */ pdd = kfd_get_first_process_device_data(p); do { pAperture = &args->process_apertures[args->num_of_nodes]; pAperture->gpu_id = pdd->dev->id; pAperture->lds_base = pdd->lds_base; pAperture->lds_limit = pdd->lds_limit; pAperture->gpuvm_base = pdd->gpuvm_base; pAperture->gpuvm_limit = pdd->gpuvm_limit; pAperture->scratch_base = pdd->scratch_base; pAperture->scratch_limit = pdd->scratch_limit; dev_dbg(kfd_device, "node id %u\n", args->num_of_nodes); dev_dbg(kfd_device, "gpu id %u\n", pdd->dev->id); dev_dbg(kfd_device, "lds_base %llX\n", pdd->lds_base); dev_dbg(kfd_device, "lds_limit %llX\n", pdd->lds_limit); dev_dbg(kfd_device, "gpuvm_base %llX\n", pdd->gpuvm_base); dev_dbg(kfd_device, "gpuvm_limit %llX\n", pdd->gpuvm_limit); dev_dbg(kfd_device, "scratch_base %llX\n", pdd->scratch_base); dev_dbg(kfd_device, "scratch_limit %llX\n", pdd->scratch_limit); args->num_of_nodes++; pdd = kfd_get_next_process_device_data(p, pdd); } while (pdd && (args->num_of_nodes < NUM_OF_SUPPORTED_GPUS)); } mutex_unlock(&p->mutex); return 0; }