Lines Matching refs:session

59 static void vmcp_response_alloc(struct vmcp_session *session)  in vmcp_response_alloc()  argument
64 order = get_order(session->bufsize); in vmcp_response_alloc()
65 nr_pages = ALIGN(session->bufsize, PAGE_SIZE) >> PAGE_SHIFT; in vmcp_response_alloc()
74 session->response = (char *)page_to_virt(page); in vmcp_response_alloc()
75 session->cma_alloc = 1; in vmcp_response_alloc()
78 session->response = (char *)__get_free_pages(GFP_KERNEL | __GFP_RETRY_MAYFAIL, order); in vmcp_response_alloc()
81 static void vmcp_response_free(struct vmcp_session *session) in vmcp_response_free() argument
86 if (!session->response) in vmcp_response_free()
88 order = get_order(session->bufsize); in vmcp_response_free()
89 nr_pages = ALIGN(session->bufsize, PAGE_SIZE) >> PAGE_SHIFT; in vmcp_response_free()
90 if (session->cma_alloc) { in vmcp_response_free()
91 page = virt_to_page(session->response); in vmcp_response_free()
93 session->cma_alloc = 0; in vmcp_response_free()
95 free_pages((unsigned long)session->response, order); in vmcp_response_free()
97 session->response = NULL; in vmcp_response_free()
102 struct vmcp_session *session; in vmcp_open() local
107 session = kmalloc_obj(*session); in vmcp_open()
108 if (!session) in vmcp_open()
111 session->bufsize = PAGE_SIZE; in vmcp_open()
112 session->response = NULL; in vmcp_open()
113 session->resp_size = 0; in vmcp_open()
114 mutex_init(&session->mutex); in vmcp_open()
115 file->private_data = session; in vmcp_open()
121 struct vmcp_session *session; in vmcp_release() local
123 session = file->private_data; in vmcp_release()
125 vmcp_response_free(session); in vmcp_release()
126 kfree(session); in vmcp_release()
135 struct vmcp_session *session; in vmcp_read() local
137 session = file->private_data; in vmcp_read()
138 if (mutex_lock_interruptible(&session->mutex)) in vmcp_read()
140 if (!session->response) { in vmcp_read()
141 mutex_unlock(&session->mutex); in vmcp_read()
144 size = min_t(size_t, session->resp_size, session->bufsize); in vmcp_read()
146 session->response, size); in vmcp_read()
148 mutex_unlock(&session->mutex); in vmcp_read()
158 struct vmcp_session *session; in vmcp_write() local
165 session = file->private_data; in vmcp_write()
166 if (mutex_lock_interruptible(&session->mutex)) { in vmcp_write()
170 if (!session->response) in vmcp_write()
171 vmcp_response_alloc(session); in vmcp_write()
172 if (!session->response) { in vmcp_write()
173 mutex_unlock(&session->mutex); in vmcp_write()
178 session->resp_size = cpcmd(cmd, session->response, session->bufsize, in vmcp_write()
179 &session->resp_code); in vmcp_write()
180 mutex_unlock(&session->mutex); in vmcp_write()
201 struct vmcp_session *session; in vmcp_ioctl() local
205 session = file->private_data; in vmcp_ioctl()
207 if (mutex_lock_interruptible(&session->mutex)) in vmcp_ioctl()
211 ret = put_user(session->resp_code, argp); in vmcp_ioctl()
214 vmcp_response_free(session); in vmcp_ioctl()
215 ret = get_user(session->bufsize, argp); in vmcp_ioctl()
217 session->bufsize = PAGE_SIZE; in vmcp_ioctl()
218 if (!session->bufsize || get_order(session->bufsize) > 8) { in vmcp_ioctl()
219 session->bufsize = PAGE_SIZE; in vmcp_ioctl()
224 ret = put_user(session->resp_size, argp); in vmcp_ioctl()
229 mutex_unlock(&session->mutex); in vmcp_ioctl()