[Spice-devel] [PATCH 01/15] Palette cache: Use correct marshal function
Fabiano FidĂȘncio
fidencio at redhat.com
Tue Nov 3 10:30:02 PST 2015
On Tue, Nov 3, 2015 at 7:10 PM, Jonathon Jongsma <jjongsma at redhat.com> wrote:
> On Tue, 2015-11-03 at 12:16 -0500, Frediano Ziglio wrote:
>> >
>> > From: Jonathon Jongsma <jjongsma at redhat.com>
>> >
>> > In order to invalidate a single palette cache item, we were using
>> > spice_marshall_msg_cursor_inval_one(), which is the marshal
>> > function
>> > used to send an invalidation message for the Cursor channel's
>> > cache.
>> > This didn't cause any problems because SPICE_MSG_CURSOR_INVAL_ONE
>> > and
>> > SPICE_MSG_DISPLAY_INVAL_PALETTE have the same message ID and
>> > parameters,
>> > but it's better to use the correct marshalling function.
>> > ---
>> > server/red_worker.c | 15 ++++++++-------
>> > 1 file changed, 8 insertions(+), 7 deletions(-)
>> >
>> > diff --git a/server/red_worker.c b/server/red_worker.c
>> > index a15d5b6..9702652 100644
>> > --- a/server/red_worker.c
>> > +++ b/server/red_worker.c
>> > @@ -7625,15 +7625,17 @@ static inline void
>> > marshall_qxl_drawable(RedChannelClient *rcc,
>> > red_lossy_marshall_qxl_drawable(display_channel
>> > ->common.worker, rcc,
>> > m, dpi);
>> > }
>> >
>> > -static inline void red_marshall_inval(RedChannelClient *rcc,
>> > - SpiceMarshaller
>> > *base_marshaller,
>> > CacheItem *cach_item)
>> > +static inline void red_marshall_inval_palette(RedChannelClient
>> > *rcc,
>> > + SpiceMarshaller
>> > *base_marshaller,
>> > + CacheItem
>> > *cache_item)
>> > {
>> > SpiceMsgDisplayInvalOne inval_one;
>> >
>> > - red_channel_client_init_send_data(rcc, cach_item->inval_type,
>> > NULL);
>> > - inval_one.id = *(uint64_t *)&cach_item->id;
>> > + red_channel_client_init_send_data(rcc, cache_item->inval_type,
>> > NULL);
>> > + inval_one.id = *(uint64_t *)&cache_item->id;
>> > +
>> > + spice_marshall_msg_display_inval_palette(base_marshaller,
>> > &inval_one);
>> >
>> > - spice_marshall_msg_cursor_inval_one(base_marshaller,
>> > &inval_one);
>> > }
>> >
>> > static void
>> > display_channel_marshall_migrate_data_surfaces(DisplayChannelClien
>> > t *dcc,
>> > @@ -8092,7 +8094,7 @@ static void
>> > display_channel_send_item(RedChannelClient
>> > *rcc, PipeItem *pipe_item
>> > break;
>> > }
>> > case PIPE_ITEM_TYPE_INVAL_ONE:
>> > - red_marshall_inval(rcc, m, (CacheItem *)pipe_item);
>> > + red_marshall_inval_palette(rcc, m, (CacheItem
>> > *)pipe_item);
>> > break;
>> > case PIPE_ITEM_TYPE_STREAM_CREATE: {
>> > StreamAgent *agent = SPICE_CONTAINEROF(pipe_item,
>> > StreamAgent,
>> > create_item);
>> > @@ -9348,7 +9350,6 @@ static void
>> > display_channel_client_release_item_before_push(DisplayChannelClien
>> > t
>> > free(item);
>> > break;
>> > }
>> > - case PIPE_ITEM_TYPE_INVAL_ONE:
>> > case PIPE_ITEM_TYPE_VERB:
>> > case PIPE_ITEM_TYPE_MIGRATE_DATA:
>> > case PIPE_ITEM_TYPE_PIXMAP_SYNC:
>>
>> Jonathon, did you test this issue?
>> How?
>>
>
> A little bit, but not very successfully. I'm afraid I wasn't even able
> to trigger this message type. I'm not quite sure what I was doing to
> trigger it when I initially discovered the issue.
>
> As I mentioned in a previous message, the warning was caused by the
> removal of the PIPE_ITEM_TYPE_INVAL_ONE case from
> display_channel_send_item(). In the process of splitting the old patch,
> the removal of this case was put into the same commit ("Fix warning due
> to unexpected pipe item type") as the improper fix. In other words,
> that patch introduced the regression and "fixed" it at the same time.
> So if we simply drop that patch, the regression will not be introduced.
>
> However, while investigating the issue, I realized that we were
> technically using the wrong marshal function, so I thought it was worth
> posting a new patch for that.
>
>
>> It works correctly at least normal usage but I think this involve
>> some migration.
>
> I'm pretty sure that I was not doing anything related to migration when
> I originally discovered the warning, but unfortunately I can't remember
> the details :/
>From my IRC logs:
13:42 < jjongsma> It happened at startup when booting a rhel7 vm
13:42 < jjongsma> after some of the startup text messages scrolled up
the screen, at some point it looked like the resolution was being
changed, and then it aborted
There was also a backtrace, but unfortunately it's not on fpaste anymore.
Best Regards,
--
Fabiano FidĂȘncio
More information about the Spice-devel
mailing list