|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v5][PATCH 1/2] xen:x86:mm:p2m: introduce set_identity_p2m_entry
>>> On 29.07.14 at 09:35, <tiejun.chen@xxxxxxxxx> wrote:
> On 2014/7/29 15:05, Jan Beulich wrote:
>>>>> On 29.07.14 at 08:40, <tiejun.chen@xxxxxxxxx> wrote:
>>> + struct p2m_domain *p2m = p2m_get_hostp2m(d);
>>> + int ret = -EBUSY;
>>> +
>>> + gfn_lock(p2m, gfn, 0);
>>> +
>>> + tmp_mfn = p2m->get_entry(p2m, gfn, &p2mt, &a, 0, NULL);
>>> +
>>> + if ( mfn_valid(tmp_mfn) )
>>> + {
>>> + gdprintk(XENLOG_ERR,
>>> + "Overlapping RMRRs at %"PRIx64".\n", (paddr_t)gfn);
>>
>> Pointless cast: Just use %lx in the format string. Additionally I don't
>> think the message text is correct: You don't really know whether
>> what's there is another RMRR (or that the context you're being
>> called in refers to an RMRR at all). On the contrary - if it was an
>> RMRR (or to be precise, a previously established identity mapping),
>> you'd want to report success. And generally we have no stop at
>> the end of log messages.
>
> So just print this,
>
> + gdprintk(XENLOG_ERR,
> + "Overlapping at %lx.\n", (paddr_t)gfn);
Of course not - such a message is really meaningless.
printk(XENLOG_G_WARNING "Cannot identity map %d:%lx, already mapped to %lx\n",
d->domain_id, gfn, mfn_x(mfn));
would be a message conveying all information necessary to
gain initial understanding of what the issue is.
>>
>>> + goto out;
>>
>> Once again, when error handling is that simple please avoid using
>> "goto".
>>
>
> Its make no sense to me.
>
> Did you see this function in this same file,
Referring to existing bad examples is never going to help.
> Yes, previously I really can't understand what's that code style in xen.
> So as I remember I ask you guy if xen has checkpatch.pl like Linux, qemu
> or other stuff, but you didn't reply this point.
We just have none, and for the specific case of using or not using
"goto" it wouldn't help you anyway.
> So I have to try
> following existing codes. Now I'm curious what we should abide.
Where is the problem with just writing
int set_identity_p2m_entry(struct domain *d, unsigned long gfn)
{
p2m_type_t p2mt;
p2m_access_t a;
mfn_t mfn;
struct p2m_domain *p2m = p2m_get_hostp2m(d);
int ret;
gfn_lock(p2m, gfn, 0);
mfn = p2m->get_entry(p2m, gfn, &p2mt, &a, 0, NULL);
if ( !mfn_valid(mfn) )
ret = p2m_set_entry(p2m, gfn, _mfn(gfn), PAGE_ORDER_4K, p2m_mmio_direct,
p2m_access_rw);
else if ( mfn_x(mfn) == gfn )
ret = 0;
else
{
printk(XENLOG_G_WARNING
"Cannot identity map %d:%lx, already mapped to %lx\n",
d->domain_id, gfn, mfn_x(mfn));
ret = -EBUSY;
}
gfn_unlock(p2m, gfn, 0);
return ret;
}
? Of course it may still be necessary to also inspect the obtained p2mt
and a.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |