|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 13/17 v5] xen/arm: vpl011: Modify xenconsole to support multiple consoles
Hi Wei,
>>
>> struct console {
>> + char *ttyname;
>> int master_fd;
>> int master_pollfd_idx;
>> int slave_fd;
>> int log_fd;
>> struct buffer buffer;
>> char *xspath;
>> + char *log_suffix;
>
> I suppose both new fields can be const.
ok. I will make all the new fields as const char *const.
>
>> int ring_ref;
>> xenevtchn_handle *xce_handle;
>> int xce_pollfd_idx;
>> @@ -107,16 +109,112 @@ struct console {
>> struct domain *d;
>> };
>>
>> +struct console_data {
>> + char *xsname;
>> + char *ttyname;
>> + char *log_suffix;
>
> const for all three.
ok.
>
>> +static inline void console_iter_void_arg1(struct domain *d,
>> +
>> VOID_ITER_FUNC_ARG1 iter_func)
>
> Too many tabs here and below?
>
> You might want to configure your editor to display tab as 8 spaces.
I have set my editor to use 8 spaces for a tab. I will fix these misalignments.
>
>> +{
>> + int i = 0;
>> + struct console *con = &(d->console[0]);
>> +
>
> No need to have the (), I think.
ok.
>
>> -static struct domain *create_domain(int domid)
>> +static int console_init(struct console *con, struct domain *dom, void
>> **data)
>> {
>> - struct domain *dom;
>> char *s;
>> + int err = -1;
>> struct timespec ts;
>> - struct console *con;
>> + struct console_data **con_data = (struct console_data **)data;
>> + char *xsname;
>>
>> if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {
>> dolog(LOG_ERR, "Cannot get time of day %s:%s:L%d",
>> __FILE__, __FUNCTION__, __LINE__);
>> - return NULL;
>> + return err;
>> + }
>> +
>
> There is a danger that you return at this point, the cleanup path in
> caller will free garbage.
>
> I suggest you at least initialise all pointers to NULL at the beginning.
>
I am checking that the pointer is not null before freeing them.
>> + con->master_fd = -1;
>> + con->master_pollfd_idx = -1;
>> + con->slave_fd = -1;
>> + con->log_fd = -1;
>> + con->ring_ref = -1;
>> + con->local_port = -1;
>> + con->remote_port = -1;
>> + con->xce_pollfd_idx = -1;
>> + con->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec /
>> 1000000) + RATE_LIMIT_PERIOD;
>> + con->d = dom;
>> + con->ttyname = (*con_data)->ttyname;
>> + con->log_suffix = (*con_data)->log_suffix;
>> + xsname = (*con_data)->xsname;
>> + con->xspath = xs_get_domain_path(xs, dom->domid);
>> + s = realloc(con->xspath, strlen(con->xspath) +
>> + strlen(xsname) + 1);
>> + if (s)
>> + {
>> + con->xspath = s;
>> + strcat(con->xspath, xsname);
>> + err = 0;
>> }
>>
>> + (*con_data)++;
>> +
>> + return err;
>> +}
>> +
>> +
> [...]
>> +static void handle_console_ring(struct console *con)
>> +{
>> + if (con->event_count < RATE_LIMIT_ALLOWANCE) {
>> + if (con->xce_handle != NULL &&
>> + con->xce_pollfd_idx != -1 &&
>> + !(fds[con->xce_pollfd_idx].revents &
>> + ~(POLLIN|POLLOUT|POLLPRI)) &&
>> + (fds[con->xce_pollfd_idx].revents &
>> + POLLIN))
>> + handle_ring_read(con);
>> + }
>
> Refactoring like this should go to its own patch(es).
>
> It is currently very hard to review this patch because refactoring is
> mixed with all the iterator changes.
>
> I can't really continue at this point. Sorry. Please split the
> refactoring of all the buffer_* and handle_console_* functions to
> separate patches.
I have split the changes such that each new function and the related
changes appear in one patch.
Regards,
Bhupinder
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |