lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202112160214.4Ffd17JG-lkp@intel.com>
Date:   Thu, 16 Dec 2021 02:30:23 +0800
From:   kernel test robot <lkp@...el.com>
To:     Martin PoviĊĦer <povik@...tonmail.com>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
        Hector Martin <marcan@...can.st>
Subject: [asahilinux:touchpad/wip 63/82] drivers/dma/apple-admac.c:125:5:
 warning: no previous prototype for 'admac_alloc_chan_resources'

tree:   https://github.com/AsahiLinux/linux touchpad/wip
head:   a2281d64fdbcbab0dae68c6ea75bd5b548332e06
commit: ebaeac45289171e9e6a775d13f2bf34bfec4d104 [63/82] dmaengine: apple-admac: Add Apple ADMAC driver
config: s390-allyesconfig (https://download.01.org/0day-ci/archive/20211216/202112160214.4Ffd17JG-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/AsahiLinux/linux/commit/ebaeac45289171e9e6a775d13f2bf34bfec4d104
        git remote add asahilinux https://github.com/AsahiLinux/linux
        git fetch --no-tags asahilinux touchpad/wip
        git checkout ebaeac45289171e9e6a775d13f2bf34bfec4d104
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=s390 SHELL=/bin/bash drivers/clk/ drivers/dma/ sound/soc/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

>> drivers/dma/apple-admac.c:125:5: warning: no previous prototype for 'admac_alloc_chan_resources' [-Wmissing-prototypes]
     125 | int admac_alloc_chan_resources(struct dma_chan *chan)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:130:6: warning: no previous prototype for 'admac_free_chan_resources' [-Wmissing-prototypes]
     130 | void admac_free_chan_resources(struct dma_chan *chan)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:135:5: warning: no previous prototype for 'admac_ring_noccupied_slots' [-Wmissing-prototypes]
     135 | int admac_ring_noccupied_slots(int ringval)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/dma/apple-admac.c: In function 'admac_ring_noccupied_slots':
   drivers/dma/apple-admac.c:137:22: error: implicit declaration of function 'FIELD_GET'; did you mean 'FOLL_GET'? [-Werror=implicit-function-declaration]
     137 |         int wrslot = FIELD_GET(RING_WRITE_SLOT, ringval);
         |                      ^~~~~~~~~
         |                      FOLL_GET
   drivers/dma/apple-admac.c: At top level:
>> drivers/dma/apple-admac.c:155:5: warning: no previous prototype for 'admac_cyclic_read_residue' [-Wmissing-prototypes]
     155 | u32 admac_cyclic_read_residue(struct admac_data *ad, int channo, struct admac_tx *adtx)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:181:17: warning: no previous prototype for 'admac_tx_status' [-Wmissing-prototypes]
     181 | enum dma_status admac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
         |                 ^~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:228:6: warning: no previous prototype for 'admac_start' [-Wmissing-prototypes]
     228 | void admac_start(struct admac_chan *adchan)
         |      ^~~~~~~~~~~
>> drivers/dma/apple-admac.c:244:6: warning: no previous prototype for 'admac_issue_pending' [-Wmissing-prototypes]
     244 | void admac_issue_pending(struct dma_chan *chan)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:263:5: warning: no previous prototype for 'admac_pause' [-Wmissing-prototypes]
     263 | int admac_pause(struct dma_chan *chan)
         |     ^~~~~~~~~~~
>> drivers/dma/apple-admac.c:272:5: warning: no previous prototype for 'admac_resume' [-Wmissing-prototypes]
     272 | int admac_resume(struct dma_chan *chan)
         |     ^~~~~~~~~~~~
>> drivers/dma/apple-admac.c:281:5: warning: no previous prototype for 'admac_terminate_all' [-Wmissing-prototypes]
     281 | int admac_terminate_all(struct dma_chan *chan)
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:303:14: warning: no previous prototype for 'admac_tx_submit' [-Wmissing-prototypes]
     303 | dma_cookie_t admac_tx_submit(struct dma_async_tx_descriptor *tx)
         |              ^~~~~~~~~~~~~~~
>> drivers/dma/apple-admac.c:325:33: warning: no previous prototype for 'admac_prep_dma_cyclic' [-Wmissing-prototypes]
     325 | struct dma_async_tx_descriptor *admac_prep_dma_cyclic(
         |                                 ^~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/admac_alloc_chan_resources +125 drivers/dma/apple-admac.c

   124	
 > 125	int admac_alloc_chan_resources(struct dma_chan *chan)
   126	{
   127		return 0;
   128	}
   129	
 > 130	void admac_free_chan_resources(struct dma_chan *chan)
   131	{
   132		// TODO
   133	}
   134	
 > 135	int admac_ring_noccupied_slots(int ringval)
   136	{
   137		int wrslot = FIELD_GET(RING_WRITE_SLOT, ringval);
   138		int rdslot = FIELD_GET(RING_READ_SLOT, ringval);
   139	
   140		if (wrslot != rdslot) {
   141			return (wrslot + 4 - rdslot) % 4;
   142		} else {
   143			WARN_ON((ringval & (RING_FULL | RING_EMPTY)) == 0);
   144	
   145			if (ringval & RING_FULL)
   146				return 4;
   147			else
   148				return 0;
   149		}
   150	}
   151	
   152	/*
   153	 * Read from hardware the residue of a cyclic dmaengine transaction.
   154	 */
 > 155	u32 admac_cyclic_read_residue(struct admac_data *ad, int channo, struct admac_tx *adtx)
   156	{
   157		u32 ring1, ring2;
   158		u32 residue1, residue2;
   159		int nreports;
   160		size_t pos;
   161	
   162		ring1 =    admac_peek(ad, REG_TX_REPORT_RING(channo));
   163		residue1 = admac_peek(ad, REG_TX_RESIDUE(channo));
   164		ring2 =    admac_peek(ad, REG_TX_REPORT_RING(channo));
   165		residue2 = admac_peek(ad, REG_TX_RESIDUE(channo));
   166	
   167		if (residue2 > residue1) {
   168			// engine must have loaded next descriptor between the two residue reads
   169			nreports = admac_ring_noccupied_slots(ring1) + 1;
   170		} else {
   171			// no descriptor load between the two reads, ring2 is safe to use
   172			nreports = admac_ring_noccupied_slots(ring2);
   173		}
   174	
   175		pos = adtx->reclaimed_pos + adtx->period_len * (nreports + 1) \
   176							 - residue2;
   177	
   178		return adtx->buf_len - pos % adtx->buf_len;
   179	}
   180	
 > 181	enum dma_status admac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
   182					struct dma_tx_state *txstate)
   183	{
   184		struct admac_chan *adchan = to_admac_chan(chan);
   185		struct admac_data *ad = adchan->host;
   186		struct admac_tx *adtx;
   187	
   188		enum dma_status ret;
   189		size_t residue;
   190		unsigned long flags;
   191	
   192		ret = dma_cookie_status(chan, cookie, txstate);
   193		if (ret == DMA_COMPLETE || !txstate)
   194			return ret;
   195	
   196		/*
   197		 * Presumably ALSA code will query residue to know if an overrun occured,
   198		 * this seems a proper place to insert a write barrier.
   199		 */
   200		wmb();
   201	
   202		spin_lock_irqsave(&adchan->lock, flags);
   203		adtx = adchan->current_tx;
   204	
   205		if (adtx && adtx->tx.cookie == cookie) {
   206			ret = DMA_IN_PROGRESS;
   207			residue = admac_cyclic_read_residue(ad, adchan->no, adtx);
   208		} else {
   209			ret = DMA_IN_PROGRESS;
   210			residue = 0;
   211			list_for_each_entry(adtx, &adchan->issued, node) {
   212				if (adtx->tx.cookie == cookie) {
   213					residue = adtx->buf_len;
   214					break;
   215				}
   216			}
   217		}
   218		spin_unlock_irqrestore(&adchan->lock, flags);
   219	
   220		if (adtx)
   221			dev_dbg(ad->dev, "ch%d residue: %lx, (%ld%%)\n", adchan->no,
   222				residue, residue*100/adtx->buf_len);
   223	
   224		dma_set_residue(txstate, residue);
   225		return ret;
   226	}
   227	
 > 228	void admac_start(struct admac_chan *adchan)
   229	{
   230		struct admac_data *ad = adchan->host;
   231		int ch = adchan->no;
   232	
   233		admac_poke(ad, REG_TX_STATUS1(ch), STATUS_DESC_DONE | STATUS_ERR);
   234		admac_poke(ad, REG_TX_CTL(ch), REG_TX_CTL_RESET_RINGS);
   235		admac_poke(ad, REG_TX_CTL(ch), 0);
   236		admac_cyclic_write_one_desc(ad, ch, adchan->current_tx);
   237		admac_poke(ad, REG_TX_EN, 1 << ch);
   238	
   239		admac_cyclic_write_desc(ad, ch, adchan->current_tx);
   240	
   241		dev_dbg(ad->dev, "ch%d start\n", ch);
   242	}
   243	
 > 244	void admac_issue_pending(struct dma_chan *chan)
   245	{
   246		struct admac_chan *adchan = to_admac_chan(chan);
   247		struct admac_tx *tx;
   248		unsigned long flags;
   249	
   250		spin_lock_irqsave(&adchan->lock, flags);
   251		list_splice_tail_init(&adchan->submitted, &adchan->issued);
   252		if (!list_empty(&adchan->issued) && !adchan->current_tx) {
   253			tx = list_first_entry(&adchan->issued, struct admac_tx, node);
   254			list_del(&tx->node);
   255	
   256			adchan->current_tx = tx;
   257			adchan->nperiod_acks = 0;
   258			admac_start(adchan);
   259		}
   260		spin_unlock_irqrestore(&adchan->lock, flags);
   261	}
   262	
 > 263	int admac_pause(struct dma_chan *chan)
   264	{
   265		struct admac_chan *adchan = to_admac_chan(chan);
   266	
   267		admac_poke(adchan->host, REG_TX_EN_CLR, 1 << adchan->no);
   268	
   269		return 0;
   270	}
   271	
 > 272	int admac_resume(struct dma_chan *chan)
   273	{
   274		struct admac_chan *adchan = to_admac_chan(chan);
   275		
   276		admac_poke(adchan->host, REG_TX_EN, 1 << adchan->no);
   277	
   278		return 0;
   279	}
   280	
 > 281	int admac_terminate_all(struct dma_chan *chan)
   282	{
   283		struct admac_chan *adchan = to_admac_chan(chan);
   284		struct admac_tx *adtx, *_adtx;
   285		unsigned long flags;
   286		LIST_HEAD(head);
   287	
   288		spin_lock_irqsave(&adchan->lock, flags);
   289		admac_poke(adchan->host, REG_TX_EN_CLR, 1 << adchan->no);
   290		adchan->current_tx = NULL;
   291		list_splice_tail_init(&adchan->submitted, &head);
   292		list_splice_tail_init(&adchan->issued, &head);
   293		spin_unlock_irqrestore(&adchan->lock, flags);
   294	
   295		list_for_each_entry_safe(adtx, _adtx, &head, node) {
   296			list_del(&adtx->node);
   297			admac_desc_free(&adtx->tx);
   298		}
   299	
   300		return 0;
   301	}
   302	
 > 303	dma_cookie_t admac_tx_submit(struct dma_async_tx_descriptor *tx)
   304	{
   305		struct admac_tx *adtx = to_admac_tx(tx);
   306		struct admac_chan *adchan = to_admac_chan(tx->chan);
   307		unsigned long flags;
   308		dma_cookie_t cookie;
   309	
   310		spin_lock_irqsave(&adchan->lock, flags);
   311		cookie = dma_cookie_assign(tx);
   312		list_add_tail(&adtx->node, &adchan->submitted);
   313		spin_unlock_irqrestore(&adchan->lock, flags);
   314	
   315		return cookie;
   316	}
   317	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ