Messages in this thread | | | From | Mikhail Gavrilov <> | Date | Thu, 8 Aug 2019 08:48:52 +0500 | Subject | Re: The issue with page allocation 5.3 rc1-rc2 (seems drm culprit here) |
| |
On Tue, 6 Aug 2019 at 06:48, Hillf Danton <hdanton@sina.com> wrote: > > My bad, respin with one header file added. > > Hillf > -----8<--- > > --- a/drivers/gpu/drm/amd/display/dc/core/dc.c > +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c > @@ -23,6 +23,7 @@ > */ > > #include <linux/slab.h> > +#include <linux/mm.h> > > #include "dm_services.h" > > @@ -1174,8 +1175,12 @@ struct dc_state *dc_create_state(struct > struct dc_state *context = kzalloc(sizeof(struct dc_state), > GFP_KERNEL); > > - if (!context) > - return NULL; > + if (!context) { > + context = kvzalloc(sizeof(struct dc_state), > + GFP_KERNEL); > + if (!context) > + return NULL; > + } > /* Each context must have their own instance of VBA and in order to > * initialize and obtain IP and SOC the base DML instance from DC is > * initially copied into every context > @@ -1195,8 +1200,13 @@ struct dc_state *dc_copy_state(struct dc > struct dc_state *new_ctx = kmemdup(src_ctx, > sizeof(struct dc_state), GFP_KERNEL); > > - if (!new_ctx) > - return NULL; > + if (!new_ctx) { > + new_ctx = kvmalloc(sizeof(*new_ctx), GFP_KERNEL); > + if (new_ctx) > + *new_ctx = *src_ctx; > + else > + return NULL; > + } > > for (i = 0; i < MAX_PIPES; i++) { > struct pipe_ctx *cur_pipe = &new_ctx->res_ctx.pipe_ctx[i]; > @@ -1230,7 +1240,7 @@ static void dc_state_free(struct kref *k > { > struct dc_state *context = container_of(kref, struct dc_state, refcount); > dc_resource_state_destruct(context); > - kfree(context); > + kvfree(context); > } > > void dc_release_state(struct dc_state *context) > -- >
Unfortunately error "gnome-shell: page allocation failure: order:4, mode:0x40cc0(GFP_KERNEL|__GFP_COMP), nodemask=(null),cpuset=/,mems_allowed=0" still happens even with applying this patch.
Thanks.
-- Best Regards, Mike Gavrilov.
| |