[Nouveau] [PATCH v2 1/6] make RAM device optional

Alexandre Courbot gnurou at gmail.com
Mon Feb 16 23:22:47 PST 2015


On Wed, Feb 11, 2015 at 4:40 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>
> On Wed, Feb 11, 2015 at 2:21 AM, Alexandre Courbot <gnurou at gmail.com> wrote:
> > @@ -150,7 +151,10 @@ gf100_ltc_init_tag_ram(struct nvkm_fb *pfb, struct nvkm_ltc_priv *priv)
> >         int ret;
> >
> >         /* tags for 1/4 of VRAM should be enough (8192/4 per GiB of VRAM) */
> > -       priv->num_tags = (pfb->ram->size >> 17) / 4;
> > +       if (pfb->ram)
> > +               priv->num_tags = (pfb->ram->size >> 17) / 4;
> > +       else
> > +               priv->num_tags = (1 << 17);
> >         if (priv->num_tags > (1 << 17))
> >                 priv->num_tags = 1 << 17; /* we have 17 bits in PTE */
> >         priv->num_tags = (priv->num_tags + 63) & ~63; /* round up to 64 */
> > @@ -170,8 +174,11 @@ gf100_ltc_init_tag_ram(struct nvkm_fb *pfb, struct nvkm_ltc_priv *priv)
> >         tag_size += tag_align;
> >         tag_size  = (tag_size + 0xfff) >> 12; /* round up */
> >
> > -       ret = nvkm_mm_tail(&pfb->vram, 1, 1, tag_size, tag_size, 1,
> > -                          &priv->tag_ram);
> > +       if (pfb->ram)
> > +               ret = nvkm_mm_tail(&pfb->vram, 1, 1, tag_size, tag_size, 1,
> > +                                  &priv->tag_ram);
> > +       else
> > +               ret = -1;
> >         if (ret) {
> >                 priv->num_tags = 0;
> >         } else {
>
> Seems like you could just avoid a lot of this and just start the
> function out with
>
> if (!pfb->ram) {
>     priv->num_tags = 0; (is that even necessary? the object is
> probably kzalloc'd)
>     ret = nouveau_mm_init(&priv->tags, 0, 0, 1);
>     return ret;
> }
>
> That's essentially what happens, no? Perhaps you could go a step
> further and teach the base code about uninitialized tags mm, but that
> may not be worth it.

You're absolutely correct - had I tried to understand the code instead
of workaround my way around it, I would have figured that out.

Actually the intention should be to keep some space for tags even when
VRAM is not present, so my code was not even correct in that respect.
We can keep it like this for the time being though, until I figure out
how this works for GK20A.


More information about the Nouveau mailing list