From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org, clemens@ladisch.de,
ffado-devel@lists.sf.net
Subject: Re: [PATCH 09/39] firewire-lib: Add sort function for transmitted packet
Date: Fri, 28 Feb 2014 23:31:51 +0900 [thread overview]
Message-ID: <53109DD7.9060702@sakamocchi.jp> (raw)
In-Reply-To: <s5h8usvn3ik.wl%tiwai@suse.de>
Iwai-san,
Thanks for your reviewing.
(Feb 28 2014 15:40), Takashi Iwai wrote:
>> +#define SWAP(tbl, m, n) \
>> + t = tbl[n].id; \
>> + tbl[n].id = tbl[m].id; \
>> + tbl[m].id = t; \
>> + t = tbl[n].dbc; \
>> + tbl[n].dbc = tbl[m].dbc; \
>> + tbl[m].dbc = t; \
>> + t = tbl[n].payload_size; \
>> + tbl[n].payload_size = tbl[m].payload_size; \
>> + tbl[m].payload_size = t;
>
> Why swap() macro can't be used instead?
Because I didn't know the macro... I confirm it in kernel.h. Thank you.
>> +static void packet_sort(struct sort_table *tbl, unsigned int len)
>> +{
>> + unsigned int i, j, k, t;
>> +
>> + i = 0;
>> + do {
>> + for (j = i + 1; j < len; j++) {
>> + if (((tbl[i].dbc > tbl[j].dbc) &&
>> + (tbl[i].dbc - tbl[j].dbc < DBC_THRESHOLD))) {
>> + SWAP(tbl, i, j);
>> + } else if ((tbl[j].dbc > tbl[i].dbc) &&
>> + (tbl[j].dbc - tbl[i].dbc >
>> + DBC_THRESHOLD)) {
>> + for (k = i; k > 0; k--) {
>> + if ((tbl[k].dbc > tbl[j].dbc) ||
>> + (tbl[j].dbc - tbl[k].dbc >
>> + DBC_THRESHOLD)) {
>> + SWAP(tbl, j, k);
>> + }
>> + break;
>> + }
>> + }
>> + break;
>> + }
>> + i = j;
>> + } while (i < len);
>> +}
>
> You can use the standard sort() function (available in linux/sort.h).
According to /lib/sort.c, it's for heap sort.
Currently I think I cannot write this algorism as heap sort because data
consist of cyclic numbers, A simple example is:
[4, 5, 0, 2, 1, 3, 4, 0, 5, 1, 3, 2, 4, 0, 1, 5]
After sorting, this sequence of number should be:
[4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1]
And we need to use stable sort algorism because there are successive
elements with the same value.
If you want to see actual example, please see [PATCH 21/39]. A sequence
of the last four bytes in 'CIP header 1' is data to be sort.
>> + /* for sorting transmitted packets */
>> + if (s->direction == AMDTP_IN_STREAM) {
>> + s->remain_packets = 0;
>> + s->sort_table = kzalloc(sizeof(struct sort_table) *
>> + QUEUE_LENGTH, GFP_KERNEL);
>> + if (s->sort_table == NULL)
>> + return -ENOMEM;
>> + s->left_packets = kzalloc(amdtp_stream_get_max_payload(s) *
>> + QUEUE_LENGTH / 4, GFP_KERNEL);
>
> NULL check missing?
OK. I forgot it.
Thanks
Takashi Sakamoto
o-takashi@sakamocchi.jp
next prev parent reply other threads:[~2014-02-28 14:31 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-28 3:27 [GIT PULL][PATCH 00/39] Enhancement of support for Firewire devices Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 01/39] firewire-lib: Rename functions, structure, member for AMDTP Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 02/39] firewire-lib: Add macros instead of fixed value " Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 03/39] firewire-lib: Add 'direction' member to 'amdtp_stream' structure Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 04/39] firewire-lib: Split some codes into functions to reuse for both streams Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 05/39] firewire-lib: Add support for AMDTP in-stream and PCM capture Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 06/39] firewire-lib: Add support for MIDI capture/playback Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 07/39] firewire-lib: Give syt value as parameter to handle_out_packet() Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 08/39] firewire-lib: Add support for duplex streams synchronization in blocking mode Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 09/39] firewire-lib: Add sort function for transmitted packet Takashi Sakamoto
2014-02-28 6:40 ` Takashi Iwai
2014-02-28 14:31 ` Takashi Sakamoto [this message]
2014-02-28 3:27 ` [PATCH 10/39] firewire-lib: Add transfer delay to synchronized duplex streams Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 11/39] firewire-lib: Add support for channel mapping Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 12/39] firewire-lib: Rename macros, variables and functions for CMP Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 13/39] firewire-lib: Add 'direction' member to 'cmp_connection' structure Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 14/39] firewire-lib: Add handling output connection by CMP Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 15/39] firewire-lib: Add a new function to check others' connection Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 16/39] firewire-lib: Add some AV/C general commands Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 17/39] firewire-lib: Add quirks for Fireworks Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 18/39] firewire-lib: Add a fallback at RCODE_CANCELLED Takashi Sakamoto
2014-02-28 20:25 ` Stefan Richter
2014-02-28 20:39 ` Stefan Richter
2014-03-01 3:18 ` Takashi Sakamoto
2014-03-01 10:10 ` Stefan Richter
2014-03-01 12:22 ` Takashi Sakamoto
2014-03-01 14:20 ` Stefan Richter
2014-03-04 1:35 ` [FFADO-devel] " Jonathan Woithe
2014-03-04 8:33 ` Stefan Richter
2014-03-04 9:28 ` Stefan Richter
2014-03-01 10:34 ` Stefan Richter
2014-03-01 12:23 ` Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 19/39] fireworks: Add skelton for Fireworks based devices Takashi Sakamoto
2014-02-28 6:51 ` Takashi Iwai
2014-02-28 15:05 ` Takashi Sakamoto
2014-02-28 15:10 ` Takashi Iwai
2014-02-28 15:36 ` Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 20/39] fireworks: Add transaction and some commands Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 21/39] fireworks: Add connection and stream management Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 22/39] fireworks: Add proc interface for debugging purpose Takashi Sakamoto
2014-02-28 6:54 ` Takashi Iwai
2014-03-01 13:17 ` Takashi Sakamoto
2014-03-03 9:01 ` Takashi Iwai
2014-03-04 14:10 ` Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 23/39] fireworks: Add MIDI interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 24/39] fireworks: Add PCM interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 25/39] fireworks: Add hwdep interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 26/39] fireworks: Add command/response functionality into " Takashi Sakamoto
2014-02-28 6:58 ` Takashi Iwai
2014-03-01 13:18 ` Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 27/39] bebob: Add skelton for BeBoB based devices Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 28/39] bebob: Add commands and connections/streams management Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 29/39] bebob: Add proc interface for debugging purpose Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 30/39] bebob: Add MIDI interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 31/39] bebob: Add PCM interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 32/39] bebob: Add hwdep interface Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 33/39] bebob: Prepare for device specific operations Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 34/39] bebob: Add support for Terratec PHASE, EWS series and Aureon Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 35/39] bebob: Add support for Yamaha GO series Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 36/39] bebob: Add support for Focusrite Saffire/SaffirePro series Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 37/39] bebob: Add support for M-Audio usual Firewire series Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 38/39] bebob: Send a cue to load firmware for M-Audio " Takashi Sakamoto
2014-02-28 3:27 ` [PATCH 39/39] bebob: Add support for M-Audio special " Takashi Sakamoto
2014-03-01 10:53 ` Stefan Richter
2014-03-01 13:06 ` Takashi Sakamoto
2014-03-01 14:32 ` Stefan Richter
2014-02-28 6:36 ` [GIT PULL][PATCH 00/39] Enhancement of support for Firewire devices Takashi Iwai
2014-03-01 13:14 ` Takashi Sakamoto
[not found] <5316963F.1000206@sakamocchi.jp>
2014-03-05 10:47 ` [GIT PULL][PATCH 00/39 v2] " Takashi Sakamoto
2014-03-05 10:47 ` [PATCH 09/39] firewire-lib: Add sort function for transmitted packet Takashi Sakamoto
2014-03-09 21:07 ` Clemens Ladisch
2014-03-10 13:29 ` Takashi Sakamoto
2014-03-11 8:11 ` Clemens Ladisch
2014-03-12 1:23 ` Takashi Sakamoto
2014-03-12 7:21 ` Takashi Iwai
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=53109DD7.9060702@sakamocchi.jp \
--to=o-takashi@sakamocchi.jp \
--cc=alsa-devel@alsa-project.org \
--cc=clemens@ladisch.de \
--cc=ffado-devel@lists.sf.net \
--cc=tiwai@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).