On 8/23/2018 9:58 AM, Andrew Rybchenko wrote: > On 22.08.2018 19:55, Ferruh Yigit wrote: >> On 8/14/2018 1:57 AM, Lu, Wenzhuo wrote: >>> Hi Andrew, >>> >>>> -----Original Message----- >>>> From: Andrew Rybchenko [mailto:arybche...@solarflare.com] >>>> Sent: Monday, August 13, 2018 4:39 PM >>>> To: Lu, Wenzhuo <wenzhuo...@intel.com>; Thomas Monjalon >>>> <tho...@monjalon.net>; Yigit, Ferruh <ferruh.yi...@intel.com> >>>> Cc: dev@dpdk.org >>>> Subject: Re: [dpdk-dev] [PATCH v2] ethdev: fix device info getting >>>> >>>> On 13.08.2018 05:50, Lu, Wenzhuo wrote: >>>>> Hi Thomas, >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Thomas Monjalon [mailto:tho...@monjalon.net] >>>>>> Sent: Wednesday, August 1, 2018 11:37 PM >>>>>> To: Lu, Wenzhuo <wenzhuo...@intel.com>; Andrew Rybchenko >>>>>> <arybche...@solarflare.com>; Yigit, Ferruh <ferruh.yi...@intel.com> >>>>>> Cc: dev@dpdk.org >>>>>> Subject: Re: [dpdk-dev] [PATCH v2] ethdev: fix device info getting >>>>>> >>>>>> 16/07/2018 03:58, Lu, Wenzhuo: >>>>>>> Hi Andrew, >>>>>>> >>>>>>>> -----Original Message----- >>>>>>>> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Lu, Wenzhuo >>>>>>>> Sent: Monday, July 16, 2018 9:08 AM >>>>>>>> To: Andrew Rybchenko <arybche...@solarflare.com>; dev@dpdk.org >>>>>>>> Cc: Yigit, Ferruh <ferruh.yi...@intel.com>; Thomas Monjalon >>>>>>>> <tho...@monjalon.net> >>>>>>>> Subject: Re: [dpdk-dev] [PATCH v2] ethdev: fix device info getting >>>>>>>> >>>>>>>> Hi Andrew, >>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: Andrew Rybchenko [mailto:arybche...@solarflare.com] >>>>>>>>> Sent: Friday, July 13, 2018 4:03 PM >>>>>>>>> To: Lu, Wenzhuo <wenzhuo...@intel.com>; dev@dpdk.org >>>>>>>>> Cc: Yigit, Ferruh <ferruh.yi...@intel.com>; Thomas Monjalon >>>>>>>>> <tho...@monjalon.net> >>>>>>>>> Subject: Re: [dpdk-dev] [PATCH v2] ethdev: fix device info getting >>>>>>>>> >>>>>>>>> Hi, Wenzhuo, >>>>>>>>> >>>>>>>>> I'm sorry, but I have more even harder questions than the previous >>>> one. >>>>>>>>> This questions are rather generic and mainly to ethdev maintainers. >>>>>>>>> >>>>>>>>> On 13.07.2018 05:42, Wenzhuo Lu wrote: >>>>>>>>>> The device information cannot be gotten correctly before the >>>>>>>>>> configuration is set. Because on some NICs the information has >>>>>>>>>> dependence on the configuration. >>>>>>>>> Thinking about it I have the following question. Is it valid >>>>>>>>> behaviour of the dev_info if it changes after configuration? >>>>>>>>> I always thought that the primary goal of the dev_info is to >>>>>>>>> provide information to app about device capabilities to allow app >>>>>>>>> configure device and queues correctly. Now we see the case when >>>>>>>>> dev_info changes on configure. May be it is acceptable, but it is >>>>>>>>> really suspicious. If we accept it, it should be documented. >>>>>>>>> May be dev_info should be split into parts: part which is >>>>>>>>> persistent and part which may depend on device configuration. >>>>>>>> As I remember, the similar discussion has happened :) I've raised >>>>>>>> the similar suggestion like this. But we don’t make it happen. >>>>>>>> The reason is, you see, this is the rte layer's behavior. So the >>>>>>>> user doesn't have to know it. From APP's PoV, it inputs the >>>>>>>> configuration, it calls this API "rte_eth_dev_configure". It >>>>>>>> doesn't know the configuration is copied before getting the info or >>>>>>>> not. >>>>>>>> So, to my opinion, we can still keep the behavior. We only need to >>>>>>>> split it into parts when we do see the case that cannot make it. >>>>>>> Maybe I talked too much about the patch. Think about it again. Your >>>>>>> comments is about how to use the APIs, rte_eth_dev_info_get, >>>>>> rte_eth_dev_configure. To my opinion, rte_eth_dev_info_get is just to >>>>>> get the info. It can be called anywhere, before configuration or >>>>>> after. It's reasonable the info changes with the configuration changing. >>>>>>> But we do have something missing, like, rte_eth_dev_capability_get >>>>>>> which >>>>>> should be stable. APP can use this API to get the necessary info >>>>>> before configuration. >>>>>>> A question, maybe a little divergent thinking, that APP should have >>>>>>> some >>>>>> intelligence to handle the capability automatically. So getting the >>>>>> capability is not so good and effective, looks like we still need the >>>>>> human >>>> involvement. >>>>>> Maybe that the reason currently we suppose APP know the capability >>>>>> from the paper copies, examples... >>>>>> >>>>>> I am not sure to understand all the sentences. >>>>>> But I agree that we should take a decision about the stability of these >>>> infos. >>>>>> Either infos cannot change after probing, or we must document that >>>>>> the app must request infos regularly (when?). >>>>> Sorry, I missed this mail. >>>>> >>>>> I have the concern that different NICs have different behavior. One info >>>> can be stable on a NIC but dynamic on another. Considering this, we may >>>> better not splitting the rte_eth_dev_info_get to 2 APIs. And comparing with >>>> handling this in rte layer, maybe we can let every NIC has its own >>>> decision. >>>>> I have an idea. Maybe we can add a parameter for potential dynamic >>>>> fields. Like, Changing uint16_t nb_rx_queues; to struct nb_rx_queues { >>>>> uint16_t value; bool stable; } >>>> May be it is just very bad example, but as I understand nb_rx_queues is >>>> mainly required to configure the device properly. Or should app configure, >>>> get new value, reconfigure again, get new value and so on and stop when >>>> previous is equal to the new one. Yes, I dramatise and it sounds really >>>> bad. >>>> In any case it would over-complicate interface and no single app will do it >>>> correctly. >>> I think you're talking about max_rx_queues. APP can get that info before >>> configuration. Then configure rx queue number which is not larger than it. >>> That's enough. >>> nb_rx_queues should be the number which is configured by APP and how many >>> queues are actually used. To my opinion, it's mainly used by the GUI to >>> show the value to human being. >>> >>> BTW, max_rx_queues could be an good example that shows that some parameters >>> are stable on some NICs but not on other NICs. >>> Take Intel NICs for example (I don’t familiar with others.), normally >>> max_rx_queues is stable on PF. But on VF, as the max number is decided by >>> PF, it could be dynamic. When VF starts, it can get an default value from >>> PF. If it not enough, it can request a larger one from PF. If the number >>> works, VF can get a new number. >> "struct rte_eth_dev_info" is a little overloaded, it has: >> - static info, like *device >> - device limitations, max_*, *_lim >> - device capabilities, *_capa >> - suggested configurations, default_*conf >> - device configuration, nb_[r/t]x_queues >> - other, switch_info >> >> There is a concern that some values are dynamic, but this is not new, for >> example nb_rx/tx_queues can be changed by rte_eth_dev_rx/tx_queue_config() >> API >> and rte_eth_dev_info() output will be changed. > > The example looks different to me. It is explicit changes directly > requested by the application. So, it is not a surprise that it changes. > >> For this patch suggested configuration changes based on some other config >> values >> looks ok as concept. >> So I think we can say after every configuration related API dev info can be >> changed. > > I think that saying that any configuration changes may result in any > changes in dev_info is hardly helpful. I'd suggest to be more specific. > Yes, it is harder and will have bugs, but at least it is helpful.
Hi Andrew, Wenzhuo, Back to this patch, which fixes an actual defect, What do you think about: 1- Keep existing patch but extend it as, save the original "dev->data" and revert it back to this original data on all error path. 2- Update rte_eth_dev_info() API document and say default configuration can be changed based on other config fields. So this reduces the scope of things can change in dev_info. Thanks, ferruh > >> But rte_eth_dev_info_get() has been called within rte_eth_dev_configure() >> creating a cyclic dependency, this is forcing copy the user provided config >> before rte_eth_dev_info(). >> >> This case the concern of copying user provided config to device config in >> early >> stages cause inconsistent data in error case, this is valid concern and >> unfortunately already an issue with the current implementation. >> >> What would you think keep the logic in this patch but improve it with save >> and >> restore existing device config for error cases? >> >>>> Stable dev_info is simple. If there are real cases when something can't be >>>> stable (and may be recommended Rx/Tx ring sizes is good example, it should >>>> at least documented in dev_info structure description or may be moved to >>>> separate API. >>>> >>>>> By default, the stable is false. Then every NIC can maintain its own >>>> behavior. >>>>> Some fileds that must be stable can be left unchanged, like, driver_name, >>>> max_rx_queues. >>>>> As this patch is just reversing a bad commit to fix a bug, if my idea >>>>> sounds >>>> good or worth discussing, I can send another RFC mail for it. > >