All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yijing Wang <wangyijing@huawei.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: <linux-pci@vger.kernel.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Subject: Re: [PATCH 1/2] PCI: rename pci_is_bridge() to pci_has_subordinate()
Date: Tue, 8 Apr 2014 17:22:04 +0800	[thread overview]
Message-ID: <5343BFBC.1030208@huawei.com> (raw)
In-Reply-To: <20140404233157.GA15806@google.com>

>>  
>> -	/*
>> -	 * pci_is_bridge() is not suitable here, because pci_dev->subordinate
>> -	 * is set only after acpi_pci_find_device() has been called for the
>> -	 * given device.
>> -	 */
> 
> This hunk shouldn't be here.  My guess is that you intended to replace
> the code below with the new pci_is_bridge() that you introduced in
> patch [2/2].  That new pci_is_bridge() is never used, and it does the
> same hdr_type test as the code below.  But you apparently forgot to
> change this code to use it?
> 
>>  	check_children = pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE
>>  			|| pci_dev->hdr_type == PCI_HEADER_TYPE_CARDBUS;
>>  	/* Please ref to ACPI spec for the syntax of _ADR */
>> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c


Hi Bjorn, I noticed the kernel compare (pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) directly
to identify bridge device. But the pci_is_brdge() helper function(which seems to do this) actually
only check the device whether has subordinate bus. This maybe confuses people.

So I think we should rename current pci_is_brdge(), and refactor a new pci_is_bridge() helper function.
This can make code more readable, also there are a lot of codes using (pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) directly compare.
If you think this make sense, we can replace them by the new pci_is_bridge().

eg. in acpiphp:

enable_device()
    ......
    	for (pass = 0; pass < 2; pass++) {
		list_for_each_entry(dev, &bus->devices, bus_list) {
			if (PCI_SLOT(dev->devfn) != slot->device)
				continue;
			if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
			    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
				max = pci_scan_bridge(bus, dev, max, pass);
				if (pass && dev->subordinate)
					pci_bus_size_bridges(dev->subordinate);
			}
		}
	}
    ......

and in PCI core code

pci_rescan_bus()
    .......
    	down_read(&pci_bus_sem);
	list_for_each_entry(dev, &bus->devices, bus_list)
		if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
		    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
			if (dev->subordinate)
				__pci_bus_size_bridges(dev->subordinate,
							 &add_list);
	up_read(&pci_bus_sem);
    ..........


Thanks!
Yijing.





>> index 25f0bc6..019dcb2 100644
>> --- a/drivers/pci/pci-driver.c
>> +++ b/drivers/pci/pci-driver.c
>> @@ -580,14 +580,14 @@ static void pci_pm_default_resume(struct pci_dev *pci_dev)
>>  {
>>  	pci_fixup_device(pci_fixup_resume, pci_dev);
>>  
>> -	if (!pci_is_bridge(pci_dev))
>> +	if (!pci_has_subordinate(pci_dev))
> 
> The rest of this is a simple rename and looks fine to me.
> 
>>  		pci_enable_wake(pci_dev, PCI_D0, false);
>>  }
>>  
>>  static void pci_pm_default_suspend(struct pci_dev *pci_dev)
>>  {
>>  	/* Disable non-bridge devices without PM support */
>> -	if (!pci_is_bridge(pci_dev))
>> +	if (!pci_has_subordinate(pci_dev))
>>  		pci_disable_enabled_device(pci_dev);
>>  }
>>  
>> @@ -711,7 +711,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
>>  
>>  	if (!pci_dev->state_saved) {
>>  		pci_save_state(pci_dev);
>> -		if (!pci_is_bridge(pci_dev))
>> +		if (!pci_has_subordinate(pci_dev))
>>  			pci_prepare_to_sleep(pci_dev);
>>  	}
>>  
>> @@ -954,7 +954,7 @@ static int pci_pm_poweroff_noirq(struct device *dev)
>>  			return error;
>>  	}
>>  
>> -	if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
>> +	if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev))
>>  		pci_prepare_to_sleep(pci_dev);
>>  
>>  	/*
>> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
>> index 4df38df..a3b9cc1 100644
>> --- a/drivers/pci/pci.h
>> +++ b/drivers/pci/pci.h
>> @@ -79,7 +79,7 @@ static inline void pci_wakeup_event(struct pci_dev *dev)
>>  	pm_wakeup_event(&dev->dev, 100);
>>  }
>>  
>> -static inline bool pci_is_bridge(struct pci_dev *pci_dev)
>> +static inline bool pci_has_subordinate(struct pci_dev *pci_dev)
>>  {
>>  	return !!(pci_dev->subordinate);
>>  }
>> -- 
>> 1.7.1
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 


-- 
Thanks!
Yijing


      reply	other threads:[~2014-04-08  9:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-14  9:38 [PATCH 1/2] PCI: rename pci_is_bridge() to pci_has_subordinate() Yijing Wang
2014-04-04 23:31 ` Bjorn Helgaas
2014-04-08  9:22   ` Yijing Wang [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5343BFBC.1030208@huawei.com \
    --to=wangyijing@huawei.com \
    --cc=bhelgaas@google.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.